Каналы уведомлений#
Канал — это цель для исходящих уведомлений. Каналы не получают алерты напрямую и не имеют токенов приёма.
Incoming alert -> Route -> Notification channels
Маршрут может иметь один или несколько каналов. При создании или обновлении алерта IncidentRelay проверяет каждый канал, привязанный к сопоставленному маршруту.
Браузерные push-уведомления не являются типом канала. Пользователи включают браузерные/PWA push-уведомления в разделе Profile, и алерты отправляются на активные устройства с браузерными push-уведомлениями назначенного пользователя.
Браузерные push-уведомления не требуют привязки канала к маршруту. Подробнее: Браузерные push-уведомления.
Проверки доставки#
Для каждого канала IncidentRelay проверяет:
1. Is the channel enabled?
2. Is the channel attached to the matched route?
3. Does notify_on_severities allow this alert severity?
4. Does the notifier have all required channel or global settings?
5. Does the assigned user have the required contact field, if the channel needs one?
Поддерживаемые типы каналов#
| Тип | Обязательная конфигурация канала | Требование к профилю пользователя | Требование к глобальной конфигурации |
|---|---|---|---|
mattermost | Webhook URL или настройки Bot API | Опциональный Mattermost user ID для атрибуции пользователя | public_base_url для кнопок |
telegram | bot_token, chat_id | Telegram user ID для действий | Опциональный прокси Telegram |
email | Опциональный html_template | У назначенного пользователя должен быть email | Настройки SMTP |
slack | Режим webhook: webhook_url; Bot API: bot_token, channel_id и либо signing_secret, либо app_token | Необязательный Slack user ID для атрибуции действий | Публичный HTTPS-эндпоинт для HTTP-действий или воркер Slack для Socket Mode |
discord | webhook_url | Нет | Нет |
teams | webhook_url | Нет | Нет |
webhook | webhook_url | Нет | Нет |
voice_call | Опциональная политика уведомлений | У назначенного пользователя должен быть phone | Настройки голосового провайдера |
Фильтр по важности#
Каждый канал может ограничивать, какие уровни важности он получает, с помощью канонического ключа notify_on_severities в конфигурации канала.
Пример:
{
"notify_on_severities": ["critical", "high"]
}
Если notify_on_severities отсутствует или пуст, канал получает все уровни важности алертов, привязанных к его маршруту.
Используйте канонические имена уровней важности:
critical
high
medium
warning
low
info
IncidentRelay нормализует распространённые псевдонимы входящих уровней важности перед сравнением их с фильтром.
| Входящее значение | Нормализованное значение |
|---|---|
crit, error, fatal, disaster | critical |
avg, average | medium |
warn | warning |
information, informational, not_classified, not classified | info |
Не используйте старые или специфичные для канала поля важности, такие как severities или call_on_severities. Используйте notify_on_severities для каждого типа канала.
Обновления уведомлений#
Некоторые каналы могут обновлять существующее уведомление после ACK, Resolve, Shelve или Unshelve.
| Канал | Поддерживает обновления | Примечания |
|---|---|---|
| Mattermost Bot API | Да | Требуется режим Bot API |
| Slack Bot API | Да | Требуются сохранённые метаданные канала и сообщения Slack |
| Telegram | Да | Требуются сохранённые метаданные сообщения Telegram и опрос для действий |
| Нет | Для событий уведомлений может быть отправлено новое письмо | |
| Голосовой вызов | Нет | Вызовы являются односторонними уведомлениями |
| Входящий webhook Slack, Discord, Teams, универсальный webhook | Нет | Доставка через webhook создаёт новые сообщения и не может обновить исходное уведомление |
Страницы отдельных каналов#
Устранение неполадок#
Канал не вызывается для реального алерта#
Проверьте:
- У алерта есть
route_id. - Канал привязан к этому маршруту.
- Канал включён.
- Алерт не заглушён.
- Фильтр важности канала разрешает уровень важности алерта.
- У назначенного пользователя есть необходимые контактные данные, такие как email или телефон.
Тест работает, но реальный алерт нет#
Тест канала обходит часть реального пути маршрутизации алерта.
Реальные алерты всё равно требуют:
route match -> route channel binding -> allowed severity -> assignee contact data
Для браузерных push-уведомлений проверка отличается:
alert assignee -> assignee has active browser push subscription
Тест браузерных push-уведомлений отправляется текущему пользователю профиля. Реальный push по алерту отправляется назначенному пользователю.
Логи показывают notification sent, но пользователь его не получил#
notification sent означает, что IncidentRelay передал сообщение внешнему провайдеру или SMTP-релею без исключения. Это не гарантирует финальную доставку в почтовый ящик, чат или на телефон. Проверьте также логи нижестоящего провайдера.