Инструменты мониторинга IT-инфраструктуры позволяют полностью отслеживать ее состояние: собирать данные, анализировать и визуализировать их, оповещать о сбоях и т.д. В этой статье рассмотрим платформы Zabbix, Icinga и Prometheus.    Начну со старшего поколения (2001 г.) – Zabbix. Решение с открытым исходным кодом, впрочем как и все остальные, основанное на GPL (стандартная общественная лицензия). Это делает его бесплатным для использования.  На данный момент у программы множество версий. Самая популярная версия — 5.0 LTS с пятилетней долгосрочной поддержкой, которая подходит для производственной среды. А недавно была выпущена версия 6.0 LTS. В плане развития компании сообщается о возможности выпуска и дополнительных версий — вплоть до 7.0 LTS.  icinga представляет из себя модульную систему мониторинга с открытым исходным кодом, изначально созданная как ответвление от Nagios. Позволяет наблюдать за состоянием серверной инфраструктуры, сервисов, роутеров и т.д. Icinga 2 предлагает как прямой мониторинг, так и поддержку SNMP для серверов и других устройств. Ее используют для снятия метрик и алертов по хостам и их сервисам. В отличии от первой версии Icinga, во второй – было переписано ядро. Структура Icinga оптимизирована для развертывания распределенных систем мониторинга, при которой возможно создание нескольких агентов мониторинга, осуществляющих проверки и направляющих результаты на основной узел. Prometheus – это система, выпущенная в 2012 году бывшими сотрудниками Google. Изначально она предназначался для мониторинга контейнерных сред, но со временем ее возможности расширились до приложений, серверов, баз данных и виртуальных машин.  Все компоненты Prometheus доступны по лицензии Apache 2 на GitHub. Это не мешает крупным компаниям использовать эту систему в качестве ключевого элемента инфраструктуры (среди клиентов есть, например, DigitalOcean, Docker, Showmax или SoundCloud).  Чтобы наблюдать и анализировать графики в полной мере, лучше установить полноценный инструмент визуализации. Часто для этого используют интеграцию с Grafana, тем более она включает встроенную поддержку Prometheus. Grafana подключается ко всем возможным источникам данных таким, как Graphite, Prometheus (об этом сочетании поговорим далее), Influx DB, Elastic Search, MySQL, PostgreSQL и т. д. Grafana предоставляет список панельных модулей, позволяющих создавать красивые визуализации с такими параметрами, как карты мира, тепловые карты, гистограммы, круговые и линейные диаграммы. Мы в Serverspace сами используем Grafana для отслеживания состояния нашей инфраструктуры. В офисе у нас висят информационные экраны, на которых транслируется вся информация: выручка, скорость создания серверов, какие операционные системы используются чаще всего, на каких создано больше серверов и т.д. Для сбора данных используем Microsoft SQL.  Например, на скриншоте отображена метрика: скорость создания VM. По этим графикам определяем, что есть проблема с Windows и немного с CentOS (средняя скорость должна быть 40 секунд, а сейчас 52,4), поэтому отправляем задачу на решение нашему саппорту. Zabbix, Icinga и Prometheus выполняют функции мониторинга серверной инфраструктуры и оповещения. Настроить можно для разных устройств и систем. Они отличаются технологиями и инструментами. Разбираем по основным критериям. С точки зрения архитектуры Zabbix состоит из нескольких программных компонентов: сервер, база данных, веб-интерфейс, прокси и агенты. Zabbix сервер является центральным компонентом, которому агенты сообщают статистику и информацию о доступности и целостности. Он отвечает за прием, агрегацию и обработку данных, а также за генерацию событий и обнаружение аномалий. Для любых событий можно использовать различные виды обработки – e-mail, webhook, скрипты и т.д. В базе данных хранится вся информация о конфигурации, а также данные, собранные Zabbix. Агенты Zabbix локально собирают метрики ОС. Они могут работать как в пассивном, так и в активном режимах. В пассивном режиме агенты обрабатывают запрос от сервера вместе со списком параметров, которые он должен контролировать, и возвращает ему собранные данные. В активном режиме агент первым устанавливает связь с сервером и регулярно отправляет ему данные.  Дополнительный элемент – прокси-сервер Zabbix, обеспечивающий связь между агентами и сервером Zabbix.Такое решение целесообразно применять в геораспределенной сети, например, между отделами компании, местами с плохой связью. Прокси Zabbix и агенты Zabbix, как и сервер, написаны на языке C. В случаях, когда нет возможности установить агент, Zabbix предлагает безагентный мониторинг. С его помощью можно проверять доступность сетевых устройств (маршрутизаторы, коммутаторы), а также выполнять удаленные команды. Icinga2 написана на C++ и имеет модульную архитектуру с отдельным ядром, пользовательским интерфейсом и базой данных, в которые можно интегрировать различные дополнения и расширения. Управляет задачами по мониторингу, запускает проверки служб, занимается отправкой уведомлений. Изначально Icinga является ответвлением от Nagios, поэтому отличается от него переработанной архитектурой, переведенной на использование прослоек IDOMOD и IDO2DB, позволяющих организовать хранение данных мониторинга и конфигурационной информации в СУБД MySQL, Oracle или PostgreSQL.  В состав Icinga входит модульный web-интерфейс, написанный на языке PHP, активно использующий AJAX и и предоставляющий статистику в виде графиков. Для обеспечения интеграции с внешними сервисами предусмотрено несколько API: XML, JSON, SOAP.   Архитектура Prometheus состоит из сервера, считывающего, агрегирующего и анализирующего данные и сохраняющего их в базе, push шлюза для приёма метрик, клиентских библиотек, менеджера уведомлений AlertManager, инструментов для экспорта данных из сторонних приложений, клиента командной строки для выполнения запросов к данным. Большинство из этих компонентов написаны на Go, и взаимодействуют по протоколу HTTP.   Prometheus собирает метрики на основе методов push и pull. В первом методе отслеживаемое приложение отвечает за отправку метрик в систему мониторинга с помощью Push шлюза. В методе pull приложение подготавливает метрики, а Prometheus решает, когда их скачивать, исходя из правил. Prometheus имеет эффективную встроенную базу данных временных рядов, поэтому информация о метриках хранится с отметкой времени, когда они были записаны. В Prometheus используется язык PromQL (Prometheus Query Language), используемый для запросов и агрегирования данных мониторинга в режиме реального времени с использованием операторов и функций. Для автоматизации мониторинга используется Alertmanager, которое генерирует и отправляет оповещения при соблюдении определенных условий.  Prometheus не имеет возможности визуализировать собранные данные. Поэтому часто его устанавливают в купе с Grafana. Информационные панели подключаются к источникам данных для визуализации метрик. Специалисты обоих решений сотрудничают друг с другом, развивая интеграцию с Prometheus в Grafana и предоставляя клиентам Grafana доступ к нужным им функциям Prometheus. В этом сочетании Prometheus будет основным уровнем для очистки и хранения данных, тогда как Grafana отвечает за получение данных с сервера Prometheus с помощью источника данных. Zabbix использует внешнюю базу данных для хранения инфы. БД Zabbix нужно создавать во время его установки. Поддерживаются: MySQL, PostgreSQL, Oracle, IBM DB2 и SQLite. Zabbix может из коробки дать базовые функции для хранения некоторых текстовых значений, их анализа и настройки триггеров. Например, объем диска через системные утилиты. Icinga Data Out Database (IDODB) является точкой хранения данных мониторинга для надстроек или веб-интерфейса и предназначен для вывода всех данных системы мониторинга в базу данных. Поддерживает такие БД, как MySQL, Oracle Database, PostgreSQL.   Prometheus хранит данные в виде time-series database. Имея локальную БД, он может получать и обрабатывать больше метрик, чем другие системы.  Prometheus не подходит для текста, журналов или журналов событий. Если вы используете свой Prometheus с Grafana (является наиболее распространенным сочетанием), вы можете найти обходной путь, используя Loki Grafana. Хотя для логов лучше использовать специализированные продукты.  В Zabbix есть item keys, которые используют связь с агентом Zabbix для сбора данных и получения метрик. Различают пассивные и активные проверки агентов. При настройке элемента можно выбрать необходимый тип: Zabbix агент – для пассивных проверок или Zabbix агент (активный) - для активных проверок. Поддерживаемые item keys можно увидеть здесь. Для работы с базой данных используется SQL.   Как и в Zabbix здесь используется язык запросов SQL.   Более гибок. Prometheus предоставляет собственный язык для запросов, который называется PromQL. Он может применять функции и операторы к запросам метрик, фильтровать, группировать по меткам и использовать регулярные выражения для улучшения сопоставления и фильтрации. Результат выражения можно отобразить в виде графика, просмотреть в виде табличных данных в браузере или использовать внешние системы через HTTP API.   У Zabbix есть собственный веб-интерфейс с гибкими настройками. Можно настроить информационные панели на основе виджетов, сделать графики, карты сети, слайд-шоу и детализированные отчеты. По умолчанию интерфейс Zabbix предоставляет несколько предопределенных тем, но можно создавать свои собственные дашборды.    У Icinga довольно простой web-интерфейс, написанный на PHP. Это доступная панель для отслеживания данных, позволяющая расширять функции с помощью дополнительных модулей. Можно настроить интеграцию с помощью Grafana. Однако, если говорить про ux он не совсем удобен, поэтому лучше настроить интеграцию.   У Prometheus есть Expression Browser. Но он не является полноценной панелью визуализации. Его можно использовать для выполнения углубленных запросов к сохраненным метрикам. Работает как консоль, позволяя вам делать запросы к базе данных, изменять запрос и узнавать ответы на свои вопросы.    Если хочется полноценно наблюдать и анализировать графики, лучше использовать полноценный инструмент визуализации, например Grafana.  В Zabbix функцию оповещения встроена, что позволяет управлять событиями различными способами: отправка сообщений, выполнение удаленных команд и т.д. Также можно настраивать сообщения в зависимости от роли получателя, выбирая, какую информацию включать, например дату, время, имя хоста, значение элементов, значения триггеров, профиль хоста и т. д. Zabbix хранит все события в базе данных в виде списка. Параметры фильтрации можно использовать для поиска определенного триггерного события. Если нажать на конкретное, то можно увидеть подробности. На этом экране также отображаются источник события, сведения о подтверждении и связанные события.   В Icinga можно настроить систему оповещений с помощью Icinga Director в панели управления. Для этого необходимо настроить временные периоды. Они используются для определения интервала, в течение которого будет работать рассылка оповещений.  Уведомления могут отправляться по электронной почте и/или в различные мессенджеры (например, Telegram).   В Prometheus необходимо установить Alertmanager. Это связано с тем, что оповещение с помощью Prometheus разделено на две части. Правила оповещения пересылают оповещения менеджеру. Затем он отправляет уведомления по электронной почте или другим платформам.    Alertmanager обрабатывает предупреждения, отправленные клиентскими приложениямиs. Он заботится об их дедупликации, группировке и маршрутизации к правильной интеграции получателя. Уведомления можно отправлять по электронной почте, через системы уведомлений по телефону и через чаты.   В Grafana также есть система оповещений. Уведомления могут отправляться по электронной почте и/или в различные мессенджеры (например, Slack или Telegram). Большим преимуществом Zabbix является его сообщество и возможность получения знаний через множество каналов поддержки, включая систему поддержки, Telegram, Discord, Zabbix Forum, blog, социальные сети. Полезные ссылки: Документация Zabbix; Форум Zabbix; Блог Zabbix; Телеграм каналы: русскоязычные ZabbixPro и @ZabbixJunior, англоязычный @ZabbixTech; Инструкция, как установить и настроить Zabbix на CentOS; Международное сообщество Discord; YouTube канал Dmitry Lambert про Zabbix; Интересная статья про конфигурацию Zabbix+Grafana. В Icinga также есть большое комьюнити, где можно найти информацию по надстройке новых модулей и задать вопросы. Полезные ссылки: Документация Icinga; Форум Icinga; Интеграции Icinga; Настройка e-mail оповещений в Icinga; Как настроить уведомления в Telegram от Icinga2; Установка Icinga 2 на Debian. Несмотря на то что Prometheus более молодой инструмент, чем Zabbix, здесь также сформировалось большое сообщество. Вот несколько полезных ссылок: Документация Prometheus; Статья: Prometheus, мониторинг в Soundcloud; Форум Prometheus; Отчет об экспериментах с Prometheus; Роль Ansible для установки Prometheus; Инструкция, как установить и настроить Prometheus на Ubuntu; Prometheus канал в Slack; Форум для обсуждений; Интересная статья про введение в мониторинг серверов с помощью Prometheus и Grafana; Инструкция, как установить Grafana на Ubuntu; Настройка уведомлений в Telegram. Zabbix – это ПО с открытым исходным кодом с бэкэндом C и интерфейсом PHP. Имеет распределенную архитектуру сервера и клиента, поэтому на каждой стороне клиента необходимо установить агент Zabbix для сбора и отправки данных на сервер. Если необходимо использовать MySQL, MariaDB, PostgreSQL, SQLite, Oracle или IBM DB2 для хранения данных, то этот инструмент хорошо подойдет для мониторинга. Есть встроенная функция оповещения, позволяющая управлять событиями различными способами: отправка сообщений, выполнение удаленных команд и т.д.    Icinga имеет современный веб-интерфейс, дополнительные соединители для баз данных (MySQL, Oracle Database, PostgreSQL), REST API, позволяющее администраторам добавлять дополнения без внесения изменений в ядро Icinga. Для настройки дополнительных функций в Icinga необходимо настраивать отдельные расширения, например как для рисования графиков, показывающих изменения в отслеживаемых системах. Веб-интерфейс Icinga в основном доступен только для чтения. Он показывает состояние серверов, но не может сравнивать серверы и генерировать данные. У Prometheus открытый исходный код, а сам продукт бесплатен. Он считается более современным инструментом, который используют, когда требуется решение для мониторинга базы данных с временными показателями и нужно долговременное хранилище для метрик. Есть версия, которая включает хранение ваших данных в течение одного года, полную настройку панели управления Grafana для визуализации данных и многое другое.  Также Prometheus имеет поддержку от стороннего Node Exporter, который может помочь Prometheus извлечь различные аппаратные и связанные с ядром метрики. Инструмент имеет поддержку языка запросов PromQL. Какие инструменты мониторинга IT-инфраструктуры вы используете? Поделитесь своим опытом.    Выпускающий редактор