- Как научить Zabbix отправлять уведомления о проблемах прямо на рабочий стол
- Шаг первый: настройка Zabbix
- Формат отправки
- Шаг второй: сервер отправляет данные клиенту
- Шаг третий: получаем событие и отображаем уведомления
- Linux
- Mac OS
- terminal-notifier
- Growl
- Заключение
- Еще не бот, но уже что-то ― получаем уведомления от Zabbix в мессенджеры
- Slack
- Telegram
- ВКонтакте
- Jabber
- Голос
- И не забываем охранять охранников
Как научить Zabbix отправлять уведомления о проблемах прямо на рабочий стол
Картинка: источник
Привет, Хабр! Меня зовут Илья Аблеев, я работаю в отделе мониторинга Badoo.
Можно долго холиварить на тему того, какая система мониторинга круче. Основным инструментом для реакции на проблемы в Badoo является Zabbix, и мы неоднократно делились опытом его кастомизации.
«Из коробки» узнавать о новых проблемах можно либо через веб-интерфейс, либо по почте/SMS. Это хорошо работает и до определённого момента нас устраивали эти способы.
На сегодняшний день в нашей системе несколько инстансов сервера, тысячи хостов, сотни тысяч проверок и примерно столько же триггеров, на которые нужно как можно более оперативно реагировать. После ряда инцидентов, когда только на обнаружение проблемы мы тратили до десяти минут (что совершенно недопустимо), мы осознали, что нам жизненно необходимы другие способы уведомления о проблемах. Тогда, возможно, наша реакция была бы быстрее.
Оптимальным решением, на наш взгляд, был бы вывод важных уведомлений поверх всех окон (браузеров, чатов, консолей). В этой статье речь пойдёт о том, как мы допилили Zabbix, научив отправлять их прямо на рабочий стол.
Кому подойдёт данное решение:
- дежурным администраторам, которые не только круглосуточно смотрят в монитор, но и занимаются решением других задач;
- всем остальным администраторам, которым не нравится просматривать простыню PROBLEM и OK`ов в почте или SMS, но которые хотят своевременно узнавать о критичных проблемах.
Придётся потратить время на установку, но, думаю, если вы используете Zabbix и уже использовали кастомные скрипты, для вас это не составит труда.
Внимание! Получение уведомлений данным способом вызывает привыкание, долговременное его использование создаёт впечатление, что он является неотъемлемой частью Zabbix.
Расскажу по шагам, что и как мы делали. Техническая реализация достаточно проста:
- Zabbix отправляет алерт на какое-то событие.
- Скрипт-отправщик на сервере отправляет данные клиенту на десктоп по UDP.
- Скрипт-получатель принимает уведомление, и инициирует появление всплывающего сообщения посредством дополнительного приложения.
Третий пункт может отличаться в зависимости от того, какую операционную систему вы используете и какое приложение вам больше нравится.
Шаг первый: настройка Zabbix
В официальной документации подробно рассказано, как создать свои алерты.
- Заранее положим zbxpush.py в AlertScriptsPath на Zabbix-сервер.
- Далее в веб-интерфейсе: Administration → Media types → Create.
3. Заранее пропишем IP/FQDN, на который мы будем отправлять алерты.
В веб-интерфейсе: Administration → Users → %username% → Media.
4. Создадим действие на триггеры.
В веб-интерфейсе: Configuration → Actions.
Формат отправки
Первое — числовой формат триггера (4 или 5 — влияет на отображаемую иконку: High или Disaster), второе — заголовок уведомления, третье — тело сообщения.
@@@ — чтобы было удобно разбивать на столбцы, ибо в названиях триггеров может быть написано что угодно (по крайней мере, у нас :)), но точно не эта комбинация.
Шаг второй: сервер отправляет данные клиенту
Логика простая: получаем событие, пересылаем его клиенту.
Здесь вы можете изменить UDP на TCP. Мы выбрали UDP по одной простой причине: Zabbix отправляет все уведомления последовательно, а значит, если ваш компьютер будет недоступен, в случае использования TCP уведомления будут отправляться с большой задержкой.
Не забудьте сделать скрипт исполняемым!
Шаг третий: получаем событие и отображаем уведомления
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.
Заключение
Вот так, с помощью нехитрых приспособлений…
Что мы получили в итоге:
- быстрая доставка уведомлений админам;
- уменьшение времени реакции на события (от момента «узнали» до «починили» или «передали дальше»);
- возможность совершать простые полуавтоматические действия:
Далее всё зависит от вашего творческого потенциала.
Когда-то давно, когда я работал в компании-провайдере, при падении интернет-канала из всех колонок и наушников на рабочем месте доносился звук сирены. Это приводило дежурного (меня) в ступор, не давало адекватно сообщить о проблеме по телефону, но он (я) старался как можно быстрее эту проблему решить.
Лично мне уже известны случаи прикручивания к скрипту звука свиньи из популярного антивируса и говорилки из популярного переводчика. 🙂
Источник
Еще не бот, но уже что-то ― получаем уведомления от Zabbix в мессенджеры
Кажется, что в последнее время электронная почта больше подходит для спама, чем для оперативных оповещений системы мониторинга. В этой статье я соберу методы получения уведомлений на мобильные устройства ― как через мессенджеры, так и через традиционные каналы связи.
Рассматривать решения я буду на примере Zabbix, но их можно адаптировать и под вашу любимую систему, лишь бы она умела запускать скрипты по триггеру.
Slack
Получать уведомления в такой корпоративный мессенджер как Slack действительно удобно, а благодаря открытому API ― еще и просто. С API можно познакомиться в официальной документации, я же покажу пару примеров реализации.
Самым простым решением станет интеграция с мессенджером через механизм Webhook. Для начала нужно получить на сайте сервиса в разделе Incoming WebHooks специальный адрес, на который можно отправлять запросы хоть обычным curl. Также там можно будет выбрать иконку и канал для отображения сообщений по умолчанию.
Получаем URL для отправки запросов.
Теперь нужно добавить в Zabbix скрипт ― по умолчанию это папка /usr/local/share/zabbix/alertscripts, ― разрешить его выполнение и настроить в нем необходимые параметры. Со скриптом и подробными инструкциями по настройке можно ознакомиться на GitHub в репозитории zabbix-slack-alertscript.
Уведомления в Slack.
Более интересным и сложным способом решения задачи будет создание полноценного бота. В отличие от простого варианта с curl, бот может не только кидать уведомления, но и удалять их при решении проблемы.
Ознакомиться с исходным кодом бота и подробной инструкцией по настройке можно в репозитории zabbix-notify на GitHub. Помимо Slack, этот бот поддерживает уведомления в HipChat, создание новых инцидентов и разрешение старых в системе управления инцидентами PagerDuty.
Telegram
Получать уведомления в этот популярный, но заблокированный на территории РФ, мессенджер тоже удобно, благо открытый API это позволяет. Ознакомиться с возможностями автоматизации можно в документации на официальном сайте.
Для самого простого решения нужно получить свой токен для запросов при помощи «Отца Ботов» ― @BotFather. При помощи команд /start и /newbot главный бот выдаст заветный токен.
Получаем токен для нашего бота-уведомлятора.
Теперь можно отправлять сообщения запросами через curl. В качестве усложненной реализации можно привести в пример бота, отправляющего не только уведомления, но и графики. Завести себе бота поможет GitHub-репозиторий Zabbix-in-Telegram.
С подробной инструкцией к простому и чуть более сложному скрипту можно ознакомиться в материале «Отправка уведомлений и графиков из Zabbix в Telegram».
Этот мессенджер, к сожалению, не имеет документированного публичного API и борется со скриптами на GitHub в рамках «борьбы со спамом». Но выход есть. Можно использовать штатное решение «прямая связь», описанное в официальном FAQ. Но тогда понадобится держать инстанс WhatsApp Web. Аналогично сработает обвязка автокликером веб-версии или десктопного приложения.
Чуть более интересным вариантом будет использование консольного «мессенджера» yowsup. Сам мессенджер доступен в одноименном репозитории GitHub. Пока решение работает. Но если WhatsApp вдруг решит поменять свой API, то для адаптации понадобится время.
Отправка сообщений через консоль.
Подробнее с настройкой консольного скрипта и Zabbix можно ознакомиться в статье «Получаем уведомления от Zabbix в WhatsApp».
ВКонтакте
Если ваш дежурный инженер проводит в соцсетях немало времени, то можно отправлять уведомления ему прямо в сообщения (или на стену) ВКонтакте.
Сначала нам понадобится создать свое приложение в соцсети ― для получения токена. Сделать это можно в разделе «Мои приложения». После создания нового приложения нам нужно скопировать его ID в разделе «Настройки» и перейти по ссылке:
Разумеется, вместо appid нужно подставить свой ID. А если нужно просто отправлять сообщения ― без оповещения друзей инженера, если он сам не отвечает, ― то в параметрах достаточно задать messages.
После подтверждения доступа в адресной строке появится подобный адрес:
Где в значении параметра access_token будет необходимый нам токен.
Теперь при помощи обычного curl можно слать сообщения, а с оберткой из простого скрипта это сможет делать и Zabbix.
С пошаговой настройкой уведомлений и вариантом реализации скрипта можно ознакомиться в статье «Прикручиваем к Zabbix оповещения в VKontakte».
Jabber
Если некоторое ретроградство вам не чуждо, то еще остался Jabber. Получать уведомления в старый любимый мессенджер Zabbix позволяет «из коробки». Для этого достаточно настроить аккаунт в свойствах оповещений:
Настройка аккаунта Jabber.
И указать нужные JID в свойствах пользователей. Подробнее можно ознакомиться в официальной документации Zabbix в разделе Jabber. Я же добавлю, что если предварительно аккаунт Jabber зарегистрировать в нужных транспортах, то можно отправлять сообщения в ICQ, IRC и прочий агент Mail.ru.
Если не зацикливаться на модных и не очень мессенджерах, то можно получать уведомления и просто через технологию push. Она поддерживается не только в мобильных устройствах, но и в любой Windows 10, а также в браузерах Chrome и Firefox.
Тут нам придется или развертывать свой сервер и приложения для отправки сообщений, или воспользоваться платными сервисами вроде Pushbullet, Pushsafer или Pushover. Методика схожа с остальными: регистрируемся, получаем токен, ставим приложения или расширения браузера и шлем сообщения хоть многострадальным curl.
Выбор конкретного сервиса зависит от ценника. В общем и целом все они работают примерно одинаково. Некоторые сервисы предоставляют ограниченное количество бесплатных сообщений ― например, у Pushbullet это будет 100 сообщений в месяц.
Push уведомления на Android.
С примером конкретных реализаций можно ознакомиться:
Уведомления в мессенджеры на телефоны ― это, конечно, хорошо. Но только до тех пор пока у сервера Zabbix есть выход в интернет. Для гарантированного получения уведомлений при сбоях в сети лучше использовать традиционные каналы связи.
Zabbix «из коробки» поддерживает возможность отправлять SMS. К сожалению, он умеет это делать только через последовательный интерфейс. Если у вас завалялся Siemens MC35 или что-то подобное, то с настройками отправки СМС можно ознакомиться в документации Zabbix в разделе SMS.
Помимо такого архаичного варианта, можно воспользоваться сервисом для отправки СМС вроде sms.ru. Благо они все поддерживают разного рода API. Некоторые предоставляют и e-mail шлюз, и для настройки уведомлений не понадобится писать скрипты. Самое главное при выборе шлюза ― проверить его на предмет задержек доставки СМС.
Настройка скрипта для уведомлений по СМС.
С примером настройки Zabbix можно ознакомиться в статье «Бесплатная отправка SMS-уведомлений в Zabbix».
Отправка СМС через внешний шлюз не решит проблему отсутствия интернета на сервере в отличие от отправки через аппаратные устройства с симкой. В качестве бюджетного варианта можно использовать USB-модем ― например, Huawei e1550.
Голос
СМС можно пропустить запросто, а вот телефонный звонок ― уже сложнее. Поэтому для особо срочных уведомлений можно настроить Zabbix на телефонные звонки. Выходов, как обычно, несколько.
Простым решением будет использование внешнего сервера SIP. Для этого понадобится библиотека PJSIP, которую можно применить как консольный SIP-клиент. Для генерации голосового сообщения подойдет утилита text2wave из комплекта генерации речи Festival. Собрав все в кучу и добавив скриптовой магии, можно быть разбуженным заботливым сервером мониторинга.
Пример реализации детально описан в статье «Оповещения из Zabbix телефонным звонком».
Альтернативным вариантом станет использование своей АТС на базе Asterisk и обращение к ней с помощью специальных call-файлов или по интерфейсу AMI. Тогда, при наличии независимого от интернета канала связи вроде аналоговой линии или потока Е1, можно будет выслушать проблемы вашего сервера.
И не забываем охранять охранников
В статье я постарался привести ссылки на основные решения для уведомлений инженеров о проблемах. Главное, при проектировании системы мониторинга учесть возможность отсутствия интернета и не забыть про дублирующую систему, ответив себе на извечный вопрос «Quis custodiet ipsos custodes? ». И, конечно же, не нужно превращать сервер мониторинга в спамера, иначе уведомления станут бессмысленны.
Если вы используете какой-то другой способ оповещения ― мы ждем его в комментариях.
Источник