вторник, 20 февраля 2018 г.

Инструменты мониторинга Linux-серверов

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

Инструменты мониторинга в Linux можно условно разделить на три вида:
1. Системные (*top, vmstat, dstat, iostat, nmon, lsof, netstat)
2. Сетевые (Nagios, Zabbix, Icinga, Munin, Cacti, Monit, RRDtool, OpenMS, MRTG, Netdata, Shinken, Ganglia)
3. Облачные системы (New Relic, AWS CloudWatch, AppDynamics, Scout, Optier, Pingdom, Pagerduty, Datadog, HostTracker)


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

1. top, atop, htop, iotop, iftop, apachetop, mytop
Подобные консольные утилиты используются как правило для мониторинга текущего состояния системы и они не поддаются автоматизации и логированию (за исключением atop, который может писать в лог текущее состояние процессов и системных ресурсов).

atop, top, htop отображают список процессов, значение Load Average, потребление ресурсов каждым из процессов, возможна сортировка списка процессов по тому или иному параметру. atop в свою очередь может сохранять свои проверки в лог-файл для дальнейшего анализа системным администратором. htop в свою очередь обладает более приятным интерфейсом, в отличие от top, также htop поддерживает управление мышью в консоли.

Утилита iotop позволяет отображать для каждого процесса текущую дисковую нагрузку, iftop отображает использование сетевого трафика.

apachetop и mytop используются для отображения запросов к Apache и MySQL в реальном времени.

2. vmstat, dstat, iostat
Эти утилиты схожи по функционалу с top-подобными, однако они не отображают список процессов, поэтому часто используются для поверхностной оценки занятости системных ресурсов, чаще всего для анализа нагрузки на дисковую подсистему сервера.

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

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

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

1. Nagios, Icinga 2
Nagios и его форк Icinga позволяют мониторить состояния служб посредством протоколов SMTP, SNMP, POP3, HTTP, ICMP, NNTP, также возможен мониторинг состояния хостов, системных ресурсов. Плагины для Nagios и Icinga могут представлять собой обычный bash-скрипт, который осуществляет какую-либо проверку и в зависимости от результата возвращает одно из возможных значений:
  • 0 (OK)
  • 1 (WARNING)
  • 2 (CRITICAL)
  • 3 (UNKNOWN)

В стандартной поставке Nagios и Icinga предустановлено большое количество плагинов, большинство из которых подойдет любому Linux-серверу.
Nagios имеет веб-интерфейс, а в Icinga 2 он был значительно переработан в лучшую сторону. Nagios написан на языках C и Perl, в качестве СУБД может использоваться MySQL, Oracle RDBMS, PostgreSQL. Оба продукта являются бесплатными, исходный код распространяется под лицензией GPL.

Для мониторинга удаленных хостов требуется установка агента на удаленный сервер.
Уведомления о сообщениях можно наблюдать в веб-интерфейсе, либо же получать их на электронную почту или в любой другой удобный мессенджер.
Icinga умеет также генерировать отчеты на основании собранных данных, данные можно представить в виде графиков с помощью сторонних плагинов.
Поддерживается мониторинг хостов на Windows, а также сетевого оборудования с использованием протоколов SNMP.

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

2.  Zabbix
Система мониторинга написана на языках C и PHP, в качестве СУБД может использовать SQLite, MySQL, PostgreSQL, Oracle RDBMS, распространяется под свободной лицензией GPL.
Zabbix является одной из самых популярных систем мониторинга за счет относительной простоты настройки, и гибкой конфигурации хостов через веб-интерфейс. Так же как и Nagios поддерживает мониторинг Windows-хостов, сетевого оборудования посредством SNMP.

В отличие от Nagios или Icinga, через веб-интерфейс Zabbix довольно просто добавлять новые хосты для мониторинга, а конфигурация хостов осуществляется установкой агента и добавлением адреса сервера мониторинга в конфигурационный файл агента.
Однако, значительным минусом при работе Zabbix является то, что используется одна база данных, которая плохо масштабируется, если не позаботиться об этом заранее.
В стандартной поставке Zabbix умеет генерировать графики на основе собранных данных.

3. RRDtool, Munin, Cacti, MRTG, Ganglia
Набор утилит под названием RRDtool используется для хранения данных в кольцевой базе данных. На основе этих утилит были созданы множество систем мониторинга, среди которых Munin, Cacti, MRTG, Ganglia и ряд других.
Хранение данных в кольцевой базе идеально вписывается концепцию работы систем мониторинга и для построения графиков.

Наиболее актуально использование данных систем мониторингов в построении сетевых и температурных графиков, графиков где необходимо ежесекундно наблюдать за поведением трафика в сети (например утилизация CPU, RAM).
Отличаются эти системы тем, что как правило написаны на разных языках программирования, например MRTG написан на Perl, Cacti на PHP.
Обычно подобные инструменты используются в дополнение к другим системам мониторинга, например Nagios, где нет стандартной функции построения графиков.
Простота написания плагинов делает эти инструменты очень гибкими при всей своей простоте.

