4. Вебхук

Обзор

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

Интеграции

Доступны следующие интеграции, позволяющие использовать предопределенные типы медиа вебхук для отправки уведомлений Zabbix в:

Помимо перечисленных здесь сервисов, Zabbix можно интегрировать с Spiceworks (вебхук не требуется). Чтобы преобразовать уведомления Zabbix в тикеты Spiceworks, создайте тип медиа электронной почты и укажите адрес электронной почты службы поддержки Spiceworks (например, help\@zabbix.on.spiceworks.com) в настройках профиля назначенного пользователя Zabbix.

Конфигурация

Чтобы начать использовать интеграцию с вебхуком:

  1. Найдите нужный файл .yaml в каталоге templates/media загруженной версии Zabbix или скачайте его из git-репозитория Zabbix.
  2. Импортируйте файл в вашу установку Zabbix. Вебхук появится в списке типов медиа.
  3. Настройте вебхук согласно инструкциям в файле Readme.md (вы можете щелкнуть по имени вебхука выше, чтобы быстро перейти к Readme.md).

Чтобы создать собственный вебхук с нуля:

  1. Перейдите в Оповещения > Типы медиа.
  2. Нажмите Создать тип медиа.

Вкладка Тип медиа содержит различные атрибуты, специфичные для этого типа медиа:

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

Следующие параметры специфичны для типа медиа вебхука:

Параметр Описание
Parameters Укажите переменные вебхука в виде пар атрибутов и значений.
Для преднастроенных вебхуков список параметров зависит от сервиса. Смотрите описание параметров в файле Readme.md вебхука.
Для новых вебхуков по умолчанию включены несколько общих переменных (URL:<empty>, HTTPProxy:<empty>, To:{ALERT.SENDTO}, Subject:{ALERT.SUBJECT}, Message:{ALERT.MESSAGE}); при желании их можно оставить или удалить.

Параметры вебхука поддерживают пользовательские макросы, все макросы, поддерживаемые в уведомлениях о проблемах, а также макросы {ALERT.SENDTO}, {ALERT.SUBJECT} и {ALERT.MESSAGE}.

Если вы укажете HTTP-прокси, поле поддерживает ту же функциональность, что и поле HTTP proxy в настройке элемента данных. Перед строкой прокси можно указать префикс [scheme]://, чтобы задать тип используемого прокси (например, https, socks4, socks5; см. документацию).
Script Введите код JavaScript в модальном редакторе, который открывается при щелчке в поле параметра или по значку карандаша рядом с ним. Этот код будет выполнять операцию вебхука.
Код представляет собой функцию, которая принимает пары параметр - значение. Значения следует преобразовать в объекты JSON с помощью метода JSON.parse(), например: var params = JSON.parse(value);.

Код имеет доступ ко всем параметрам, может выполнять HTTP-запросы GET, POST, PUT и DELETE, поддерживает дополнительные методы, такие как CONNECT, PATCH, HEAD, OPTIONS и TRACE, и управляет HTTP-заголовками и телом запроса.
Код должен содержать оператор return, иначе он не будет считаться корректным. Он может возвращать статус OK вместе с необязательным списком тегов и значений тегов (см. параметр Process tags) или строку ошибки.

Обратите внимание, что скрипт выполняется только после создания оповещения. Если в настройках скрипта указано возвращать и обрабатывать теги, эти теги не будут подставлены в макросы {EVENT.TAGS} и {EVENT.RECOVERY.TAGS} в исходном сообщении о проблеме и сообщениях о восстановлении, поскольку скрипт еще не успеет выполниться.
Примечание: Рекомендуется использовать локальные переменные (например, var local = 1) вместо глобальных (например, global = 1), чтобы каждый скрипт работал со своими данными и избежать конфликтов между одновременными вызовами (см. известные проблемы).

См. также: Руководство по разработке вебхуков, Примеры скриптов вебхуков, Дополнительные объекты JavaScript.
Timeout Тайм-аут выполнения JavaScript (1-60 с, по умолчанию 30 с).
Поддерживаются суффиксы времени, например 30s, 1m.
Process tags Установите флажок, чтобы обрабатывать возвращаемые значения свойств JSON как теги. Эти теги добавляются к любым существующим тегам проблемы.
Обратите внимание, что при использовании тегов вебхука вебхук должен возвращать объект JSON, содержащий как минимум пустой объект tags: var result = {tags: {}};
Примеры тегов, которые могут быть возвращены: jira-id:prod-1234, responsible:John Smith, processed:<no value>
Include event menu entry Установите флажок, чтобы добавить в меню события пункт, ведущий к созданному внешнему тикету.
Пункт будет добавлен для каждого включенного вебхука, у которого установлен этот флажок. Обратите внимание, что если параметры Menu entry name и Menu entry URL содержат какие-либо макросы {EVENT.TAGS.<tag name>}, пункт будет добавлен только в том случае, если эти макросы можно подставить (то есть если у события определены такие теги).
Если флажок установлен, вебхук не следует использовать для отправки уведомлений разным пользователям (лучше создать отдельного пользователя) и не следует использовать его в нескольких действиях оповещения для одного события проблемы.
Menu entry name Укажите имя пункта меню.
Поддерживается макрос {EVENT.TAGS.<tag name>}.
Это поле обязательно только если установлен флажок Include event menu entry.
Menu entry URL Укажите базовый URL пункта меню.
Поддерживается макрос {EVENT.TAGS.<tag name>}.
Это поле обязательно только если установлен флажок Include event menu entry.

