Подключение Zabbix
Принимайте алерты Zabbix в Incident Garden через webhook.
Это руководство показывает, как подключить Zabbix как источник алертов. Если вы ещё не проходили базовую настройку, начните с Quick Start.
Предусловия
Как и для любой интеграции, сначала подготовьте команду и политику эскалации этой команды — без политики интеграцию создать нельзя. Подробности — в Quick Start: Создание команды и Политика эскалации.
Создание интеграции
Откройте вкладку интеграций команды
Откройте нужную команду, перейдите на вкладку Integrations и нажмите Add Integration.
Заполните параметры
Укажите имя, выберите тип Zabbix, команду и политику эскалации. При выборе
типа подставляется пресет маппинга важности.
Скопируйте API key
После сохранения скопируйте API key — он показывается только один раз. Позже виден лишь префикс; ключ можно перевыпустить, но не восстановить.
Endpoint приёма
Zabbix отправляет на обобщённый endpoint:
Настраивается это через webhook media type (скрипт оповещения Zabbix), который формирует JSON в обобщённом формате и отправляет его на указанный endpoint.
Настройка media type в Zabbix
Media type типа Webhook — это скрипт оповещения на стороне Zabbix. Он собирает из макросов события тело запроса и отправляет его на ваш endpoint приёма.
Создайте media type
В Zabbix откройте Alerts → Media types → Create media type и заполните:
- Name:
Incident Garden - Type:
Webhook
В таблице Parameters задайте параметры (имя → значение). Значения справа —
это макросы Zabbix; замените <API_KEY> на API key вашей интеграции:
| Параметр | Значение |
|---|---|
event_id | {EVENT.ID} |
event_name | {EVENT.NAME} |
event_severity | {EVENT.SEVERITY} |
event_value | {EVENT.VALUE} |
host_name | {HOST.HOST} |
url | https://api.incidentgarden.ru/api/v1/integrations/<API_KEY>/webhook |
Остальные поля формы (Message templates и прочие) оставьте со значениями по умолчанию. Исключение — вкладка Options: в ней задаются повторные попытки отправки, о них ниже.
Привяжите media type к пользователю
Откройте Users → <ваш пользователь> → Media → Add и выберите
Incident Garden. Без этой привязки Zabbix не будет отправлять оповещения
через media type.
Создайте trigger action
Заведите trigger action, который на срабатывание и на восстановление триггера
вызывает media type Incident Garden. Тогда одно и то же событие пришлёт и
открытие, и закрытие алерта.
Как макросы ложатся в payload
Скрипт переводит макросы события Zabbix в поля обобщённого тела запроса:
{EVENT.VALUE}(1— проблема,0— восстановление) →status(firing/resolved).{EVENT.ID}→dedup_key. Идентификатор события стабилен между проблемой и её восстановлением, поэтому закрывающее событие находит открытый алерт и переводит его вresolved, а не создаёт новый.{EVENT.SEVERITY}→labels.severity. Скрипт приводит значение к нижнему регистру и заменяет пробел на_, чтобы оно совпало со шкалой Zabbix (disaster/high/average/warning/information/not_classified), по которой работает маппинг важности.{EVENT.NAME}→title.{HOST.HOST}→labels.host.
Повторная отправка при сбое
Доставка события — ответственность отправляющей стороны. Между Zabbix и Incident Garden лежит сеть: запрос может не уйти, ответ может не дойти. Если такое событие не отправить повторно, алерта по нему не будет — а значит, дежурного никто не позовёт.
У разных источников это устроено по-разному. AlertManager повторяет отправку сам, без настройки. Zabbix — повторяет только если это задано в media type.
Проверьте повторные попытки у media type. Откройте Incident Garden →
вкладка Options и убедитесь, что заданы:
- Attempts — сколько раз Zabbix попробует отправить оповещение. Значение
1означает «одна попытка и всё»: любой сетевой сбой в этот момент тихо съедает событие. - Attempt interval — пауза между попытками. Ставьте её не нулевой: мгновенный повтор попадёт в ту же секунду сбоя, что и первая попытка.
Разумная отправная точка — три попытки с интервалом в десяток секунд; дальше подстраивайте под себя. Важно лишь, что попыток больше одной и между ними есть пауза.
Скрипт из шага выше специально написан под этот механизм: при неуспешном ответе
он не возвращает OK, а завершается ошибкой (throw) и пишет строку в журнал
Zabbix. Для Zabbix это и есть сигнал «не доставлено, повторить». Если переписать
скрипт так, чтобы он проглатывал ошибку и всегда возвращал OK, повторные
попытки перестанут работать — Zabbix будет считать, что всё дошло.
Проверить фактические отправки и их результат можно в Zabbix: Reports → Action log.
Откуда берётся важность
Важность берётся из плоского объекта labels в теле запроса. Для пресета
Zabbix (source_field = severity) скрипт Zabbix должен класть приоритет
Zabbix в labels.severity.
Пример тела запроса:
Эти же метки из labels используются в условиях Label matchers у
Policies. Если скрипт Zabbix не кладёт нужную метку, для
политик она считается отсутствующей: matcher «равно» / «присутствует» по ней не
совпадёт, а matcher «не равно» / «отсутствует» совпадёт со всеми такими
алертами. Проверьте, что скрипт Zabbix присылает метки, на которые вы опираетесь в
условиях.
Маппинг важности
Пресет для типа Zabbix:
critical←disaster,highwarning←average,warning,information,not_classifieddefault—critical
Как изменить набор значений — см. Настройка важности. Полный формат обобщённого payload — в справочнике Формат payload.
