Webhook

Настройка интеграций из UI

Создайте канал уведомлений, добавьте в этот канал интеграцию с типом Webhook. Добавьте:

  • Метод отправки

  • URL webhook

  • Токен для авторизации (опционально)

  • Custom headers (опционально)

  • Template Сохраните канал.

Template задаёт структуру webhook-запроса, который будет отправляться в указанный URL. Вот полный шаблон с пояснениями:

{
 "subject": "{{.NotificationData.Subject}}",  // тема уведомления
 "message": "{{.NotificationData.Message}}",  // тело уведомления в формате HTML
 "text": "{{.NotificationData.Text}}",  // тело уведомления в формате plain text
 "link": "{{.NotificationData.Link}}",  // ссылка на инцидент/проблему/монитор/...
 "priority": "{{.NotificationData.Priority}}", // приоритет оповещения (0 - высокий, 1 - средний, 2 - низкий, 3 - инфо)

 "problem_id": "{{index .NotificationData.Data "problem_id"}}", // id проблемы
 "monitor_id": "{{index .NotificationData.Data "monitor_id"}}", // id монитора
 "monitor_query": "{{index .NotificationData.Data "monitor_query"}}", // promQL выражение монитора при создании проблемы
 "monitor_name": "{{index .NotificationData.Data "monitor_name"}}", // имя монитора (человеко-читаемое)
 "rule_id": "{{index .NotificationData.Data "rule_id"}}", // id правила

 "labels_required": {{marshal (index .NotificationData.Data "labels_required")}}, //  ярлыки метрик, требуемые для срабатывания правила на момент создания проблемы
 "labels_absent": {{marshal (index .NotificationData.Data "labels_absent")}}, // ярлыки метрик, которые игнорировались правилом на момент создания проблемы
 "rule_priority": "{{index .NotificationData.Data "rule_priority"}}", // приоритет правила
 "parameters": {{marshal (index .NotificationData.Data "parameters")}}, // параметры правила
 "metric_id": "{{index .NotificationData.Data "metric_id"}}", // id метрики
 "metric_labels": {{marshal (index .NotificationData.Data "metric_labels")}}, // ярлыки метрики на момент обновления проблемы
 "metric_value": "{{index .NotificationData.Data "metric_value"}}", // значение метрики на момент обновления проблемы
 "no_data": {{marshal (index .NotificationData.Data "no_data")}}, // является истиной, если metric_value отсутствует
 "object_id": "{{index .NotificationData.Data "object_id"}}", id объекта, на котором появилась проблема
 "metric_group": {{marshal (index .NotificationData.Data "metric_group")}}, // имя группы метрики, построенное из labels с помощью настроек монитора

 "state": "{{index .NotificationData.Data "state"}}", // хранит уровень критичности проблемы по (OK, WARNING, NO_DATA,CRITICAL)
 "prev_state": "{{index .NotificationData.Data "prev_state"}}", // хранит предыдущий уровень критичности проблемы
 "resolved": {{marshal (index .NotificationData.Data "resolved")}}, // является истиной, если проблема закрыта
 "problem_resolved_at": "{{index .NotificationData.Data "problem_resolved_at"}}", // момент, когда правило разрешило проблему
 "problem_created_at": "{{index .NotificationData.Data "problem_created_at"}}", // момент появления проблемы
 "problem_updated_at": "{{index .NotificationData.Data "problem_updated_at"}}", // момент крайнего обновления

 "owner": "{{index .NotificationData.Data "owner"}}", // сотрудник, который был назначен ответственным за проблему
 "number_of_notifications": "{{index .NotificationData.Data "number_of_notifications"}}", // сколько раз посылали оповещения
 "count": "{{index .NotificationData.Data "count"}}" // счётчик изменений состояния проблемы.
}

Настройка интеграций из файла

- type: "webhook"
  channel:
    settings:
        method: метод              # метод http-запроса (POST, PUT и тд.)
        url: webhook_url           # url, куда будет отправляться запрос
        template: шаблон           # шаблон, который формирует body запроса
        custom_headers: заголовки  # кастомные заголовки (опционально)
        authorization_token: token # токен авторизации (опционально)

Для custom_headers и authorization_token должен передаваться валидный json с экранизированными символами.
Пример шаблона можете увидеть в UI при создании интеграции типа webhook или в примере ниже

Пример:

- type: "webhook"
  channel:
    settings:
        method: "POST"
        url: "http://localhost:8080/webhook"
        template: "{\"subject\":\"{{.Subject}}\",\"message\":\"{{.Message}}\",\"text\":\"{{.Text}}\",\"priority\":{{.Priority}},\"id\":\"{{.ProblemID}}\",\"monitor_id\":\"{{.MonitorID}}\",\"monitor_query\":\"{{.MonitorQuery}}\",\"monitor_name\":\"{{.MonitorName}}\",\"rule_id\":\"{{.RuleID}}\",\"labels_required\":{{marshal .LabelsRequired}},\"labels_absent\":{{marshal .LabelsAbsent}},\"rule_priority\":{{.RulePriority}},\"parameters\":{{marshal .Parameters}},\"metric_id\":\"{{.MetricID}}\",\"metric_labels\":{{marshal .MetricLabels}},\"metric_value\":{{.MetricValue}},\"no_data\":{{.NoData}},\"object_id\":\"{{.ObjectID}}\",\"metric_group\":{{marshal .MetricGroup}},\"state\":\"{{.State}}\",\"prev_state\":\"{{.PrevState}}\",\"resolved\":{{.Resolved}},\"resolved_at\":\"{{.ResolvedAt.Format \"2006-01-02T15:04:05Z07:00\"}}\",\"created_at\":\"{{.ProblemCreatedAt.Format \"2006-01-02T15:04:05Z07:00\"}}\",\"updated_at\":\"{{.ProblemUpdatedAt.Format \"2006-01-02T15:04:05Z07:00\"}}\",\"owner\":\"{{.Owner}}\",\"number_of_notifications\":{{.NumberOfNotifications}},\"count\":{{.Count}}}"
        custom_headers: "{\"subject\":\"123\",\"message\":\"456\"}"
        authorization_token: "12345"