- PVSM.RU - https://www.pvsm.ru -
Привет! Меня зовут Илья Аблеев, я работаю в отделе мониторинга Badoo.
Можно долго холиварить на тему того, какая система мониторинга круче. Основным инструментом для реакции на проблемы Badoo используется Zabbix и мы неоднократно делились опытом [2] его кастомизации.
«Из коробки» узнавать о новых проблемах можно либо через веб-интерфейс, либо по почте/SMS. Это хорошо работает и до определённого момента нас устраивали эти способы.
На сегодняшний день в нашей системе несколько инстансов сервера, тысячи хостов, сотни тысяч проверок и примерно столько же триггеров, на которые нужно как можно более оперативно реагировать. После ряда инцидентов, когда только на обнаружение проблемы мы тратили до десяти минут (что совершенно недопустимо), мы осознали, что нам жизненно необходимы другие способы уведомления о проблемах. Тогда, возможно, наша реакция была бы быстрее.
Оптимальным решением, на наш взгляд, был бы вывод важных уведомлений поверх всех окон (браузеров, чатов, консолей). В этой статье речь пойдёт о том, как мы допилили Zabbix, научив отправлять их прямо на рабочий стол.
Кому подойдёт данное решение:
Придётся потратить время на установку, но, думаю, если вы используете Zabbix и уже использовали кастомные скрипты, для вас это не составит труда.
Внимание! Получение уведомлений данным способом вызывает привыкание, долговременное его использование создаёт впечатление, что он является неотъемлемой частью Zabbix.
Расскажу по шагам, что и как мы делали. Техническая реализация достаточно проста:
Третий пункт может отличаться в зависимости от того, какую операционную систему вы используете и какое приложение вам больше нравится.
В официальной документации подробно рассказано, как создать свои алерты [3].
Код проекта доступен на GitHub: https://github.com/ableev/ZbxDsktp [4].

3. Заранее пропишем IP/FQDN, на который мы будем отправлять алерты.
В веб-интерфейсе: Administration → Users → %username% → Media.

4. Создадим действие на триггеры.
В веб-интерфейсе: Configuration → Actions.

{TRIGGER.NSEVERITY}@@@{HOST.NAME}@@@{TRIGGER.NAME}
Первое — числовой формат триггера (4 или 5 — влияет на отображаемую иконку: High или Disaster), второе — заголовок уведомления, третье — тело сообщения.
@@@ — чтобы было удобно разбивать на столбцы, ибо в названиях триггеров может быть написано что угодно (по крайней мере, у нас :)), но точно не эта комбинация.


Логика простая: получаем событие, пересылаем его клиенту.
zbxpush.py
Здесь вы можете изменить UDP на TCP. Мы выбрали UDP по одной простой причине: Zabbix отправляет все уведомления последовательно, а значит, если ваш компьютер будет недоступен, в случае использования TCP уведомления будут отправляться с большой задержкой.
Не забудьте сделать скрипт исполняемым!
zbxlistenerd.py – скрипт, который будет крутиться в фоне и запускать уведомления
settings.cfg — файл с настройками клиента
icons/5.png, icons/4.png — иконки для разных критичностей триггеров
Дальше наши пути расходятся. «Клиентская» часть предполагает немного творчества, так как каждый создаёт окружение для себя.
Что бывает необходимо:
В нашей компании в качестве десктопной ОС в основном используются Linux и Mac OS, поэтому рассмотрим несколько примеров для них. Если же вы реализуете то же самое для Windows, добро пожаловать в комменты! С радостью дополним пост.

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

После недолгого поиска был выбран бесплатный terminal-notifier [5].
Плюсы:
Минусы: отсутствуют (особенно после того, как была добавлена поддержка иконок).

Для включения установите growl_enabled = True в settings.cfg.
Во времена, когда terminal-notifier не умел использовать кастомные иконки, Growl вполне с этим справлялся. Поэтому наше любопытство победило жадность — и мы опробовали это довольно популярное приложение (которое, надо сказать, умеет не только иконки менять — это целый центр уведомлений).
Плюсы:
Минус: платное.
Если же Growl у вас нет, рекомендую всё же воспользоваться terminal-notifier.
Вот так, с помощью нехитрых приспособлений…
Что мы получили в итоге:
Далее всё зависит от вашего творческого потенциала.
Когда-то давно, когда я работал в компании-провайдере, при падении интернет-канала из всех колонок и наушников на рабочем месте доносился звук сирены. Это приводило дежурного (меня) в ступор, не давало адекватно сообщить о проблеме по телефону, но он (я) старался как можно быстрее эту проблему решить.
Лично мне уже известны случаи прикручивания к скрипту звука свиньи из популярного антивируса и говорилки из популярного переводчика. :)
Быстрых вам реакций на инциденты!
Автор: ableev
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/287905
Ссылки в тексте:
[1] Картинка: источник: http://dilbert.com/strip/2012-09-04
[2] делились опытом: https://habr.com/company/badoo/blog/415299/
[3] как создать свои алерты: https://www.zabbix.com/documentation/3.0/manual/config/notifications/media/script
[4] https://github.com/ableev/ZbxDsktp: https://github.com/ableev/ZbxDsktp
[5] terminal-notifier: https://github.com/julienXX/terminal-notifier
[6] Источник: https://habr.com/post/418907/?utm_campaign=418907
Нажмите здесь для печати.