В сети можно найти множество способов получения уведомлений от 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
Прежде всего нужно установить зависимости для yowsup.
В Debian-подобных дистрибутивах или использующих формат пакетов DEB это делается так:
В дистрибутивах на базе RedHat или использующих формат пакетов RPM:
В моем случае в репозитории не оказалось пакета python-argparse, пришлось скачать его отдельно и установить вручную. Для RHEL 6 это можно сделать, например, здесь.
Установка:
После установки зависимостей ставим сам yowsup. Официальная страница проекта расположена на GitHub. Непосредственно с сервера Zabbix'а yowsup можно скачать таким образом:
Распаковываем архив и переходим в директорию yowsup-master/src:
Копируем пример конфига в рабочий конфиг:
В нем всего четыре строчки:
cc — это код страны. Список кодов можно найти на странице СountryСode.org. Код России — 7;
phone — номер телефона, к которому будет привязан аккаунт WhatsApp. Должен начинаться с кода страны;
id — это поле нужно в том случае, если Вы хотите использовать существующий аккаунт WhatsApp и старую версию API (запуск yowsup с флагом --v1). Если аккаунт был создан на устройстве Nokia или Android, то в поле id нужно написать IMEI устройства. Если на устройстве на базе iOS, то нужно писать MAC-адрес интерфейса WLAN. В новых версиях API это поле не используется, можно оставить его пустым;
password — пароль WhatsApp, который будет получен автоматически после регистрации. В принципе, можно вытащить этот пароль из существующего аккаунта, тогда возможно будет использовать один аккаунт на двух устройствах, но я это не пробовал.
Итак, заполняем поля конфига:
Далее нужно пройти процедуру регистрации, в течение которой на номер телефона, указанный в конфиге, придет sms с кодом подтверждения. Вообще, проблем на этом шаге возникнуть не должно. Убедитесь, что сервер Zabbix'а имеет доступ на сервера WhatsApp по протоколу https. Если Zabbix стоит за фаерволом и политика безопасности не позволяет открыть ему полный доступ в интернет, получить список адресов можно, запустив tcpdump на сетевом интерфейсе сервера и посмотреть куда обращается yowsup, запустив процедуру регистрации. Не буду останавливаться на этом подробно, мануалов по tcpdump в сети много, скажу лишь, что мне пригодилась такая команда (весь tcp трафик на интерфейсе eth0, который не ходит в пределах локальной сети 10.0.0.0/8):
Отправляем запрос на регистрацию:
Если все прошло нормально, нам придет sms с шестизначным кодом подтверждения (например, 123-456). Отправляем этот код на сервер WhatsApp:
После этого в поле password нашего конфига должен появиться пароль. На этом процедура регистрации завершена, можно попробовать отправить сообщение другому пользователю WhatsApp.
Отправить сообщение можно командой
Принять сообщение:
А можно вообще в режиме чата переписываться:

На этом настройка yowsup закончена.
Чтобы подружить yowsup и Zabbix, надо написать скрипт отправки уведомлений. Напомню, что Zabbix берет скрипты уведомлений из директории, определенной в переменной AlertScriptsPath конфига zabbix_server.conf. В моем эта директория располагалась в /usr/local/share/zabbix/alertscripts:
Кладем туда скрипт (я назвал его whatsapp), состоящий буквально из трех строчек:
Я положил файлы yowsup в директорию alertscripts — может быть, это не самое лучшее решение, но мне показалось, что так удобнее будет искать конфиги/скрипты в случае чего.
$1 $2 $3 — это значение переменных Zabbix, означающие, соответственно, «кому отсылать уведомление», «тема» и «тело уведомления». Мы настроим эти поля далее из интерфейса Zabbix.
Делаем скрипт исполняемым:
Действуем по стандартному алгоритму:
1) Создаем способ оповещения
2) Создаем действие, связанное с этим оповещением
3) Подключаем уведомление пользователям
В меню Администрирование -> Оповещения (Administration -> Media types) нажимаем кнопку Создать способ оповещения (Create media type).

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

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

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

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

Ну и на вкладке Операции (Operations) мы указываем что должен делать Zabbix: отправить сообщение (Send message) группе пользователей или отдельному пользователю способом оповещения WhatsApp.
Сохраняем настройки и переходим к следующему шагу.
Заходим в настройки пользователя (Администрирование -> Пользователи или Administration -> Users), выбираем нужного пользователя и настраиваем ему Способ оповещений (Media):

Тип оповещения (Type): WhatsApp
Отправлять на (Send to): Номер телефона с кодом страны (например, 79123456789)
Выбираем время, когда можно присылать сообщения и степень их критичности. Сохраняем настройки.
На этом настройка закончена, но еще нужно проверить, что сообщения уходят и успешно доставляются. Можно проследить за отправкой уведомлений в меню Администрирование -> Аудит (Administration -> Audit), выбрав пункт Действия (Actions):

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

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

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

На этом настройка 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