Получаем уведомления от Zabbix в WhatsApp

В сети можно найти множество способов получения уведомлений от Zabbix. Мне показалось удобным получать алерты в WhatsApp — это дешевле, чем sms и, в моем случае, удобнее, чем почта — для получения уведомлений у нас используется корпоративный почтовый аккаунт, доступ к которому извне ограничен, к тому же, алерт может затеряться среди остальных писем.

Настройка довольна проста. Нам понадобится:

1) yowsup и его зависимости:
1.1) python 2.6+
1.2) python-dateutil
1.3) argparse for python < 2.7
1.4) libxml2, если yowsup будет использоваться со старой версии API (флаг --v1)
2) Доступ сервера Zabbix к сети интернет
3) Телефон с SIM-картой, на номер которой будет зарегистрирован аккаунт WhatsApp

Шаг 1: Установка зависимостей yowsup

Прежде всего нужно установить зависимости для yowsup.

В Debian-подобных дистрибутивах или использующих формат пакетов DEB это делается так:

# aptitude install python python-dateutil python-argparse


В дистрибутивах на базе RedHat или использующих формат пакетов RPM:

# yum install python python-dateutil python-argparse


В моем случае в репозитории не оказалось пакета python-argparse, пришлось скачать его отдельно и установить вручную. Для RHEL 6 это можно сделать, например, здесь.

Установка:

# rpm -i python-argparse-1.2.1-5.1.noarch.rpm


Шаг 2: Установка yowsup

После установки зависимостей ставим сам yowsup. Официальная страница проекта расположена на GitHub. Непосредственно с сервера Zabbix'а yowsup можно скачать таким образом:

# wget https://github.com/tgalal/yowsup/archive/master.zip


Распаковываем архив и переходим в директорию yowsup-master/src:

# unzip master.zip
# cd yowsup-master/src


Копируем пример конфига в рабочий конфиг:

# cp config.example yowsup-cli.config


В нем всего четыре строчки:

cc=7
phone=
id=
password=


cc — это код страны. Список кодов можно найти на странице СountryСode.org. Код России — 7;

phone — номер телефона, к которому будет привязан аккаунт WhatsApp. Должен начинаться с кода страны;

id — это поле нужно в том случае, если Вы хотите использовать существующий аккаунт WhatsApp и старую версию API (запуск yowsup с флагом --v1). Если аккаунт был создан на устройстве Nokia или Android, то в поле id нужно написать IMEI устройства. Если на устройстве на базе iOS, то нужно писать MAC-адрес интерфейса WLAN. В новых версиях API это поле не используется, можно оставить его пустым;

password — пароль WhatsApp, который будет получен автоматически после регистрации. В принципе, можно вытащить этот пароль из существующего аккаунта, тогда возможно будет использовать один аккаунт на двух устройствах, но я это не пробовал.

Итак, заполняем поля конфига:

cc=7
phone=79123456789
id=
password=


Далее нужно пройти процедуру регистрации, в течение которой на номер телефона, указанный в конфиге, придет sms с кодом подтверждения. Вообще, проблем на этом шаге возникнуть не должно. Убедитесь, что сервер Zabbix'а имеет доступ на сервера WhatsApp по протоколу https. Если Zabbix стоит за фаерволом и политика безопасности не позволяет открыть ему полный доступ в интернет, получить список адресов можно, запустив tcpdump на сетевом интерфейсе сервера и посмотреть куда обращается yowsup, запустив процедуру регистрации. Не буду останавливаться на этом подробно, мануалов по tcpdump в сети много, скажу лишь, что мне пригодилась такая команда (весь tcp трафик на интерфейсе eth0, который не ходит в пределах локальной сети 10.0.0.0/8):

# tcpdump -i eth0 -n tcp and  not src net 10.0.0.0/8 and dst net 10.0.0.0/8


Отправляем запрос на регистрацию:

# ./yowsup-cli -c yowsup-cli.config -r sms


Если все прошло нормально, нам придет sms с шестизначным кодом подтверждения (например, 123-456). Отправляем этот код на сервер WhatsApp:

# ./yowsup-cli -c yowsup-cli.config -R 123456


После этого в поле password нашего конфига должен появиться пароль. На этом процедура регистрации завершена, можно попробовать отправить сообщение другому пользователю WhatsApp.

Отправить сообщение можно командой

# ./yowsup-cli --send 79123456780 "Test message" --wait --config yowsup-cli.config


Принять сообщение:

# ./yowsup-cli --listen --autoack --keepalive --config yowsup-cli.config


А можно вообще в режиме чата переписываться:

# ./yowsup-cli --interactive 79123456780 --wait --autoack --keepalive --config yowsup-cli.config


image

На этом настройка yowsup закончена.

Шаг 3: Пишем скрипт отправки алертов

Чтобы подружить yowsup и Zabbix, надо написать скрипт отправки уведомлений. Напомню, что Zabbix берет скрипты уведомлений из директории, определенной в переменной AlertScriptsPath конфига zabbix_server.conf. В моем эта директория располагалась в /usr/local/share/zabbix/alertscripts:

# cat /usr/local/etc/zabbix_server.conf | grep AlertScriptsPath
### Option: AlertScriptsPath
# AlertScriptsPath=/usr/local/share/zabbix/alertscripts


Кладем туда скрипт (я назвал его whatsapp), состоящий буквально из трех строчек:

#!/bin/bash
DIR='/usr/local/share/zabbix/alertscripts/yowsup-master/src/' # путь к файлам yowsup 
$DIR/yowsup-cli --send $1 "$2 $3" --wait --config $DIR/yowsup-cli.config


Я положил файлы yowsup в директорию alertscripts — может быть, это не самое лучшее решение, но мне показалось, что так удобнее будет искать конфиги/скрипты в случае чего.

$1 $2 $3 — это значение переменных Zabbix, означающие, соответственно, «кому отсылать уведомление», «тема» и «тело уведомления». Мы настроим эти поля далее из интерфейса Zabbix.

Делаем скрипт исполняемым:

# chmod +x /usr/local/share/zabbix/alertscripts/whatsup 


Шаг 4: Настраиваем Zabbix

Действуем по стандартному алгоритму:

1) Создаем способ оповещения
2) Создаем действие, связанное с этим оповещением
3) Подключаем уведомление пользователям

1) Создаем способ оповещения

В меню Администрирование -> Оповещения (Administration -> Media types) нажимаем кнопку Создать способ оповещения (Create media type).



Имя (Name): Любое по Вашему желанию
Тип (Type): — Скрипт (Script)
Имя скрипта (Script Name): — Должно совпадать с именем скрипта, созданного на предыдущем шаге (whatsapp в нашем случае)

2) Создаем действие

По умолчанию в Zabbix настроено действие, которое делает рассылку всем администраторам всеми видами оповещений:



Если такого действия у Вас нет, то нужно создать свое. Меню Настройка -> Действия (Configuration -> Action), создаем новое действие кнопкой Создать действие (Create Action).



На вкладке Действие (Action) можно определить формат сообщения, которое будет отсылаться в WhatsApp. Я оставил всё по умолчанию



На вкладке Условия (Conditions) настраиваются условия, при которых будет выполняться действие. Тоже оставил по умолчанию.



Ну и на вкладке Операции (Operations) мы указываем что должен делать Zabbix: отправить сообщение (Send message) группе пользователей или отдельному пользователю способом оповещения WhatsApp.

Сохраняем настройки и переходим к следующему шагу.

3) Подключаем уведомление пользователям

Заходим в настройки пользователя (Администрирование -> Пользователи или Administration -> Users), выбираем нужного пользователя и настраиваем ему Способ оповещений (Media):



Тип оповещения (Type): WhatsApp
Отправлять на (Send to): Номер телефона с кодом страны (например, 79123456789)
Выбираем время, когда можно присылать сообщения и степень их критичности. Сохраняем настройки.

На этом настройка закончена, но еще нужно проверить, что сообщения уходят и успешно доставляются. Можно проследить за отправкой уведомлений в меню Администрирование -> Аудит (Administration -> Audit), выбрав пункт Действия (Actions):



Видим, что уведомление было успешно отправлено:



Проверяем WhatsApp на смартфоне:



Работает!

UPDATE: В комментариях спрашивают почему именно WhatsApp, а не что то другое, например sms. Дело в том что сейчас наш Zabbix генерирует довольно много алертов, в том числе ложных. Пробовал прикрутить к нему 3G модем и с него рассылать смски, но получалось довольно накладно в плане расходов на их оплату. А так как практически у всех коллег есть WhatsApp, я подумал, что было бы неплохо отсылать уведомления именно туда, к тому же это бесплатно (первый год) и не требует установки каких то приложений (в нашем случае). Понятно, что это не самый надежный способ — могут поменять API, телефон может оказаться без интернета, упадет канал между Zabbix и интернет и т.п., но для рассылки некритичных алертов, имхо, его вполне можно использовать, дабы поменьше тратиться на смс. Если вдруг лавочку прикроют, будем использовать что то другое, например Pushover или Boxcar, предложенные kemko
Поделиться публикацией

