Zabbix → Notifly
Zabbix умеет всё, кроме одного — надёжно достучаться до человека ночью. Письма тонут, SMS-шлюз надо поддерживать самому. Notifly принимает события Zabbix нативно: один media type типа Webhook — и проблемы приходят push-уведомлениями с приоритетом по важности триггера, а восстановления — тихо.
Нужен Zabbix 6.0 или новее (на 5.x замените HttpRequest на CurlHttpRequest).
Шаг 1. Канал и токен
Заголовок раздела «Шаг 1. Канал и токен»Создайте в админке канал, например zabbix, и
скопируйте его токен канала (префикс A).
Шаг 2. Media type
Заголовок раздела «Шаг 2. Media type»Alerts → Media types → Create media type, тип Webhook, имя Notifly.
Параметры:
| Имя | Значение |
|---|---|
notifly_url | https://api.notifly.ru/integrations/zabbix |
notifly_token | {ALERT.SENDTO} |
subject | {ALERT.SUBJECT} |
message | {ALERT.MESSAGE} |
severity | {EVENT.NSEVERITY} |
status | {EVENT.VALUE} |
update | {EVENT.UPDATE.STATUS} |
event_id | {EVENT.ID} |
host | {HOST.NAME} |
trigger | {EVENT.NAME} |
trigger_id | {TRIGGER.ID} |
url | {$ZABBIX.URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID} |
tags | {EVENT.TAGSJSON} |
Скрипт:
var params = JSON.parse(value);var url = params.notifly_url, token = params.notifly_token;delete params.notifly_url;delete params.notifly_token;
var req = new HttpRequest();req.addHeader('Content-Type: application/json');req.addHeader('X-Notifly-Key: ' + token);
var resp = req.post(url, JSON.stringify(params));if (req.getStatus() < 200 || req.getStatus() >= 300) { throw 'Notifly: HTTP ' + req.getStatus() + ': ' + resp;}return 'OK';На вкладке Message templates добавьте шаблоны Problem, Problem
recovery и Problem update — стандартных достаточно. Без шаблонов Zabbix
не отправит сообщение (No message defined for media type). Макрос
{$ZABBIX.URL} задайте в Administration → Macros — тогда в уведомлении
будет ссылка на событие.
Шаг 3. Пользователь и действие
Заголовок раздела «Шаг 3. Пользователь и действие»- Users → пользователь → Media → Add: тип
Notifly, в Send to — токен канала. Разным пользователям можно указать токены разных каналов — media type при этом один. - Alerts → Actions → Trigger actions: операция отправки через
Notifly, плюс recovery- и update-операции, если нужны.
Что приходит на телефон
Заголовок раздела «Что приходит на телефон»| Событие Zabbix | Приоритет в Notifly |
|---|---|
| проблема, Disaster | 10 |
| проблема, High | 8 |
| проблема, Average | 6 |
| проблема, Warning | 5 |
| проблема, Information | 3 |
| проблема, Not classified | приоритет канала по умолчанию |
| восстановление | 2 (тихо) |
| обновление (ack, комментарий…) | 3 |
Заголовок — {ALERT.SUBJECT}, текст — {ALERT.MESSAGE} и ссылка на событие.
Подробности и все поля extras.zabbix — в документации приёмника.
Эскалация и ночной режим
Заголовок раздела «Эскалация и ночной режим»- В настройках канала включите доставку: непрочитанный Disaster через 5 минут — звонок, через 15 — инцидент в PagerDuty или алерт в Opsgenie. Прочитали push — досылка остановится.
- Тихие часы с порогом 8 пропустят ночью High и Disaster, а Average и ниже придут утренней сводкой.
- На время регламентных работ заведите
окно обслуживания на канал
zabbix— проблемы придут беззвучно и без эскалации.
- Без SMS-шлюза и скриптов на сервере Zabbix — только штатный media type.
- Приоритет по важности: Disaster громко, Information тихо, восстановление не будит.
- Один media type на всех: разные пользователи и группы получают свои каналы через Send to.
Что улучшить дальше
Заголовок раздела «Что улучшить дальше»- Разделить каналы по окружениям (
zabbix-prod,zabbix-stage) и включить эскалацию только для прода. - Если уже есть media type из официальных webhook-шаблонов Zabbix, его можно
переделать, поменяв только URL и скрипт: приёмник понимает и их имена
параметров (
alert_subject,event_nseverity,host_name…).