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. Нажмите Создать тип медиа.

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

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

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

Parameter Description
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.

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

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

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

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

  • Найдите соответствующий вебхук в списке способов оповещений.
  • Нажмите Тест (Test) в последнем столбце (откроется окно тестирования).
  • Измените параметры вебхука при необходимости. Замените макросы значениями из примеров; в противном случае макросы не будут раскрыты и тест завершится неудачно.
  • Нажмите Тест (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) и указано пользовательское сообщение. В противном случае оповещение отправлено не будет.