4 Webhook

Обзор

Этот способ оповещения полезен для выполнения HTTP вызовов с использованием пользовательского JavaScript кода для прямой интеграции с внешними системами, такими как системами помощи, чатами или мессенджерами.

Для использования webhook механизмом оповещения вам необходимо сначала настроить webhook способом оповещения и, затем, указать конкретные адреса пользователей, перед использованием способа оповещения в настройке действий.

Вы можете импортировать предварительно настроенный способ оповещения webhook или, также, создать свой собственный.

Интеграции

Начиная с Zabbix 4.4.4, доступны несколько интеграций, которые позволяют использовать преднастроенные способы оповещения webhook для отправки оповещений Zabbix в:

Настройка

Для настройки нового webhook способом оповещения:

  • Перейдите в Администрирование → Способы оповещения
  • Нажмите на Создать способ оповещения

Вкладка Способ оповещения содержит общие атрибуты специфичные для этого способа оповещения:

Все обязательные поля ввода отмечены красной звёздочкой.

Параметр Описание
Имя Имя способа оповещения.
Тип Выберите Webhook типом.
Параметры Укажите переменные webhook в виде пар атрибута и значения.
Некоторые переменные добавляются по умолчанию (URL:<пусто>, To:{ALERT.SENDTO}, Subject:{ALERT.SUBJECT}, Message:%7BALERT.MESSAGE}), вы можете их оставить или удалить.
Значения автоматически URL кодируются. Значения с этих макросов раскрываются и, затем автоматически URL кодируются.
Все макросы, которые поддерживаются в оповещениях на проблемы поддерживаются в этих параметрах.
Скрипт Введите JavaScript код в этом блоке, который появляется при нажатии на поле параметра (или при нажатии кнопки просмотра/редактировании сразу после блока). Этот код будет выполнять webhook операцию (смотрите примеры).
Этот код имеет доступ ко всем параметрам, он может выполнять запросы HTTP GET, POST, PUT и DELETE и имеет контроль над HTTP заголовками и телом запроса. Он может вернуть ОК состояние вместе с опциональным списком тегов и значениями тегов (например, Jira ID: PROD-1234, Ответственный: Джон Смит, Обработано:<без значения> и т.д.) или строку с ошибкой.
Смотрите также: Дополнительные Javascript объекты.
Время ожидания Время ожидания выполнения JavaScript (1-60s, по умолчанию 30s).
Поддерживаются суффиксы времени, например, 30s, 1m.
Обработка тегов Отметьте эту опцию для обработки возвращенных значений свойств JSON тегами. Эти теги добавляются в Zabbix к уже существующим (если имеются) тегам события о проблеме.
Включить запись меню события Отметите эту опцию для добавления записи в меню события, которая ссылается на созданную внешнюю задачу.
Имя записи меню Укажите имя записи меню.
Поддерживается {EVENT.TAGS.<имя тега>} макрос.
Это поле обязательно только, если активировано Включить запись меню события.
URL записи меню Укажите базовый URL записи меню.
Поддерживается {EVENT.TAGS.<имя тега>} макрос.
Это поле обязательно только, если активировано Включить запись меню события.
Описание Введите описание.
Активировано Отметьте, чтобы активировать способ оповещения.
Примеры скриптов

Создание задачи в JIRA и получение некоторой информации о созданной задаче.

try {
           Zabbix.Log(4, 'jira webhook script value='+value);
       
           var result = {
               'tags': {
                   'endpoint': 'jira'
               }
           },
           params = JSON.parse(value),
           req = new CurlHttpRequest(),
           fields = {},
           resp;
       
           req.AddHeader('Content-Type: application/json');
           req.AddHeader('Authorization: Basic '+params.authentication);
       
           fields.summary = params.summary;
           fields.description = params.description;
           fields.project = {"key": params.project_key};
           fields.issuetype = {"id": params.issue_id};
           resp = req.Post('https://tsupport.zabbix.lan/rest/api/2/issue/',
               JSON.stringify({"fields": fields})
           );
       
           if (req.Status() != 201) {
               throw 'Response code: '+req.Status();
           }
       
           resp = JSON.parse(resp);
           result.tags.issue_id = resp.id;
           result.tags.issue_key = resp.key;
       } catch (error) {
           Zabbix.Log(4, 'jira issue creation failed json : '+JSON.stringify({"fields": fields}));
           Zabbix.Log(4, 'jira issue creation failed : '+error);
       
           result = {};
       }
       
       return JSON.stringify(result);

Отправка оповещения в канал Slack.

var req = new CurlHttpRequest();
       req.AddHeader('Content-Type: application/x-www-form-urlencoded');
       
       Zabbix.Log(4, 'webhook request value='+value);
       
       req.Post('https://hooks.slack.com/services/KLFDEI9KNL/ZNA76HGCF/h9MLKJMWoUcEAz8n',
         'payload='+value
       );
       
       Zabbix.Log(4, 'response code: '+req.Status());
       
       return JSON.stringify({
         'tags': {
           'endpoint': 'slack'
         }
       });
Опции

Вкладка Опции содержит настройки обработки оповещений, которые являются общими по всем способам оповещений.

Оповещение пользователя

Для назначения номера телефона пользователю:

  • Перейдите в Администрирование → Пользователи
  • Откройте диалог свойств пользователя
  • На вкладке Оповещения, нажмите на Добавить

Атрибуты оповещения пользователя:

Параметр Описание
Тип Выберите настроенный webhook способ оповещения.
Отправлять на Укажите адрес на который будут отправляться сообщения.
Когда активно Вы можете ограничить время отправки сообщений, например, только рабочие дни (1-5,09:00-18:00).
Смотрите страницу Спецификации периодов времени для получения подробных сведений о формате. Поддерживаются пользовательские макросы.
Использовать, если важность Отметьте важности триггеров, по которым вы хотите получать оповещения.
Обратите внимание, важность по умолчанию ('Не классифицирован') должна быть выбрана, если вы хотите получать оповещения по событиям не связанным с триггерами.
После сохранения выбранные важности триггера отобразятся соответствующими цветами важностей, тогда как не выбранные важности будут заполнены серым цветом.
Состояние Состояние оповещения пользователя.
Активировано - используется.
Деактивировано - не используется.