Подробнее о настройке сообщений по умолчанию и параметров обработки оповещений см. в разделе общие параметры типа медиа.

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

Тестирование

Чтобы протестировать настроенный тип медиа вебхука:

  1. Найдите нужный вебхук в списке типов медиа.
  2. Нажмите Test в последнем столбце списка (откроется окно тестирования).
  3. При необходимости измените значения параметров вебхука. Замените макросы значениями-примерами; в противном случае макросы не будут разрешены, и тест завершится с ошибкой.
  4. Нажмите Test.

Замена или удаление значений в окне тестирования влияет только на процедуру тестирования, фактические значения атрибутов вебхука останутся без изменений.

Чтобы просмотреть записи журнала тестирования типа медиа, не покидая окно тестирования, нажмите Open log (откроется новое всплывающее окно).

Если проверка вебхука успешна:

  • Появится сообщение: «Успешное тестирование способа оповещения (Media type test successful)».
  • В сером поле Ответ (Response) отображается ответ сервера.
  • Под полем Ответ указывается тип ответа («JSON» или «Строка (String)»).

Если проверка вебхука неуспешна:

  • Отображается сообщение: «Ошибка при тестировании способа оповещения (Media type test failed)», — с указанием дополнительных сведений.

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

После того, как способ оповещения настроен, перейдите в раздел Пользователи → Пользователи (Users→ Users) и измените профиль пользователя, назначив адресата вебхука по этому способу оповещения, или создайте нового пользователя для использования с этим вебхуком. Шаги по настройке оповещений пользователей, общие для всех способов оповещений, описаны на странице Способов оповещений.

Если вебхук использует теги для хранения идентификатора задачи (тикета) \ сообщения, избегайте назначение этого же вебхука в качестве способа оповещения разным пользователям, так как это может вызвать ошибки вебхука (применимо к большинству вебхуков, которые используют опцию Добавить запись в меню события). В этом случае лучше всего создать для вебхука выделенного пользователя:

  1. После настройки способа оповещения вебхук, перейдите в раздел Пользователи → Пользователи (Users→ Users) и создайте выделенного пользователя Zabbix для вебхука — например, с именем пользователя Slack для вебхука Slack. Все настройки, за исключением способа оповещения, можно оставить по умолчанию, так как этот пользователь не будет входить в Zabbix.
  2. В профиле пользователя перейдите на вкладку Оповещения (Media) и добавьте вебхук с необходимой контактной информацией. Если вебхук не использует поле Отправлять на (Send to), введите любую комбинацию поддерживаемых символов для обхода требования наличия адресата.
  3. Предоставьте этому пользователю по крайней мере права чтения ко всем узлам сети, по которым ему нужно отправлять оповещения.

При настройке действия на оповещение добавьте этого пользователя в поле Отправка пользователям (Send to users) в деталях Операции — это укажет Zabbix использовать вебхук для оповещений с этого действия.

Настройка действий на оповещения

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

  • Если вебхук использует теги вебхуков [en] для хранения идентификатора задачи (тикета) \ сообщения и управляет операциями обновления\восстановления, этот вебхук не следует использовать в нескольких действиях на оповещения по одному и тому же событию на проблемы. Если {EVENT.TAGS.<имя>} существует и обновляется в вебхуке, то его окончательное значение будет не определено. Чтобы избежать этого, используйте в вебхуке новое имя тега для хранения обновлённых значений. Это относится к вебхукам Jira, Jira Service Desk, Mattermost, Opsgenie, OTRS, Redmine, ServiceNow, Slack, Zammad и Zendesk, которые поставляются Zabbix, и к большинству вебхуков, которые используют опцию Добавить запись в меню события (Include event menu entry). Однако, обратите внимание, что один вебхук может быть использован в нескольких операциях или шагах эскалации того же действия, а также в различных действиях, которые не будут срабатывать по тому же событию проблемы из-за отличающихся условий.
  • При использовании вебхука в действиях на внутренние события убедитесь, что в настройках операций действия отмечена опция Пользовательское сообщение (Custom message) и указано пользовательское сообщение. В противном случае оповещение отправлено не будет.