Русский
Русский
English
Статистика
Реклама

Мониторинг сервера

Перевод Падение Slack 4 января 2021

10.05.2021 14:18:51 | Автор: admin


4 января 2021 года для многих людей во всем мире, также как и для большинства работников Slack был первым рабочим днем после нового года (за исключением специалистов горячей линии и службы поддержки, которые никогда не спят). В день Азии и утро в Европе прошло спокойно, но когда забрезжил рассвет в Америке мы стали получать сообщения от внешней службы мониторинга о росте количества ошибок. Мы начали разбираться, в чем дело. Ситуация с ошибками ухудшалась и мы инициировали процесс расследования инцидентов (о том, как у нас устроено управление инцидентами подробнее можно почитать в статье Райана Каткова (Ryan Katkov) All Hands on Deck https://slack.engineering/all-hands-on-deck/).

Как будто нам этого было недостаточно для того, чтобы окончательно испортить первый рабочий день нового года, в тот момент, мы пытались понять, что происходит, упали сервисы панелей мониторинга и оповещений. Мы связались с группой мониторинга, чтобы они попытались восстановить их как можно быстрее.

Чтобы сократить список возможных причин мы по-быстрому откатили некоторые изменения, которые были сделаны сегодня (забегая вперед дело было не в них). Также мы подключили еще нескольких человек из инфраструктурных групп, потому что процесс поиска сбоя шел медленно из-за того, что не работали панели мониторинга и оповещения. У нас сохранялся доступ к различным внутренним консолям и страницам статуса, к некоторым консольным утилитам, а также к системе сбора логов. Система сбора метрик тоже функционировала и мы могли запускать запросы к ней напрямую, но это было и совсем не так результативно, как как использование наших панелей мониторинга с преднастроенными запросами. Хотя наша инфраструктура в целом функционировала, мы видели признаки деградации сети, о чем мы сообщили AWS, нашему основному облачному провайдеру. На тот момент Slack работал в 6:57 по тихоокеанскому стандартному времени 99% сообщений успешно доставлялись (хотя это не было нормой, поскольку наше обычное значение этого параметра 99.999%).

Трафик в Slack имеет характерные всплески в начале и середине каждого часа, когда уведомления и другие типы автоматически создаваемых сообщений (большая часть из них внешняя это задачи cron со всего мира). У нас настроено масштабирование звена веб-служб и бэкэнда для того, чтобы подстроится под эти пики. Тем не менее всплеск нагрузки в 7 утра в сочетании с проблемами сетевой инфраструктуры привел к перегрузке звена веб-служб. С ростом нагрузки стали расти потери пакетов. Это, в свою очередь, привело к большим задержкам обращений веб-служб к бэкэнду, и их перегрузке. Slack упал.

В это время независимо друг от друга происходили две вещи. Во-первых, некоторые инстансы были автоматически помечены системой как проблемные, потому что они не могли достучаться до служб бэкэнда, от которых они зависели. Система попыталась заменить их новыми. Во-вторых, наша система автоматического масштабирования уменьшила размеры звена веб-сервисов. Так как мы работали без панелей мониторинга, некоторые инженеры, которые вели работы по данному инциденту подключались напрямую к сервисам, работающим на проде. У многих из них начали прерываться сессии SSH, потому что инстансы, с которыми они работали были отключены системой. Это еще больше затрудняло наши попытки разобраться в ситуации, поэтому мы отключили автоматическое уменьшение размеров системы. Это упростило работу по поиску сбоя и позволило стабилизовать производительность системы.

Наше звено веб-сервисов масштабируется на основании двух видов сигналов. Один из них, это загрузка процессоров (метрика, которая используется для масштабирования практически везде) а другой, это загрузка доступных рабочих потоков Apache. Проблемы с сетью до 7:00 означали, что потоки находились больше времени в режиме ожидания, что приводило к уменьшению загрузки процессоров, а это инициировало автоматическое уменьшения количества инстансов. Поскольку состояние сети продолжало ухудшаться, из-за чего звено веб-служб больше времени находилось в ожидании ответа от бэкэнда, что приводило к увеличению загрузки рабочих потоков, и система автоматически увеличила количество инстансов веб-служб. Между 7:01 и 7:15 мы попытались добавить 1200 серверов в наше звено веб-сервисов.


К сожалению, наше масштабирование не отработало как полагается. У нас работает сервис, удачно названный службой обеспечения (в оригинале provision-service прим. пер.) и его название полностью отражает его функционал, в который входит настройка и тестирование новых инстансов, а также выполнение роли управляющего для инфраструктуры. Службе обеспечения нужно взаимодействовать с внутренними системами Slack и c API AWS, а поскольку это взаимодействие происходило по той же нестабильной сети и поскольку, как и большинство систем Slack на тот момент, он тратил больше времени на соединение и получение ответа, и использовал больше ресурсов, чем обычно. Пиковая нагрузка, связанная с необходимостью ввести одновременно большое число инстансов в условиях нестабильной сети привело к тому, что служба обеспечения уперлась в системные ограничения (наиболее значимым из которых было ограничение количества открытых файлов в Linux, но также были превышены и квоты AWS).

Пока мы пытались восстановить работу службы обеспечения, производительность звена веб-сервисов оставалась недостаточной для восстановления нормальной работы из-за того, что масштабирование системы не работало как надо. У нас было запущено большое число инстансов, но большая часть из них не была до конца настроена службой обеспечения и не работала. Большое количество сбойных инстансов привели к тому, что мы достигли предварительно установленного лимита автомасштабирования для нашего звена веб-сервисов, который кратен количеству инстансов, обычно требующихся для того, чтобы справиться с пиковым трафиком. Часть специалистов, работающих над данным инцидентом, занялись тем, что вручную удаляли неработающие инстансы, остальные продолжали искать источник проблемы. Ко всему этому у нас до сих пор не работала служба панелей мониторинга, мы не могли ее запустить из-за того, что служба обеспечения была перегружена.

В один прекрасный момент служба обеспечения заработала (было около 8:15) и начала запускать работающие инстансы. Ситуация стала понемногу улучшаться. У нас по-прежнему были некоторые проблемы с продом, часть из которых удалось смягчить, а другая была в процессе решения. Также мы до сих пор испытывали проблемы связанные с повышенным уровнем потери пакетов в сети. Несмотря на это в 9:15 у нашего звена веб-сервисов было достаточно работающих узлов чтобы переваривать входящий трафик. Из-за проблем с сетью балансировщики нагрузки показывали большое число проблемных узлов, но к счастью у них был режим panic mode https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/panic_threshold в котором балансеры начинают распределять нагрузку на все узлы независимо от результатов проверки их состояния. Это, плюс повторные соединения и паттерн circuit breaking, помогли нам возобновить работу сервиса. Да, Slack был медленнее, чем обычно, и частота ошибок была выше, но в 9:15 он уже работал, а не лежал, как до этого. Целый час ушел на то, чтобы снизить частоту ошибок до приемлемого уровня по двум причинам. Во-первых, из-за нестабильности сети нам требовалось больше инстансов, чем обычно, чтобы нормально обслуживать входящий трафик. Во-вторых, больше времени ушло на процесс развертывания опять же из-за проблем с сетью.


К тому времени, как Slack восстановился, инженеры AWS нашли причину сбоя: часть нашей сетевой инфраструктуры AWS действительно была перегружена, что и приводило к потерям пакетов.

Чтобы было проще понять, что же произошло, стоит рассказать немного подробней о некоторых архитектурных особенностях Slack. На старте, не так уж много лет назад, все, что касается работы Slack работало в одном аккаунте AWS. По мере роста размера, сложности и количества специалистов, задействованных в обслуживании системы, мы отказались от этого решения и разнесли сервисы по различным аккаунтам и VPC (Virtual Private Clouds). Это решение позволило нам добиться большей изолированности между различными сервисами, и позволяло более точно контролировать привилегии операторов. Для того, чтобы связать наши VPC, в качестве хаба мы использовали AWS Transit Gateways (TGWs).

4 января наши TGWs оказались перегружены. TGWs обслуживаются AWS и предполагается, что они должны масштабироваться незаметно для нас. Но в первые дни после нового года трафик Slack имеет необычную структуру, он ниже в выходные дни, поскольку все отвлекаются от работы (молодцы, что поддерживаете баланс работы и лично жизни, пользователи Slack, так держать!). В первый рабочий день кэши клиентов не прогреты и при первом подключении они подгружают больше данных, чем обычно, после нескольких дней затишья нагрузка растет до самых больших значений за год буквально в течении одной ночи.

Наши системы позволяют быстро отмасштабировать производительность систем, чтобы переварить нагрузку такого рода (и в прошлые годы мы всегда хорошо с ней справлялись). Но наши TGWs не смогли отмасштабироваться достаточно быстро. В ходе данного инцидента специалисты AWS были оповещены о нашей проблеме с потерей пакетов их внутренним мониторингом и вручную увеличили емкость TGWs. К 10:40 это изменение вступило в силу во всех зонах доступности (Availability Zones) и наша сеть вернулась к нормальному режиму работы, а с ним вернулись обычные уровни ошибок и задержки.


AWS заверили нас, в процессе разбора данного инцидента ими были пересмотрены алгоритмы масштабирования TGW для резких скачков объема трафика. А мы поставили себе напомнание (конечно же это было напоминание Slack slack.com/intl/en-ie/help/articles/208423427-Set-a-reminder) превентивно увеличить емкость TGWs в конце следующих новогодних каникул.

Выводы


Мониторинг является одним из наших наиболее критичных сервисов благодаря ему мы узнаем в порядке ли службы, с которыми взаимодействуют пользователи, а помимо этого это один из наших наиболее важных инструментов для выявления проблем. Мы прилагаем все усилия, чтобы наши инструменты мониторинга были как можно более независимыми от инфраструктуры Slack, чтобы они были доступны тогда, когда мы нуждаемся в них больше всего. В данной ситуации наши панели мониторинга и оповещения упали, поскольку базы данных, из которых они брали информацию оказались расположены в другом VPC, что привело к зависимости от TGWs. Запуск их в одном VPS позволит избавиться от этой зависимости.

Также мы приняли решение в дальнейшем регулярно проводить нагрузочное тестирование службы обеспечения, для того чтобы исключить проблемы с масштабированием (мы делали это и раньше, но в данном случае превысили параметры наших предыдущих испытаний). Также мы пересмотрим наши конфигурации контроля здоровья сервисов, а также конфигурации автомасштабирования для того, чтобы в дальнейшем избежать подобной перегрузки службы обеспечения даже в случае экстремальных условий, как, например, нестабильного сетевого соединения.

Мы глубоко сожалеем о перебоях в работе нашего приложения. Каждый инцидент это возможность учиться и незапланированный вклад в повышение надежности сервиса в будущем. Мы многое узнали благодаря данному сбою и, как всегда, мы намерены использовать эти незапланированные инвестиции чтобы улучшить нашу инфраструктуру в 2021 и последующие годы.



Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Подробнее..

Вебинар Solarwinds и что у них нового в последней версии 2020.2

18.08.2020 16:06:31 | Автор: admin
Solarwinds очень известен своими решениями по мониторингу и удаленному управлению (Dameware). В этой статье мы расскажем об обновлениях платформы мониторинга Orion Solarwinds версии 2020.2 (вышла в июне 2020 года) и приглашаем вас на вебинар. Расскажем о решаемых задачах по мониторингу сетевых устройств и инфраструктуры, мониторингу flow- и span-трафика (а span Solarwinds тоже умеет, хотя, многие удивляются), мониторингу прикладного ПО, управлению конфигурациями, управлению адресным пространством и о реальных кейсах внедрения этого продукта у российских заказчиков в первую очередь, в организациях банковской и нефтегазовой отрасли.

image

Вебинар проведем 19 августа в 10 утра совместно с компанией-дистрибьютором Аксофт. Регистрация здесь.

А ниже под катом вы узнаете о новинках последней версии Solarwinds 2020.2. В конце статьи будет ссылка на онлайн-демо.

Платформа Orion Solarwinds это различные модули для мониторинга и управления. Каждый из модулей получил расширение функционала, появилась поддержка новых устройств и протоколов.

Network Performance Monitor (NPM) 2020.2


Мониторинг до 1000000 элементов на одном экземпляре платформы Orion. По сравнению с версией 2018.2, в которой максимальное число элементов ограничивалось 400000, рост производительности составил 250%. Кроме этого, увеличилась скорость холодного старта системы: слева версия 2020.2, справа версия 2019.4. Об улучшениях производительности можно узнать больше на этой странице в блоге Solarwinds.

image

Улучшились представления Solarwinds: создание и настройка текстовых полей, надписей или макетов, добавление пользовательских значков, добавление фигур, динамического фона, массовое администрирование и улучшенная работа с временной шкалой. Подробнее об улучшениях в части дашбордов можно узнать в блоге Solarwinds.

image

Модернизирован функционал создания кастомных дашбордов. Теперь представления можно создавать на основе языка запросов SWQL. Подробная информация в на странице блога Solarwinds.

image

Упрощение процесса обновления: возможность предварительного обновления, отчеты о плане обновления, автоматизация обновлений с помощью Orion SDK. Подробнее на этой странице.

image

Улучшение влияния состояния дисковых томов на статус родительского элемента инфраструктуры (ноды). Теперь влияет не только статус (доступен/не доступен), но и состояние утилизации дискового пространства. Можно также настраивать, что именно будет влиять на статус ноды. Подробности на этой странице.

image

Solarwinds разработал специальный SDK на базе PowerShell скриптов для загрузки языковых пакетов в систему. Может быть, когда-нибудь в Solarwinds появится и поддержка русского языка. Подробнее по этой ссылке.

Network Traffic Analyzer (NTA) 2020.2


Этот модуль улучшился по части поддержки распознавания трафика от VMware Virtual Distributed Switch (VDS) и интеграции с модулем Solarwinds IP Address Manager. Сейчас немного подробнее.

Анализ трафика крайне важен для понимания того, как нагрузки на элементы виртуальной инфраструктуры связаны и взаимодействуют между собой. Поддержка VDS помогает оценить влияние миграции и определить нагрузки с точки зрения трафика, который генерируется на других на виртуальных машинах, а также выявить зависимости от внешних сетевых служб.

VMware Virtual Distributed Switch коммутирует обмен данными между гипервизорами и на нём можно настроить экспорт данных по протоколу IPFIX.

image

После настройки отправки Netflow-трафика, в интерфейсе Solarwinds начнут появляться данные. О том, как настроить VMware VDS на отправку трафика на коллектор, можно прочитать в этой статье в блоге Solarwinds.

Улучшенная интеграция с IPAM позволяет повторно использовать уже созданные IP-группы, описывать точные условия отправки уведомления, которые ссылаются на трафик приложения с IP-группами или конкретными конечными точками.

image

При помощи IP-групп можно также описывать приложения, при этом в уведомлении будет указано это приложение. Подробнее об интеграции с IPAM в блоге Solarwinds.

Network Configuration Manager (NCM) 2020.2


Самое важное обновление появление возможности одновременного обновления прошивки сразу нескольких устройств.

image

Другое обновление появление встроенной базы с устройствами Cisco в статусе EOL и EOS. Подробнее в блоге Solarwinds.

IP Address Manager (IPAM) 2020.2


В центре внимания обновлений этого выпуска были пользовательские возможности и функциональность.

image

И модуль IPAM, и NTA имеют средства для создания и работы с группами IP, то есть коллекциями конечных точек или подсетей, которые ссылаются на группы конечных точек. Сейчас получаемый трафик можно характеризовать с точки зрения группы IP. Подробнее об обновлениях в IPAM в блоге Solarwinds.

User Device Tracker (UDT) 2020.2


Появилась поддержка технологии Cisco Viptela и устранены баги. Подробнее об обновлениях UDT читайте в блоге Solarwinds.

VoIP & Network Quality Manager (VNQM) 2020.2


В этом релизе появилась поддержка операций IPSLA от коммутационного центра Cisco Nexus для центров обработки данных. Для операций IPSLA, которые предварительно настроены на коммутаторах Cisco Nexus 3K, 7K и 9K, VNQM обнаружит их и запустит мониторинг. VNQM не включает возможности создания новых операций на устройствах. Ниже перечислены поддерживаемые операции.

image

В зависимости от платформы и конкретной операции, некоторые из них опрашиваются через командную строку. Для коммутаторов Cisco Nexus должны быть предоставлены текущие учетные данные CLI. Обратите внимание, что операции IPSLA не поддерживаются на коммутаторах серии Nexus 5K.

image

image

После настройки сбора данных по операциям, данные появятся в интерфейсе. Об обновлениях VNQM подробнее написано в блоге Solarwinds.

Log Analyzer 2020.2


Основное улучшение добавление возможности анализа плоских файлов журналов. Эту аналитику можно использовать при расследовании причин возникновения нештатных ситуаций. Подробнее об обновлениях Log Analyzer можно узнать в блоге Solarwinds.

image

Server & Application Monitor (SAM) 2020.2


В SAM появились поллеры, которые можно привязывать к объектам мониторинга, их аж 23 штуки. При помощи поллеров можно снимать данные от PaaS, IaaS, локальных и гибридных инфраструктур. Поллеры подключаются через REST APIs к целевым системам: Azure, JetBrains, Bitbucket, Jira и другим. На скриншоте ниже приведён пример карты инфраструктуры, обнаруженной при помощи стандартного шаблона для Office 365 и шаблона поллера для Azure AD.

image

Для отображения собираемых данных в Solarwinds SAM предусмотрены готовые представления:

image

Следующее улучшение расширение количества объектов мониторинга, которые поддерживает инсталляция Solarwinds, теперь это 550000 компонентов или 40000 нод (зависит от типа лицензий Solarwinds).

В версии SAM 2020.2 были обновлены некоторые шаблоны мониторинга, например, для JBoss и WildFly.

SAM 2020.2 получил сертификат Nutanix Ready Certified, который позволяет устанавливать SAM на гипервизоре Nutanix AHV и использовать Nutanix REST APIs для работы с AHV.

image

Появился мастер установки обновлений. При помощи него можно спланировать обновление и провести тестовую установку.

image

Solarwinds появился также и в магазине приложений AWS. В Azure он уже есть.

image

Узнать подробнее об обновлениях в модуле SAM можно узнать по ссылке.

Virtualization Manager (VMAN) 2020.2


Важное обновление этого модуля появление поддержки визуализации на картах инфраструктуры Nutanix.

image

С версии 2020.2 VMAN отслеживает показатели хранения на всех уровнях среды Nutanix от уровня кластера и хоста до отдельных виртуальных машин и хранилищ данных.

image

Подробнее об обновлениях VMAN можно узнать в блоге Solarwinds.

Storage Resource Manager (SRM) 2020.2


Появилась поддержка мониторинга здоровья NetApp 7-Mode, расширилась поддержка сбора метрик с контроллеров массивов Dell EMC VNX/CLARiiON, а также появилась совместимость с FIPS. Об обновлениях в модуле SRM можно узнать в блоге Solarwinds.

Server Configuration Monitor (SCM) 2020.2


Появилась возможность аудита изменений баз данных.

image

Из коробки поддерживается аудит следующих баз данных: MS SQL Server (31 элемент), PostgreSQL (16 элемент) и MySQL (26 элемент).

И ещё одно улучшение появился контроль атрибутов файла.

image

Обновления в модуле SCM подробнее описаны в блоге Solarwinds.

Web Performance Monitor (WPM) 2020.2


В новой версии появилась интеграция с инструментом для записи транзакций Pingdom. Pingdom также часть Solarwinds. Подробнее об обновлениях WPM в блоге Solarwinds.

Database Performance Analyzer (DPA) 2020.2


Появилась поддержка глубокого анализа PostgreSQL. Анализ поддерживается для следующих типов БД:

  • Стандартный PostgreSQL
  • EDB Postgres Advanced Server (EPAS)
  • Including the Oracle Syntax option
  • Amazon RDS for PostgreSQL
  • Amazon Aurora for PostgreSQL
  • Azure DB for PostgreSQL

image

Появилась поддержка следующих типов сертификатов для взаимодействия с БД:

  • PKCS#12 (*.pf2 or *.pfx)
  • JKS (*.jks)
  • JCEKS (*.jceks)
  • DER (*.der or *.cer)
  • PEM (*.pem, *.crt, *.ca-bundle)

image

Обновления модуля DPA подробнее описаны в блоге Solarwinds.

Enterprise Operations Console (EOC) 2020.2


В продукте улучшились типы представлений.

image

image

image

image

Подробнее об обновлениях модуля EOC в блоге Solarwinds.



Это все улучшения, о которых мы хотели рассказать. Если у вас есть вопросы, вы можете нам позвонить или задать их через форму обратной связи. А ещё не забудьте зарегистрироваться на предстоящий вебинар.

Другие наши статьи на Хабре о Solarwinds:

Бесплатные утилиты Solarwinds для мониторинга, управления ИТ-инфраструктурой и безопасностью

Настраиваем экспорт IPFIX на VMware vSphere Distributed Switch (VDS) и последующий мониторинг трафика в Solarwinds

Подписывайтесь на группу Галс Софтвэр в Фейсбуке.
Подробнее..

Добавляем CMDB и географическую карту к Zabbix

19.10.2020 10:13:52 | Автор: admin
Хабр, конечно, не очень-то подходящая для романтики площадка, но мы не можем не признаться в любви к Zabbix. В очень многих наших проектах по мониторингу мы использовали Zabbix и очень ценим стройность и логичность этой системы. Да, здесь нет модной кластеризации событий и машинного обучения (и некоторых других фичей, доступных из коробки в коммерческих системах), но уже того что есть, определенно достаточно для внутреннего спокойствия за продуктивные системы.



В этой статье расскажем о паре инструментов для расширения функционала Zabbix: CMDB на базе бесплатного решения iTop и карте объектов на базе OpenStreetMap (OSM). А в конце статьи ваш ждет ссылка на репозиторий с кодом фронтовой части для OSM.

Общий концепт разберем на примере условного проекта по мониторингу розничной сети аптек. На скриншоте ниже наш демо-стенд, но похожую концепцию мы используем в боевой среде. Переход с объекта возможен как на вложенную карту так и на карточку объекта в CMDB.



Каждая аптека это набор следующего оборудования: рабочая станция (или несколько рабочих станций), роутер, IP-камеры, принтер и другая периферия. На рабочих станциях установлены агенты Zabbix. С рабочей станции выполняется проверка через ping периферийного оборудования. Аналогичным образом, на карте объектов, с принтера можно перейти на его карточку в CMDB и посмотреть инвентаризационные данные: модель, дату поставки, ответственного и т.д. Так выглядит вложенная карта.



Здесь нужно сделать небольшое отступление. Вы можете спросить, а почему бы не использовать внутренний инвентарь Zabbix? В некоторых случаях его бывает достаточно, но мы рекомендуем клиентам всё-таки использовать внешнюю CMDB (iTop не единственный вариант, но эта система достаточно функциональна при своей бесплатности). Это удобное централизованное хранилище, где можно формировать отчеты и следить за актуальностью данных (на самом деле не только это).



На скриншоте ниже пример шаблона для наполнения инвентаря Zabbix из iTop. Все эти данные потом, разумеется, потом можно использовать в тексте уведомлений, что позволит иметь актуальную информацию сразу же при возникновении аварийной ситуации.



На скриншоте ниже карточка расположения. Здесь мы можем увидеть перечень всего ИТ-оборудования, которое находится в аптеке. На вкладке История можно отслеживать изменения в составе оборудования.



На карточку любого объекта можно перейти, посмотреть к каким сетевым устройствам он подключен, найти контактную информацию ответственного инженера, узнать когда в прошлый раз заменялся картридж с чернилами и т.д.



На этой странице наш общий подход к интеграции Zabbix с iTop.

Теперь перейдем к картографическому сервису. Мы считаем его удобным инструментом для просмотра статусов распределенных объектов на телевизоре в кабинете с большим кожаным креслом.



При нажатии на аварийную метку появляется всплывающая подсказка. С нее можно перейти на карточку объекта в CMDB либо в Zabbix. При приближении и отдалении метки объединяются в кластеры с цветом наихудшего статуса.

Географическая карта реализована с использованием js-библиотеки leaflet и плагина для кластеризации объектов. На каждую метку добавляются события из системы мониторинга и ссылка на соответствующий объект в CMDB. Статус кластеров определяется по наихудшему событию для вложенных меток. При необходимости, можно интегрировать карту с любой системой мониторинга с открытым API.

Вы можете посмотреть код фронтальной части в репозитории проекта. Контрибуции приветствуются.

Если вам интересен наш подход, на этой странице можно оставить заявку на демонстрацию. Расскажем подробнее и покажем.
Подробнее..

Мощный мониторинг за пять минут с помощью Glances

10.03.2021 12:22:46 | Автор: admin


Допустим, что у нас не очень обширная инфраструктура: несколько небольших VPSок, подкроватник, NAS и два ноутбука, торчащих в сеть. Тем не менее, за ней всё равно надо приглядывать, и заниматься этим вручную раздражает всё больше с каждой новой машиной. Я стал искать систему мониторинга, которая могла бы не съедая лишних ресурсов агрегировать информацию отовсюду в единый дашборд, желательно без геморроя с настройкой. В итоге, как только десятки мелких консольных утилит были отброшены вместе с чрезмерно усложнёнными корпоративными хреновинами вроде Prometheus и RabbitMQ, поиск быстро привёл меня к Glances утилите, берущей лучшее от обоих миров.

Glances довольно старый консольный инструмент мониторинга на Python, который на Хабре незаслуженно обошли вниманием. Первые релизы вышли в 2014 году, а самый свежий появился 23 января. У проекта почти 18к звёзд на Github, больше сотни контрибьюторов и тысячи форков.

Список отслеживаемых данных:

  • Нагрузка на CPU, информация и температура
  • Загруженность памяти (RAM, swap)
  • Средняя загруженность
  • Список и количество процессов
  • Использование сетевых интерфейсов
  • Операции с диском
  • Состояние IRQ и RAID
  • Большинство доступных датчиков
  • Свободное место на диске и распределение по разделам/папкам
  • Список контейнеров, их потребление и процессы
  • Аптайм, алёрты и другие мелочи

Кстати, Glances умеет работать и на мобильных устройствах (но, очевидно, только на рутованном андроиде, что сильно сужает круг применения).

Вся нужная информация доступна буквально по одной команде:



Но пока это лишь консольная утилита, а нам нужно гораздо больше. Вся мощь Glances раскрывается в его огромном количестве интеграций и выходных форматов. Во-первых, из коробки он умеет выводить информацию в веб-версию и XML-RPC/RESTful API. То есть поставив его на все машины и скинув вывод из всех эндпойнтов на один сервер, можно уже добиться желаемого. Но консольный вывод с десятка устройств читать неудобно ни в каком виде, а уж тем более пытаться уместить его на одном экране, поэтому смотрим интеграции:

  • Cassandra/Scylla
  • CouchDB
  • Elasticsearch
  • InfluxDB
  • Kafka
  • MQTT
  • OpenTSDB
  • Prometheus
  • Riemann
  • StatsD
  • ZeroMQ

Нас, конечно, интересует InfluxDB и последующий вывод из неё в графану. Тем более что у Glances уже есть готовый дашборд, бери да пользуйся.

Установка и настройка


Вариантов установки много, но стабильнее всего работает установка через PyPI:

  pip install glances

Можно сразу доустановить дополнительные модули:

  pip install 'glances[action,browser,cloud,cpuinfo,docker,export,folders,gpu,graph,ip,raid,snmp,web,wifi]'

Полный список установок InfluxDB здесь, стандартный вариант для Ubuntu/Debian x64:

  wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4-amd64.deb  sudo dpkg -i influxdb2-2.0.4-amd64.deb

Создаём базу glances с любым пользователем и передаём данные в конфиг Glances следующего вида:

  # glances.conf  [influxdb]    host=localhost    port=8086    protocol=http    user=admin    password=foobar    db=glances    prefix=localhost

Затем запускаем утилиту с экпортом данных в InfluxDB и использованием конфига, где к ней указан доступ:

  glances --export influxdb -С glances.conf

Почти готово, осталось открыть InfluxDB для доступа извне:

  # /etc/influxdb/influxdb.conf  [http]    enabled = true    bind-address = ":8086"    auth-enabled = true    log-enabled = true    write-tracing = false    pprof-enabled = true    pprof-auth-enabled = true    debug-pprof-enabled = false    ping-auth-enabled = true    # по хорошему нужно включить https, но я не заморачивался :)    # https-enabled = true    # https-certificate = "/etc/ssl/influxdb.pem"

Все операции выше повторяем на отслеживаемых машинах, затем на агрегирующем сервере ставим графану:

  wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -  echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list  sudo apt-get update  sudo apt-get install grafana  sudo systemctl daemon-reload  sudo systemctl start grafana-server  sudo systemctl status grafana-server

Открываем интерфейс на 3000 порту, логинимся и добавляем наши удалённые источники данных (Configuration > Data sources > Add data source > InfluxDB):



Затем берем настроенный дашборд из репозитория Glances: https://github.com/nicolargo/glances/blob/master/conf/glances-grafana.json

Импортируем его в графану (+ > Import) и настраиваем под себя, повторяем для всех машин. Готово! Теперь в одном интерфейсе мы можем подробно рассмотреть все метрики (как на КДПВ), а ключевые, вроде нагрузки на CPU, можно собрать на одном общем дашборде.

Заключение


Раньше я думал, что настраивать удалённый мониторинг на несколько машин это жуткий геморрой (или можно отдать всю работу готовым сервисам, но с большей нагрузкой и без гибкой подстройки), а оказывается нужно было просто найти подходящий инструмент. Конечно, при желании можно забить на графики и смотреть консольный вывод или обрабатывать API по-своему. Мне нравится такая вариативность.



На правах рекламы


Эпично! Виртуальные серверы на базе новейших процессоров AMD EPYC, которые подойдут не только для мониторинга, но и для размещения проектов любой сложности, от корпоративных сетей и игровых проектов до лендингов и VPN.

Подробнее..

Новый подход к просмотру логов

25.01.2021 00:11:48 | Автор: admin

Одно время, приходилось много работать с логами. Они могли быть большими и находиться на разных серверах. Требовалось не найти что-то конкретное, а понять почему система ведёт себя не так как надо. По некоторым причинам, лог-агрегатора не было.

Хотелось иметь просмотрщик логов, позволяющий, в любой момент, открыть любой файл, без скачивания на локальную машину, как команда less в linux консоли. Но при этом, должна быть удобная подсветка текста, как в IDE, и фильтрация записей по различным параметрам. Фильтрация и поиск должны работать по событиям в логе, а не по строкам, как grep, это важно когда есть многострочные записи, например ошибки со стектрейсами. Так же должна быть возможность просматривать записи сразу из нескольких файлов на одной странице, смёржив их по таймстемпу, даже если файлы находятся на разных нодах.

И я придумал как сделать такую утилиту!

Log Viewer - это небольшое web-приложение, которое работает на нодах, где лежат логи, и показывает эти логи через Web интерфейс. Это именно просмотрщик, а не агрегатор, нет никакой индексации или считывания всего лога в память, читается только та часть лога, которую пользователь смотрит в текущий момент. Такой подход позволяет почти не занимать ресурсов.

Предвижу вопросы опроизводительности типа Разве можно быстро фильтровать записи без индексации? Вплохих случаях придётся остcканировать весь лог чтобы найти хоть одну запись подходящую под фильтр. Вопервых, сканирование лога работает довольно быстро, 1Гб читается около 3,5сек, это терпимо. Вовторых, обычно известен временной интервал, вкотором ищем проблему, если задан фильтр подате, тобудет сканироваться только тачасть файла, вкоторой находятся записи относящиеся ктому времени. Найти границу временного интервала вфайле можно очень быстро бинарным поиском.

Отображение лога

Чтобы легче различать границы одной записи, запись под курсором подсвечивается прямоугольником; поле severity подсвечивается различными цветами в зависимости от значения, парные скобки подсвечиваются когда наводишь курсор на одну из них.

Обратите внимание настектрейс эксепшена, показаны только самые интересные строки, остальные сфолжены под + и , интересными строками считаются классы изпакетов принадлежащий главному приложению, соседнии сними, ипервая строка. Пакеты главного приложения задаются вконфигурации. Втаком виде стектрейс занимает намного меньше места наэкране иего удобней смотреть. Возможно такая идея понравится разработчикам Java IDE.

Имя логгера тоже сокращено: ~.SecurityManager. Показывается только имя класса, апакет сворачивается в ~.

Фолдинг влияет только на отображение, поиск работает по оригинальному тексту. Если совпадение найдётся в сокращённой части текста, то эта часть текста автоматически появится. Также, если пользователь выделит текст и нажмёт Ctrl+C, в буфер скопируется исходный текст, без всяких сокращений.

Архитектура позволяет легко навешивать на текст подсветку или всплывающие подсказки, благодаря этому, сделаны разные приятные мелочи типа показа даты в человеческом формате, если она напечатана в виде числа:

Фильтрация

Набор фильтров зависит от формата лога. Некоторые фильтры доступны всегда, например фильтр по подстроке, а некоторые появляются если в логе присутствует поле определённого типа. Это позволяет создавать специализированные фильтры для некоторых типов полей. Например, если в логе есть поле severity, то в верхней панельке появится такой UI компонент:

Severity filter

Очень удобно добавлять фильтры изконтекстного меню. Можно выделить текст, кликнуть правой кнопкой мыши ивыбрать Непоказывать записи стаким текстом. Напанельку сфильтрами автоматически добавится фильтр потексту, скрывающий записи стаким текстом. Помогает когда лог завален однообразными записями, неинтересными вданный момент.

Добавление фильтров из контекстного меню

Можно кликнуть назапись ивыбрать Скрыть последующие записи или Скрыть предыдущие записи, чтобы работать только сопределённой частью лога. Скрытие происходит добавлением фильтра подате.

Для сложных случаев можно задать фильтр с условием написанным на JavaScript. Такой фильтр представляет из себя функцию принимающую одну записи и возвращающую true или false.

Пример фильтра на JavaScript
function isVisibleEvent(text, fields) {    var match = text.match(/Task completed, elapsed time: (\d+)ms$/)    if (!match)        return false // Don't show events not matched the pattern            var time = parseInt(match[1])    return time > 500 // Show only events where elapsed time is more than a threshold}

При изменении фильтров, просмотрщик старается максимально сохранить позицию в логе. Если есть выделенная запись, то изменение фильтров не изменит её положения на экране, а записи вокруг пропадут или появятся. Пользователь может задать фильтр, чтобы были видны только ошибки, найти подозрительную ошибку, затем убрать фильтр и смотреть что происходило вокруг этой ошибки.

Состояние панели фильтров отображается в параметрах URL, чтобы можно было добавить в закладки браузера текущую конфигурацию.

Мелкие, но полезные фичи

Когда находишь что-то интересное хочется поделиться этим скомандой, для этого можно создать специальную ссылку натекущую позицию влоге, илюбой кто еёоткроет увидит точно такуюже страницу, которая была при создании ссылки, включая состояние фильтров, текста вполе поиска, выделенной записи ит.д.

Если сервер расположен в другой таймзоне, над текстом с датой будет всплывающая подсказка с датой в таймзоне пользователя.

Конфигурация

Я старался сделать конфигурацию как можно проще, чтобы всё работало из коробки. Если попросить пользователя задать формат лога, то большинство просто закроют приложение и пойдут смотреть по старинке. Поэтому формат лога распознаётся автоматически. Конечно, это работает не всегда и часто не точно. Для таких случаев можно задать формат лога вручную в файле конфигурации. Можно использовать паттерны log4j, logback или просто регексп. Если ваш лог не распознался, но вам кажется что должен создайте issue на GitHub, этим вы поможете проекту.

Самая нужная настройка список видимых файлов. Поумолчанию доступны все файлы срасширением .log ивидна вся структура каталогов, ноэто неочень хорошо сточки зрения секьюрити. Вконфигурационном файле можно ограничить видимость файлов спомощью списка паттернов типа такого:

logs = [  {    path: "/opt/my-app/logs/*.log"  },  {    path: ${HOME}"/work/**"  }]

Пользователю будут доступны только .log файлы в директории /opt/my-app/logs и любые файлы в директории ~/work и её поддиректориях.

Более подробная информация в документации на GitHub.

Работа с несколькими нодами

Мёрж файлов, расположенных наразных нодах это киллер фича, ради которой изатевался проект. Как яуже говорил, файл никогда нескачивается полностью содной ноды надругую инеиндексируется. Поэтому, накаждой изнод должен быть запущен Log Viewer. Пользователь открывает webUI наодной изнод, указывает расположение логов, иLog Viewer коннектится кдругим инстансам LogViewer чтобы подгружать содержимое лога через них. Записи извсех открытых файлов мёржатся потаймстемпу ипоказываются как буд-то это один файл.

Вкрадце опишу как это работает под капотом. Когда пользователь открывает страницу, надо показать конец лога, для этого накаждую ноду отправляется запрос дай последниеN записей, где N количество строк помещающихся наэкран. Полученные записи сортируются потаймстемпу, берутся последниеN записей ипоказываются пользователю. Когда пользователь скролит страницу вверх, навсе ноды посылается запрос дай последниеN записей стаймстемпом меньшеT, где T таймстемп самой верхней записи наэкране. Полученные записи сортируются идобавляются настраницу. При скроле вниз происходит тоже самое, только вдругую сторону. Поиск позиции вфайле, где находятся записи старше/младше T,работает очень быстро, так как записи отсортированы потаймстемпу иможно использовать бинарный поиск. Там есть много нюансов, нообщая схема такая. Мёрж работает только если система смогла определить фомат лога ивкаждой записи задан полный тайстемп.

Наданный момент, нетUI для выбора файлов наразных нодах, приходится прописывать файлы впараметрах URL втаком виде:
http://localhost:8111/log?path=/opt/my-app/logs/a.log@hostname1&path=/opt/my-app/logs/b.log@hostname1&path=/opt/my-app/logs/c.log@hostname2
здесь каждый параметр "path" задаёт один файл, после "@" указывается хост, накотором лежит файл изапущен инстанс просмотрщика логов. Можно указать несколько хостов через запятую. Если "@" отсутствует файл находится натекущей ноде. Чтобы неиметь дела согромными URL, есть возможность задать короткие ссылки вконфигурации, вразделе log-paths = { }.

Встраивание просмотрщика в своё приложение

Log Viewer можно подключить ксвоему Java Web приложению как библиотеку, чтобы оно могло показывать пользователю свои логи. Иногда это удобней чем запуск отдельным приложением. Достаточно просто добавить зависимость на библиотеку библиотеку черезMaven/Gradle иподключить один конфигурационный класс вspring context. Всё остальное сконфигурится автоматически, log viewer сам распознает какая система логгирования используется ивозьмёт изеёконфигурации расположение иформат логов. ПоумолчаниюUI маппится на/logs, новсё можно кастомизировать. Пока автоматическая конфигурация работает только сLog4j иLogback.

Это тестировалось на маленьком количестве приложений, если у вас возникнут проблемы смело пишите в discussions на GitHub.

Что планируется сделать в будущем

Было бы удобно, если бы была возможность оставлять комментарии к записям. Например, прикрепить номер тикита к сообщению об ошибке. Комментарий должен быть виден всем пользователям и, когда такая же ошибка вылетит в следующий раз, будет понятно что с ней делать.

Есть много идей по мелкому улучшению UI. Например, если в тексте встретился кусок JSON, то хочется чтобы просмотрщик умел показывать его в отформатированном виде, а не одной строкой. Хочется иметь возможность задать фильтр по severity для отдельного класса, а не сразу для всех.

Иногда нет возможности открыть порт на сервере для просмотра логов, есть только SSH доступ. Можно сделать поддержку работы через SSH. Web UI будет подниматься на локальной машине, коннектиться через SSH к серверу и запускать там специального агента. Агент будет принимать команды через input stream и возвращать нужные части лога через output stream.

Буду рад услышать фидбэк.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru