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"