4. Monit
Monit в отличие от других систем мониторинга не требует установки и настройки выделенного сервера. Сам Monit устанавливается непосредственно на сервер, который нужно мониторить. Для мониторинга одного или нескольких серверов это является наилучшим решением. Безусловно существует централизованный мониторинг с одного сервера, однако для бесплатного использования доступна только ограниченная версия.
В то время когда создавался Monit, еще не было Systemd, поэтому некоторый функционал Monit может показаться избыточным, т.к. некоторые функции доступны в Systemd (например автоподнятие сервисов, в случае их падения).
Поддерживаются наиболее популярные unix-системы, в том числе Linux и Mac OS X.
Monit позволяет следить за ресурсами сервера, мониторить состояние сервисов и выполнять скрипты при срабатывании какого-либо события, уведомлять по электронной почте, проверять состояние сетевых сервисов.

5. Netdata
Система мониторинга Netdata используется для мониторинга сервера в режиме реального времени. Netdata обладает симпатичным интерфейсом и широким набором метрик. Время хранения метрик можно варьировать в зависимости от наличия свободной оперативной памяти на сервере.
Так же как и Monit, Netdata необходимо устанавливать на каждый сервер, который нужно мониторить. В метриках могут храниться данные по ресурсам сервера, трафику, http-запросам и многому другому. Возможна настройка триггеров, при срабатывании которых отправляется оповещение на электронную почту.

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

Облачные системы мониторинга:
1. New Relic
Самой популярной и хорошо зарекомендовавшей системой облачного мониторинга является New Relic.
Изначально система была ориентирована на мониторинг веб-приложений (поддерживаются приложения написанные на Java, Ruby, PHP, Python, Golang, Node.JS, .NET), однако текущий функционал позволяет мониторить мобильные приложения и серверную инфраструктуру.
Время хранения данных — 24 часа, для доступа к данным старше 24 часов необходимо использовать платный тариф.

New Relic позволяет измерять производительность системы, как на сервере, так и на клиенте, детализировать работу приложения, вести учет ошибок, просматривать информацию о запросах в базу данных, анализировать количество посещений и прочее.
В отличие от систем мониторинга типа Zabbix или Nagios, New Relic в первую очередь ориентирован на разработчиков, а не на системных администраторов. Однако существует множество плагинов, позволяющих значительно расширить мониторинг, а если нужных не нашлось, то можно написать свои.

2. Datadog
Datadog является отличным инструментом для быстрого сбора информационных панелей и получения информации о ключевых показателях производительности приложения.
Предлагает более лояльную ценовую политику чем New Relic, при этом практически не уступая ему в функционале.
Для работы Datadog необходима установка агента, который отправляет все метрики на сервер Datadog и собирает информацию о ресурсах. Поддерживаются уведомления и интеграция с множеством сервисов, например с AWS и GitHub.

3. AWS CloudWatch
Если облачная инфраструктура построена на основе Amazon Web Services, то наиболее разумным будет использование сервиса мониторинга CloudWatch.
Сервис используется для сбора и отслеживания метрик, накопления и анализа файлов журналов, создания предупреждений, а также автоматического реагирования на изменения ресурсов.
CloudWatch может использоваться для мониторинга: инстансов EC2, таблиц DynamoDB, инстансов RDS DB, а также для мониторинга пользовательских метрик приложений и сервисов и логов приложений.
Можно использовать CloudWatch для получения сводной информации о системе, включающей в себя информацию об используемых ресурсах, производительности приложений и общем состоянии системы.
Базовый мониторинг ресурсов инстансов EC2 бесплатен, за подробный мониторинг необходима подписка на платный тариф. При этом не нужно устанавливать дополнительное программное обеспечение на инстансы.
Поддерживает мониторинг пользовательских метрик, логов, а также оповещений. На основе метрик возможно отображение графиков и генерирование статистики.
Наиболее интересным преимуществом CloudWatch является автоматическое масштабирование ресурсов, в случае их нехватки.

4. Pingdom, HostTracker
Сервисы Pingdom и HostTracker обладают схожим функционалом и ориентированы в основном на мониторинг доступности сайтов и скорости отдачи контента.
Pingdom позволяет осуществлять uptime сайта на основе протоколов ICMP и HTTP/HTTPS, оценивать скорость сайта, на основе времени ответа сервера. Для подобных операций установк дополнительного программного обеспечения не требуется.
Для осуществления дополнительного мониторинга, а именно записи метрик необходимо устанавливать агент. Поддерживается интеграция с инструментами оркестровки сервисов Ansible, Chef и другими, возможно использование дополнительных плагинов, среди которых плагины для Apache, Nginx, MySQL и множество других.

Уведомления могут быть отправлены на электронную почту, мобильный телефон SMS сообщением, в PagerDuty, Hipchat, Slack, также имеются приложения для Android и iOS.
HostTracker позволяет позволяет осуществлять проверку доступности сайтов более чем со 140 локаций по протоколам HTTP, ICMP, SMTP, SNMP, TCP. Осуществляется проверка домена и IP-адресов в черных списках DNSBL, поддерживаются уведомления через SMS, электронную почту, Skype, Hangouts, Viber, Telegram, HTTP Post или голосовую связь. Также возможен мониторинг базы данных и проверка истечения срока действия SSL-сертификатов и доменов.

Комментариев нет: