среда, 29 марта 2017 г.

Уведомления из Zabbix в Telegram

1. Создаем бота.
Идем к @BotFather
/start
/newbot
Получаем токен вида:
311825528:AAE3r8V7iaIiXzJY_s0-9brG6JMWbT126qB
Добавляем бота в список контактов в телеграме.

2. Узнаем свой TelegramID.
Идем к @MyTelegramID_bot
/start
Получаем ID вида:
281724313

3. Проверяем, работают ли оповещения от бота:
$ curl --header 'Content-Type: application/json' -X POST \
--data '{"chat_id":"281724313","text":"your_message"}' "https://api.telegram.org/bot311825528:AAE3r8V7iaIiXzJY_s0-9brG6JMWbT126qB/sendMessage"

В Telegram должно прийти сообщение "your message".

4. Идем в Zabbix-сервер и создаем скрипт в каталоге со скриптами.
# grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts

# vim /usr/lib/zabbix/alertscripts/zabbix-to-telegram-notify.sh
#!/bin/bash
TOKEN='311825528:AAE3r8V7iaIiXzJY_s0-9brG6JMWbT126qB'
which curl &>/dev/null
if [ $? -ne 0 ] ; then echo 'FAIL: curl not found.' && exit 1 ; fi
if [ $# -ne 3 ] ; then echo 'FAIL: Params not defined.' && echo 'Usage: zabbix-to-telegram-notify.sh TelegramID Subject Message' && exit 1 ; fi
CHAT_ID="$1"
SUBJECT="$2"
MESSAGE="$3"
curl -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${CHAT_ID}\",\"text\":\"${SUBJECT}\n${MESSAGE}\"}" "https://api.telegram.org/bot${TOKEN}/sendMessage" | grep -q '"ok":false,'
if [ $? -eq 0 ] ; then exit 1 ; fi

# chmod +x /usr/lib/zabbix/alertscripts/zabbix-to-telegram-notify.sh

5. Идем в панель Zabbix и настраиваем оповещения.
Администрирование - Способы оповещений - Создать способ оповещения

Администрирование - Пользователи - Username - Оповещения - Добавить

Настройка - Действия, Источник событий: Триггеры - Создать действие



После этого все должно приходить в Telegram.
via.

7 комментариев:

Анонимный комментирует...

Почему может не приходить уведомление в Telegram.

# vim /usr/local/etc/zabbix32/zabbix/alertscripts/zabbix_notify.sh

#! /usr/local/bin/bash

TOKEN='мой токен'

which curl &>/tmp/telegram.log

if [ $? -ne 0 ] ; then echo 'FAIL: curl not found.' && exit 1 ; fi
if [ $# -ne 3 ] ; then echo 'FAIL: Params not defined.' && echo 'Usage: zabbix-to-telegram-notify.sh TelegramID Subject Message' && exit 1 ; fi

CHAT_ID="$1"
SUBJECT="$2"
MESSAGE="$3"

curl -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${CHAT_ID}\",\"text\":\"${SUBJECT}\n${MESSAGE}\"}" "https://api.telegram.org/bot${TOKEN}/sendMessage" | grep -$

if [ $? -eq 0 ] ; then exit 1 ; fi

Заббикз пишет, что все отправлено

Amet13 комментирует...

А если руками запустить, работает?
/usr/local/etc/zabbix32/zabbix/alertscripts/zabbix_notify.sh ваш_chat_id subj message

Unknown комментирует...

в логах Zabbix пишет что файл скрипт_отправки.sh not found
п.с. решение пока сам не нашел.

Amet13 комментирует...

Проверьте AlertScriptPath:
# grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts

Unknown комментирует...

уточнение.. ОС - BSD, он в другой папке лежит
а в файлике прописано AlertScriptsPath=/home/zabbix/alertscripts

Amet13 комментирует...

Вот значит в каталоге /home/zabbix/alertscripts и создавайте скрипт отправки.

Unknown комментирует...

файл лежит в /home/zabbix/alertscripts и в /usr/home/zabbix/alertscripts
zabbix говорит отправлено.
при выполнении команд на права
$ cd /home/zabbix/alertscripts/
$ ls -lo
-rwsr-xr-x 1 root zabbix - 588 Feb 14 18:06 zabbix-to-telegram.sh