Отправка уведомлений и графиков из zabbix в telegram

0
8594
Обложка статьи: Отправка уведомлений и графиков из zabbix в telegram

Инструкция входит в цикл про Zabbix. Общая картина: мониторинг Linux и Windows в Zabbix, справочник ключей: ключи агента.

Нужны аварийные сообщения Zabbix в Telegram. Токен бота — секрет, в git и wiki его не кладут. Скрипты и пути эпохи Zabbix 5.x не копируйте: в текущих ветках есть тип медиа Telegram.

1. Бот

В Telegram создайте бота через BotFather, получите token. Напишите боту сами, чтобы появился chat. Узнайте chat_id своим клиентом API, токен в историю чата не вставляйте.

curl -s "https://api.telegram.org/bot<TOKEN>/getUpdates"

Ожидание: JSON с chat":{"id": …}. Подставьте свой token только в среде, где его не увидят логи CI.

2. Медиа в Zabbix

  1. Alerts → Media types → Telegram (поставка) или создайте по документации своей версии.
  2. Поля Token и Telegram chat / group — из шага 1. В 6.x/7.x это webhook Bot API, не самописный alertscripts/telegram.sh из блога 2021.
  3. Пользователю в Users → Media добавьте этот тип и chat_id.
  4. В действии (trigger action) включите отправку этому пользователю.

Имена меню сверните по current, раздел Telegram media type. Тест кнопкой Test у медиа.

3. Графики

Картинку графика текущие версии умеют класть в сообщение, если медиа и шаблон сообщения это поддерживают. Старые wget на chart.php с захардкоженным session id не используйте — это учётные данные веб-интерфейса.

Группа вместо личных сообщений

Чтобы тревоги видела вся смена, добавьте бота в группу. Идентификатор группы в getUpdates начинается с минуса (например, -1001234567890). Бот в группе по умолчанию видит только команды: этого достаточно для отправки сообщений, права на чтение остальных не нужны. Отправьте в группу любое сообщение, затем повторите getUpdates, чтобы увидеть chat.id.

curl -s "https://api.telegram.org/bot<TOKEN>/getMe"

Ответ с "ok":true подтверждает, что токен верный.

Шаблон сообщения

Сообщение должно сразу отвечать: что случилось, где и насколько серьёзно. В типе медиа и в действии используйте макросы:

{TRIGGER.SEVERITY}: {TRIGGER.NAME}
Узел: {HOST.NAME} ({HOST.IP})
Значение: {ITEM.LASTVALUE1}
Время: {EVENT.DATE} {EVENT.TIME}

Набор макросов зависит от версии, проверьте их в документации. Не включайте в сообщение пароли и ключи.

Чтобы ночью будили только по делу

  • В действии укажите минимальную серьёзность: ночной канал только для High и Disaster.
  • Для остального заведите отдельную группу без звука.
  • Добавьте задержку и условие «проблема длится больше N минут», чтобы мигающие проблемы не засыпали чат.

Диагностика

  • Reports → Action log: статус каждой отправки и текст ошибки.
  • Сервер Zabbix не достучался до api.telegram.org: проверьте исходящий HTTPS и DNS с сервера. В параметрах типа медиа есть поле для HTTP-прокси, если выход в интернет идёт через него.
  • Ошибка 403 «bot was kicked» или «chat not found»: бота удалили из группы либо указан неверный идентификатор.

Уведомление о недоступности самой системы мониторинга придёт только если её сообщения идут не через неё же: заведите внешнюю проверку, например простой cron-сервис с отправкой в тот же канал.

Как проверить

Test медиа доходит в чат. Реальный триггер на стенде (не прод) шлёт текст. Token не встречается в git grep и в публичных issue. Смените token, если светился.

Источники

Оставьте свой ответ