Zabbix + Telegram

Оповещения Zabbix через Telegram с помощью Telegram BotAPI

Хотите получать оповещение триггеров Zabbix в Telegram? Нет проблем, далее приведен очень простой способ подружить Zabbix и Telegram, используя Telegram Bot API, а если быть точнее…используя уже готового бота.

Мой хороший друг написал Telegram-бота, который умеет отправлять адресату то, что приходит в правильно-сформированном HTTP GET запросе. Он очень удачно подходит для различных «оповещалок».

Так вот, знакомьтесь: Глашатый, он же CrierBot.

Бот присылает все, что было в специальном HTTP GET запросе вида: http://crierbot.appspot.com/<TOKEN>/send?message=<MESSAGE>

Где TOKEN — токен выданный ботом при его добавлении в список контактов Telegram, а MESSAGE — собственно сообщение, которые хотите передать.

Давайте начнем по порядку. Сначала добавим бота к себе в Telegram:

Добавляем @crierbot к себе в список контактов и нажимаем START

Добавляем @crierbot
Добавляем @crierbot

После этого бот пришлет нам наш уникальный Token

Присланный Token
Присланный Token

Все, бот готов к работе. Теперь займемся Zabbix’ом

Zabbix умеет отправлять оповещения, используя скрипт. Согласно официальной документации, Zabbix отправляет 3 параметра: получатель, тема сообщения, текст сообщения.

Давайте напишем скрипт, который будет отправлять переданное Zabbix’ом боту.

#!/bin/bash
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
wget -O /dev/null "http://crierbot.appspot.com/$1/send?message=Subj: $2 || Message:$3"

Где $1, $2, $3 переданные Zabbix’ом параметры: получатель, тема сообщения, сообщение.

Данный скрипт сохраняем с произвольным именем, н.р. telegram.sh в директорию Zabbix’а, где хранятся скрипты уведомлений (в Debian по умолчанию это директория: /usr/lib/zabbix/alertscripts/ )

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

chmod +x /usr/lib/zabbix/alertscripts/telegram.sh

Теперь переходим в веб-интерфейс Zabbix’а и переходим по Меню: «Администрирование» -> «Способы оповещения» и нажимаем «Создать способ оповещения»

Способы оповещения в Zabbix
Способы оповещения в Zabbix

В появившейся форме заносим следующие данные:

Имя: произвольное, н.р. Telegram
Тип: Скрипт
Имя скрипта: то имя, которое было присвоено нашему скрипту, у меня это telegram.sh (ВНИМАНИЕ: не надо писать полный путь к скрипту!!!)
Активировано: [V]

Нажимаем «Добавить»

Настройка способа оповещения
Настройка способа оповещения

В третьей версии Zabbix нужно при создании media type обязательно указывать три параметра {ALERT.SENDTO}, {ALERT.SUBJECT} и {ALERT.MESSAGE}, как написано тут:
https://www.zabbix.com/documentation/3.0/manual/config/notifications/media/script

иначе $1..$3 не передаются в скрипт, и, соответственно, ничего не работает

Спасибо за дополнение Dmitry Burtsev и Nikolay Groo

photo_2016-03-31_16-08-44

 

Чтобы добавить пользователю данный вид оповещения нужно:

  • Перейти: «Администрирование»->»Пользователи»
  • Выбрать нужного пользователя
  • Перейти на вкладку «Оповещения»

2016-03-31 (2)

  • Нажать «Добавить»
  • В появившемся окне выбрать способ оповещения «Telegram» (тот что создали ранее) и ввести токен в поле «Отправлять на»

2016-03-31

Все, теперь осталось добавить данный способ оповещения в «Действия» («Настройки»->»Действия») и вы будите получать вот такие сообщения:

Оповещение от Zabbix
Оповещение от Zabbix

P.S.: Если вы не хотите получать полный текст сообщений Zabbix’а и вам достаточно лишь темы сообщения, то уберите параметр $3 из скрипта, н.р. так:

#/bin/bash
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
wget -O /dev/null "http://crierbot.appspot.com/$1/send?message=$2"

 

UPDATE [03.02.2016]: 

Исходный код доступен на GitHub: https://github.com/hellsman/crierbot

Группа в Telegram для приема и обсуждения предложений по улучшению бота: https://telegram.me/joinchat/Ay5NVgZjJ_YiDeEpE8b3Og

UPDATE [31.03.2016]:

Обновил скрипты, бывают проблемы что wget не находится и поэтому сделано обновление переменно PATH, также добавлен вывод ответа wget в /dev/null, чтобы не создавались файлы на диске. (Спасибо за дополнение Dmitry Burtsev, Дмитрий Андреев)

 

comments powered by HyperComments
Андрей
2015-10-08 17:24:33
Спасибо! Очень доступно и доходчиво.
hellsman
2015-10-19 15:21:25
Не за что :)
Андрей
2015-10-19 15:28:21
единственное слегка модифицировал скрипт telegram.sh, потому что wget пытается сохранить содержимое запроса и ругается: #!/bin/bash curl https://crierbot.appspot.com/$1/send -G --data-urlencode message="$2"
hellsman
2015-10-22 09:27:59
Спасибо, добавлю!