Наша команда очень рада поделиться новостью о том, что состоялся релиз свободной системы мониторинга с открытым исходным кодом Zabbix 4.2!



Является ли версия 4.2 ответом на главный вопрос жизни, вселенной и мониторинга в целом? Давайте посмотрим!

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

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

Zabbix 4.2 — это новая не LTS-версия с укороченным сроком официальной поддержки. Пользователям, которые ориентируются на длинный цикл эксплуатации программных продуктов, рекомендуем использовать LTS версии, такие как 3.0 и 4.0.

Итак, давайте поговорим о новинках и основных улучшениях версии 4.2:

Больше официальных платформ



В дополнение к уже существующим официальным пакетам, мы также предлагаем новые сборки для:

  • RaspberryPi, Mac OS/X, SUSE Enterprise Linux Server 12
  • MSI для Windows агента
  • Docker образы

Встроенная поддержка Prometheus для мониторинга приложений


Zabbix умеет собирать данные различными способами (push/pull) с разных источников данных. Это JMX, SNMP, WMI, HTTP/HTTPS, RestAPI, XML Soap, SSH, Telnet, агенты и скрипты и другие источники. А теперь встречайте поддержку Prometheus!

Строго говоря, сбор данных из экспортёров Prometheus был возможен и раньше благодаря типу элементов данных HTTP/HTTPS и регулярным выражениям.

Однако, новая версия позволяет работать с Prometheus максимально эффективно за счёт встроенной поддержки языка запросов PromQL. А использование зависимых метрик позволяет собирать и обрабатывать данные наиболее эффективно: один раз обратились за данными, а дальше раскладываем их по нужным метрикам.


Получаем значение конкретной метрики

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


Находим метрики используя фильтр на языке запросов PromQL

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

Эффективный высокочастотный мониторинг


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

Мы реализовали механизм тротлинга (throttling) в правилах препроцессинга. Тротлинг, по сути, даёт нам возможность пропуска одинаковых значений.

Предположим, что мы следим за состоянием критичного приложения. Каждую секунду мы проверяем, функционирует ли наше приложение или нет. При этом в Zabbix поступает непрерывный поток данных из 1 (работает) и 0 (не работает). Например: 1111111111110001111111111111…

Когда с нашим приложением всё в порядке, то в Zabbix поступает поток из одних лишь единичек. Нужно ли их обрабатывать? В общем-то нет, ведь нас только интересует изменение состояния приложения, мы не хотим собирать и хранить так много данных. Так вот, тротлинг позволяет пропускать значение, если оно идентично предыдущему. В итоге мы получим лишь данные об изменении состояния, например, 01010101… Вполне достаточно информации для обнаружения проблем!

Пропущенные значения Zabbix просто напросто игнорирует, они не записываются в историю и никак не влияют на триггеры. С точки зрения Zabbix пропущенных значений не существует.


Игнорируем повторяющиеся значения

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

А как же графики? Они ведь будут пустыми из-за нехватки данных! И как понять, собирает ли Zabbix данные, если большинство этих данных будет пропущено?

Мы и об этом подумали! Zabbix предлагает ещё один вид тротлинга, тротлинг с контрольными точками проверки (throttling with heartbeat).


Раз в минуту проверяем, жива ли метрика

В этом случае, Zabbix, несмотря на повторяющийся поток данных, будет сохранять как минимум одно значение в указанный интервал времени. Если данные собираются раз в секунду, а интервал задан одной минутой, то Zabbix превратит ежесекундный поток единичек в ежеминутный поток. Несложно заметить, что это проводит к 60-ти кратному сжатию полученных данных.

Теперь мы уверены, что данные собираются, функция триггера nodata() работает и с графиками всё в порядке!

Валидация собранных данных и обработка ошибок


Никто из нас не хочет собирать ошибочные или недостоверные данные. Например, мы знаем, что датчик температуры должен возвращать данные в диапазоне от 0°C до 100°C и любое другое значение должно рассматриваться как ошибочное и/или игнорироваться.

Сейчас это возможно с помощью встроенных в препроцессинг правил валидации данных по соответствию или отсутствию соответствия регулярным выражениям, диапазону значений, JSONPath и XMLPath.

Теперь мы можем управлять реакцией на ошибку. Если температура вне диапазона, то мы можем просто проигнорировать такое значение, задать значение по умолчанию (например, 0°C ), либо определить своё собственное сообщение об ошибке, например, «Датчик повреждён» или «Замените батарейку.»


Температура должна быть от 0 до 100, остальное игнорируем

Хорошим примером использования валидации является возможность проверки входных данных на присутствие сообщения об ошибке и установки этой ошибки для всей метрики. Это очень полезная функциональность при получении данных из внешних API.

Любая трансформация данных с помощью JavaScript


Если нам недостаточно встроенных правил препроцессинга, то теперь мы предлагаем полную свободу с использованием произвольных скриптов на языке JavaScript!


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

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

