Отправка уведомлений из Zabbix в Telegram через Webhook

Не так давно вышел Zabbix 4.4 в котором появилось много всего интересного. Например, добавлена возможность использования web-хуков и собственных обработчиков действий и уведомлений при выявлении сбоев проверяемых сервисов. Обработчики можно создавать на JavaScript и применять для обращения к внешним службам доставки уведомлений или системами отслеживания ошибок. Например, можно написать обработчик для отправки сообщений о проблемах в корпоративный чат.

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

Исходные данные: Zabbix 4.4.1
Задача: Сделать отправку уведомлений из Zabbix в Telegram через Webhook

Для того чтобы отправлять сообщения в Телеграм необходим доступ до api.telegram.org на порт 443 с Вашего Zabbix-сервера.

1. Создаем бота у @botfather, официальная инструкция тут

Команда для создания бота /newbot
Далее вводим имя желаемого бота обязательно маленькими буквами и в конце префикс _bot, например: myxxxxxxx_bot
Если имя не занято, то botfather скажет «Done! Congratulations on your new bot» и далее выдаст ссылку на бота, вида: t.me/myxxxxxxx_bot
А так же кроме всего прочего после слов «Use this token to access the HTTP API:» выдаст API-ключ нашего бота, он нам пригодиться дальше.

Нам нужно перейти по ссылке на нашего бота и нажать ЗАПУСТИТЬ или ввести /start, если этого не сделать, то сообщения Вам приходить не будут. Данную ссылку Вы можете давать всем кто будет получать оповещения.

2. Теперь нам нужно узнать собственный идентификатор, чтобы указать его в настройках профиля пользователя в Zabbix

Самый простой способ узнать свой ID — это подключиться к боту @getidsbot, нажать ЗАПУСТИТЬ и кроме кучи всякой информации он выдаст вам Ваш ID.

3. Импорт нового способа оповещения:

Скачиваем архив с xml файлом нового способа оповещения и распаковываем его.

Открываем Zabbix, переходим в «Администрирование» -> «Способы оповещений», наживаем «Импорт» и выбираем файл zbx_export_mediatypes.xml

У нас появляется новый способ оповещения «Telegram via Webhook», редактируем его и в строку с именем token вводим Ваш API-ключ бота из п.1

Далее Вы можете изменить 2 дополнительных параметра отправки сообщений, это parse_mode и disable_web_page_preview

Параметр parse_mode задает режим разметки сообщений, может иметь значения markdown или html, более детально о разметке сообщений можно почитать в официальной документации.

Параметр disable_web_page_preview дает возможность отключить предпросмотр ссылок в сообщениях, может иметь значения true или false. Иногда имеет смысл ставить его в false, выбирать Вам.

Установленная галочка «Include event menu entry» позволяет добавлять в алармы на странице Проблемы ссылку с именем «Menu entry name» при выборе которой будет открываться страница «Menu entry URL». Значение этих параметров Вы должны поставить свои, например ввести URL Вашего бота, что будет наверно полезно.

Сохраните изменения и нажмите кнопку Тест. В поле subj введите заголовок сообщения, в поле message введите тестовое сообщение, в поле chat_id введите ID из п.2 и нажмите Тест. В Ваш телеграм должно прийти сообщение, см. пример ниже на картинке:

Zabbix telegram via webhook test

Zabbix telegram via webhook test

4. Настройка способа оповещения у пользователя

Теперь перейдите в настройки пользователя который должен получать оповещения, добавьте новое оповещение.

Тип выберите «Telegram via Webhook», в поле «Отправлять на» введите ID пользователя из п.2, пример на картинке ниже:

zabbix telegram via webhook user profile

zabbix telegram via webhook user profile

5. Настройка действий

Теперь можно настроить непосредственно действия по отправке уведомления при наступлении определенных событий, для этого перейдите в Zabbix в «Настройка» -> «Действия», выберите Источник событий — Триггеры и нажмите кнопку «Создать действие».

6. Отладка скрипта отправки и логгирование.

Скрипт отправки написан на JavaScript и ведет полное логгирование действий по отправке на уровне 3 (warning), если Вы откроете стандартный лог-файл Zabbix-server по пути /var/log/zabbix/zabbix_server.log, то увидите примерно такое:

 17106:20191101:024306.991 Webhook request value: {"subj":"\u0422\u0435\u0441\u0442","message":"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430","token":"XXXXX:XXXXXXXXXXXXXXXXXXXXXXXX","parse_mode":"html","disable_web_page_preview":"true","chat_id":"YYYYYYYY"}
 17106:20191101:024307.319 Response code: 200

Код ответа 200 означает успешную отправку.

Могут быть и ошибки отправки, пример:

17106:20191101:021857.686 Telegram failed: Response code: 400, Reason: Bad Request: can't parse entities: Expected end tag at byte offset 273

или

17106:20191101:021951.137 Telegram failed: Response code: 401, Reason: Unauthorized

или

17106:20191101:022012.354 Telegram failed: Response code: 400, Reason: Bad Request: chat not found

В каждом конкретном случае нужно смотреть в логе какие данные пришли (строка Webhook request value) и какой код ответа Телеграм.

В отправляемых сообщениях можно использовать эмодзи символы, коды символов смотрим тут, колонка Unicode. Перед кодом нужно использовать обратный слэш для экранирования.

Пример отправки с эмодзи:

zabbix telegram via webhook emoji

zabbix telegram via webhook emoji

На этом все, до скорых встреч.

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


2 комментария

  • Ответить Андрей |

    Спасибо, очень познавательно! Очень бы хотелось видеть в форме поле для прокси, ибо телеграмм напрямую не работает.

  • Ответить Михаил |

    К сожалению веб-хуки в 4.4 не поддерживают работу через прокси, я создал запрос на доработку ZBXNEXT-5554

    Проголосуйте за доработку и возможно Zabbix SIA реализуют работу через прокси.

Хотите оставить комментарий?