Your browser is not supported anymore. Please update to a more recent one.


Download Chrome

Download Firefox

Download
Internet Explorer

Download Safari

Как научить Zabbix отправлять уведомления о проблемах прямо на рабочий стол

1 августа

Картинка: источник

Привет! Меня зовут Илья Аблеев, я работаю в отделе мониторинга Badoo.

Можно долго холиварить на тему того, какая система мониторинга круче. Основным инструментом для реакции на проблемы Badoo используется Zabbix и мы неоднократно делились опытом его кастомизации.

«Из коробки» узнавать о новых проблемах можно либо через веб-интерфейс, либо по почте/SMS. Это хорошо работает и до определённого момента нас устраивали эти способы.

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

Оптимальным решением, на наш взгляд, был бы вывод важных уведомлений поверх всех окон (браузеров, чатов, консолей). В этой статье речь пойдёт о том, как мы допилили Zabbix, научив отправлять их прямо на рабочий стол.

Кому подойдёт данное решение:

  • дежурным администраторам, которые не только круглосуточно смотрят в монитор, но и занимаются решением других задач;
  • всем остальным администраторам, которым не нравится просматривать простыню PROBLEM и OK`ов в почте или SMS, но которые хотят своевременно узнавать о критичных проблемах.
Придётся потратить время на установку, но, думаю, если вы используете Zabbix и уже использовали кастомные скрипты, для вас это не составит труда.

Внимание! Получение уведомлений данным способом вызывает привыкание, долговременное его использование создаёт впечатление, что он является неотъемлемой частью Zabbix.

Расскажу по шагам, что и как мы делали. Техническая реализация достаточно проста:

  1. Zabbix отправляет алерт на какое-то событие.
  2. Скрипт-отправщик на сервере отправляет данные клиенту на десктоп по UDP.
  3. Скрипт-получатель принимает уведомление, и инициирует появление всплывающего сообщения посредством дополнительного приложения.

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

Шаг первый: настройка Zabbix


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

Код проекта доступен на GitHub: https://github.com/ableev/ZbxDsktp.

  1. Заранее положим zbxpush.py в AlertScriptsPath на Zabbix-сервер.
  2. Далее в веб-интерфейсе: AdministrationMedia typesCreate.




3. Заранее пропишем IP/FQDN, на который мы будем отправлять алерты.

Данный пункт можно модернизировать
Например, у нас сделано так: существует главный сервер мониторинга, при SSH-логине скрипт запоминает IP зашедшего и начинает отправлять на него алерты. Таким образом, чтобы активировать получение данных у себя, не нужно каждый раз менять экшен.

В веб-интерфейсе: AdministrationUsers%username%Media.



4. Создадим действие на триггеры.

В веб-интерфейсе: ConfigurationActions.



Формат отправки


{TRIGGER.NSEVERITY}@@@{HOST.NAME}@@@{TRIGGER.NAME}

Первое — числовой формат триггера (4 или 5 — влияет на отображаемую иконку: High или Disaster), второе — заголовок уведомления, третье — тело сообщения.

@@@ — чтобы было удобно разбивать на столбцы, ибо в названиях триггеров может быть написано что угодно (по крайней мере, у нас :)), но точно не эта комбинация.





Шаг второй: сервер отправляет данные клиенту


Логика простая: получаем событие, пересылаем его клиенту.

zbxpush.py

Здесь вы можете изменить UDP на TCP. Мы выбрали UDP по одной простой причине: Zabbix отправляет все уведомления последовательно, а значит, если ваш компьютер будет недоступен, в случае использования TCP уведомления будут отправляться с большой задержкой.

Но ведь UDP – это ненадёжно
Читатель, до которого доходит шутка про UDP, заметит, что в случае отправки алертов по UDP появляется вероятность потерять их где-нибудь между сервером и десктопом. И будет прав. Но суть не в том, чтобы гарантированно доставить сообщение, а в том, чтобы просто и быстро привлечь внимание к дашборду с проблемами: «Эй, там что-то случилось, пойди и посмотри».

Не забудьте сделать скрипт исполняемым!

Шаг третий: получаем событие и отображаем уведомления


zbxlistenerd.py – скрипт, который будет крутиться в фоне и запускать уведомления

settings.cfg — файл с настройками клиента

icons/5.png, icons/4.png — иконки для разных критичностей триггеров
Дальше наши пути расходятся. «Клиентская» часть предполагает немного творчества, так как каждый создаёт окружение для себя.

Что бывает необходимо:

  • иконки, соответствующие критичностям триггеров;
  • звуковое сопровождение всплывающих уведомлений;
  • выполнение действия по нажатию на уведомление (SSH-логин, открытие ссылки, заведение тикета о проблеме и т. д.).
В нашей компании в качестве десктопной ОС в основном используются Linux и Mac OS, поэтому рассмотрим несколько примеров для них. Если же вы реализуете то же самое для Windows, добро пожаловать в комменты! С радостью дополним пост.

Linux




Приведу пример, который довелось использовать: notify-send в Xfce (на скриншоте выше). Почему notify-send, а не тот же Python с использованием libnotify? Да потому что он есть во всех популярных десктоп-дистрибутивах (Ubuntu, Fedora, SUSE) и работает со всеми (по крайней мере популярными) DE (Gnome, KDE, Xfce).

Совет: если у вас случаются периоды массовой недоступности чего-либо (например, отвалился свитч — и вы завалены горой триггеров о недоступности серверов), сразу настройте хоткей на завершение процесса notify-send.

Mac OS


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

terminal-notifier




После недолгого поиска был выбран бесплатный terminal-notifier.

Плюсы:

  • можно устанавливать разные иконки для разных критичностей;
  • можно формировать ссылки на графики в Zabbix и открывать их по клику на уведомление;
  • можно реализовать открытие SSH-ссылок: увидели нотификацию -> кликнули -> сразу зашли на хост.
Минусы: отсутствуют (особенно после того, как была добавлена поддержка иконок).

Growl



Для включения установите growl_enabled = True в settings.cfg.

Во времена, когда terminal-notifier не умел использовать кастомные иконки, Growl вполне с этим справлялся. Поэтому наше любопытство победило жадность — и мы опробовали это довольно популярное приложение (которое, надо сказать, умеет не только иконки менять — это целый центр уведомлений).

Плюсы:

  • возможно, у вас приложение уже установлено;
  • можно выбрать разные иконки под разные критичности;
  • так же, как и в terminal-notifier, можно настроить действия по нажатию на уведомления.
Минус: платное.

Если же Growl у вас нет, рекомендую всё же воспользоваться terminal-notifier.

Заключение


Вот так, с помощью нехитрых приспособлений…

Что мы получили в итоге:

  • быстрая доставка уведомлений админам;
  • уменьшение времени реакции на события (от момента «узнали» до «починили» или «передали дальше»);
  • возможность совершать простые полуавтоматические действия:
Далее всё зависит от вашего творческого потенциала.

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

Лично мне уже известны случаи прикручивания к скрипту звука свиньи из популярного антивируса и говорилки из популярного переводчика. :)

При наличии свободного времени, желания и современных технологий можно сделать так


Быстрых вам реакций на инциденты!