Теперь возможны трансформация данных, агрегация, фильтры, арифметические и логические операции и многое многое другое!


Извлекаем полезную информацию из вывода Apache mod_status!

Тестируем препроцессинг


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




Обрабатываем миллионы метрик в секунду!


До Zabbix 4.2 препроцессингом занимался исключительно Zabbix сервер, что ограничивало возможности применения прокси для распределения нагрузки.

Начиная с версии Zabbix 4.2 мы получаем невероятно эффективное масштабирование нагрузки за счёт поддержки препроцессинга на стороне прокси. Теперь этим занимаются прокси!



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

Более простое низкоуровневое обнаружение


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

Низкоуровневое обнаружение требовало на входе специально оформленный JSON. Всё, так больше не будет!

Zabbix 4.2 позволяет низкоуровневому обнаружению (LLD) использовать произвольно оформленные данные в формате JSON. Почему это важно? Это позволяет, не прибегая к скриптам, общаться, например, с внешними API и использовать полученную информацию для автоматического создания узлов сети, элементов данных и триггеров.

Вкупе с поддержкой JavaScript это создает фантастические возможности для создания шаблонов работы с различными источниками данных, такими как, например, облачные API, API приложений, данные в форматах XML, CSV и прочее и прочее.


Связываем JSON с информацией о процессах с LLD

Возможности действительно безграничны!

Поддержка TimescaleDB





Что такое TimescaleDB? Это обычный PostgreSQL плюс модуль расширения от команды TimescaleDB. TimescaleDB обещает лучшую производительность за счёт более эффективных алгоритмов и структуры данных.

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

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

Лёгкое управление тегами


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

Все обнаруженные проблемы получают теги не только триггера, но и узла сети, а также шаблонов этого узла сети.


Определяем теги для узла сети

Более гибкая авторегистрация


Zabbix 4.2 позволяет фильтровать узлы сети по имени, используя регулярные выражения. Это даёт возможность создавать различные сценарии обнаружения для различных групп узлов сети. Особенно удобно, если у нас используются сложные правила именования устройств.

Более гибкое сетевое обнаружение


Ещё одно улучшение связано с именованием узлов сети. Появилась возможность управления именами устройств при сетевом обнаружении и получения имени устройства из значения метрики.

Это очень нужная функциональность, особенно при сетевом обнаружении с помощью SNMP и Zabbix агента.


Автоматически назначаем локальное имя узла сети видимым именем

Проверка работоспособности способов оповещения


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



Удалённый мониторинг компонентов инфраструктуры Zabbix


Появилась возможность удалённого мониторинга внутренних метрик Zabbix сервера и прокси (метрик производительности и работоспособности компонентов Zabbix).

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

Поддержка формата HTML для email сообщений


Теперь мы не ограничены простым текстом и можем формировать красивые e-mail сообщения, благодаря наличию поддержки формата HTML. Пора изучать HTML + CSS!


Сообщения легче воспринимать даже при минимальном использовании HTML

Доступ к внешним системам из сетевых карт


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


Одним кликом открываем тикет в Jira

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


Зачем это нужно — спросите вы. Это позволяет использовать данные основной метрики как для обнаружения, так и для непосредственного сбора данных. Например, в случае сбора данных с экспортера Prometheus, Zabbix осуществит один HTTP запрос и незамедлительно использует полученную информацию для всех зависимых элементов данных: значений метрик и правил низкоуровневого обнаружения.

Новый способ визуализации проблем на картах


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


Проблемные устройства стали более заметными

Извлекаем данные из заголовков HTTP в Веб-мониторинге


В Веб-мониторинге добавилась возможность выбирать данные из полученного заголовка HTTP.

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


Извлекаем AuthID из заголовка HTTP

Zabbix Sender использует все IP адреса


Zabbix Sender теперь отправляет данные по всем IP адресам из параметра ServerActive конфигурационного файла агента.



Удобный новый фильтр в конфигурации триггеров


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


Выбираем триггеры, относящиеся к сервису K8S

Показываем точное время


Тут всё просто, теперь Zabbix показывает точное время при наведении мышкой на график.



Другие нововведения


  • Реализован более предсказуемый алгоритм для изменения порядка расположения виджетов в dashboard (панели)
  • Возможность массового изменения параметров прототипов элементов данных
  • Поддержка IPv6 для проверок DNS: «net.dns» и «new.dns.record»
  • Добавился параметр «skip» для проверок «vmware.eventlog»
  • Ошибка выполнения шага препроцессинга включает в себя номер шага

Как обновиться?


Для перехода с более ранних версий необходима лишь установка новых бинарных файлов (сервера и прокси) и нового интерфейса. Zabbix автоматически проведёт процедуру обновления базы данных. Установка новых агентов не потребуется.

Мы проводим бесплатные вебинары для тех для тех, кто хочет более подробно узнать о Zabbix 4.2 и иметь возможность задать вопросы комaнде Zabbix. Записывайтесь!

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

Полезные ссылки


Release notes
Upgrade notes
Оригинальная статья