Отправка уведомлений и графиков из 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
- Alerts → Media types → Telegram (поставка) или создайте по документации своей версии.
- Поля Token и Telegram chat / group — из шага 1. В 6.x/7.x это webhook Bot API, не самописный
alertscripts/telegram.shиз блога 2021. - Пользователю в Users → Media добавьте этот тип и chat_id.
- В действии (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, если светился.
Источники
- Zabbix documentation, current. URL: https://www.zabbix.com/documentation/current — Telegram media type.
- Telegram Bots. URL: https://core.telegram.org/bots.




















