Вебхук

Обзор

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

Интеграции

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

Помимо перечисленных здесь сервисов, Zabbix можно интегрировать с Spiceworks (вебхук не требуется). Чтобы преобразовать уведомления Zabbix в тикеты Spiceworks, создайте тип медиа электронной почты и укажите адрес электронной почты службы поддержки Spiceworks (например, [email protected]) в настройках профиля назначенного пользователя Zabbix.

Настройка

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

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

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

  1. Перейдите в раздел Оповещения > Типы носителей.
  2. Нажмите Создать тип носителя.
  3. Введите параметры типа носителя вебхука в форме.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пользовательский носитель

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

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

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

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

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

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

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