Перейти к содержимому

Zabbix → Notifly

Zabbix умеет всё, кроме одного — надёжно достучаться до человека ночью. Письма тонут, SMS-шлюз надо поддерживать самому. Notifly принимает события Zabbix нативно: один media type типа Webhook — и проблемы приходят push-уведомлениями с приоритетом по важности триггера, а восстановления — тихо.

Нужен Zabbix 6.0 или новее (на 5.x замените HttpRequest на CurlHttpRequest).

Создайте в админке канал, например zabbix, и скопируйте его токен канала (префикс A).

Alerts → Media types → Create media type, тип Webhook, имя Notifly. Параметры:

ИмяЗначение
notifly_urlhttps://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 — тогда в уведомлении будет ссылка на событие.

  1. Users → пользователь → Media → Add: тип Notifly, в Send to — токен канала. Разным пользователям можно указать токены разных каналов — media type при этом один.
  2. Alerts → Actions → Trigger actions: операция отправки через Notifly, плюс recovery- и update-операции, если нужны.
Событие ZabbixПриоритет в Notifly
проблема, Disaster10
проблема, High8
проблема, Average6
проблема, Warning5
проблема, Information3
проблема, 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…).