Комментарии 16

    0
    А какой статус у этого yowsup? АПИ добытый реверсинжинирингом, который WhatsApp в любой момент может прикрыть?
      0
      Да, разумеется. Все библиотеки, реализующие протокол WhatsApp неофициальны, используются на свой страх и риск. Пока что не было случаев, чтобы WhatsApp закрывал доступ аккаунтам или менял протокол, но теоретически это возможно. Тем не менее, максимум, что грозит топикстартеру — аккаунт «Дежурного» заблокируют. Он ведь на отдельном номере.
      А пока они только требовали удаления исходников библиотек с гитхаба.
        +1
        Не уверен, систему уведомлений о важных для бизнеса сбоях стоит строить с использованием ИМ-систем, владельцы которых хоть каким-то дают понимать, что настроены против подключения сторонних клиентов к их сетям. Сегодня удаляют исходники с гитхаба, завтра запилят несовместимые изменения в протоколе или еще что-то. За примером далеко ходить не надо, так поступали время от времени в том же ICQ.
          +1
          *Не уверен, что.
          Слишком поздно заметил и не успел отредактировать.

          Если подумать — то и для не важных уведомлений тоже: как бы это не было удобно сейчас — потом всё может перестать работать и в любом случае придется искать замену. Так почему бы не пропустить этот шаг?
      0
      У нас покрытие GSM гораздо лучше покрытия GPRS/EDGE/3G/etc, поэтому получать уведомления по SMS — самое надежное дело.
      Всё остальное чревато недоставкой.
        +2
        Все зависит от уровня уведомлений и степени критичности сервиса. Для уровня info хватит и whatsapp, для warn и err можно еще смс послать, а события уровня fatal могут вообще сами звонить и орать в трубку, что «Усё пропало, шеф!».
        +3
        Годный вариант для виртуалки стоящей в небольшой конторе.
          +1
          Для виртуалки в небольшой конторе разымны вариант это шлюз sms.ru

          Как выше правильно заметили, whatsapp скорее подойжет для информирования уровня «info»
          +1
          Если лень возиться, я писал о похожем сервисе Чат-бот приложения через skype, jabber и whatsapp моей разработки. Может быть кто-то сочтет за рекламу, но в этом сервисе (гуглится) есть API GET для отправки уведомлений, с поддержкой того же whatsapp, добытый реверсинжинирингом, skype и XMPP протокола. Там все for free.

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

          Как сказал Santiago26, действительно сначала yowsup и whatsapp api и их форки закрыли через DCMA request, но потом родительские заново открыли, только их разработчики, сославшись на EULA whatsapp прекратили дальнейшую поддержку этих проектов в следствии чрезмерного использования спаммерами.
            +1
            Есть ли есть желание можно дописать и skype и XMPP (gtalk или к примеру свой jabber сервер) к вашему мониторингу, я могу вам рассказать как делал я и какие подводные камни были и т.д. Пишите в личку если интересно.
              0
              А почему, если уж откинуть идею SMS как очевидную, не Pushover или Boxcar? Они вообще для этого и создавались, REST API и всё такое.
                0
                Не знал про эти продукты, спасибо за информацию! Я добавил в конец поста объяснение выбора WhatsApp
                  0
                  По поводу апдейта. А сколько генерируется в среднем алертов за сутки?
                    0
                    За сегодняшнюю ночь (примерно 10 часов) на почту пришло 28 алертов — 14 со статусом Problem и 14 со статусом OK. При этом, из «проблемных» 14 было 8 ложных. Получается, что один человек получил бы 16 ложных сообщений за ночь. Почему то больше всего врут железки, которые опрашиваются самим Заббиксом. С агентами и скриптами на серверах таких проблем нет
                0
                UPDATE: В комментариях спрашивают почему именно WhatsApp, а не что то другое, например sms. Дело в том что сейчас наш Zabbix генерирует довольно много алертов, в том числе ложных.

                Имхо бороться надо с причиной, а не следствием. Приход лишних сообщений усыпляет бдительность, появляется возможность просохатить что-то действительно важное.
                  0
                  Абсолютно согласен! Работаем над этим

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое