Настройка оповещений
Установка по умолчанию
При развертывании системы, устанавливается интеграция с alertmanager как средство оповещения по умолчанию. Данный компонент поддерживает много разных типов каналов оповещений, например:
email
Telegram
Discord
Jira
Mattermost (Slack)
MS Teams
OpsGenie
PagerDuty
VictorOps
SNS (Amazon AWS)
Webex
Webhook
Правила оповещений о событиях описаны в конфигурационном файле:
./templates/alertmanager-cm.yaml - в случае установки в кластер Kubernetes
./alertmanager/config/alertmanager.yml - в случае установки в виде Docker Compose
Настройки описываются в формате YAML. Например, для интеграции с Mattermost необходимо подставить <webhookid> и <channel-name> в блок slack_configs группы receivers и т.д. Имя канала оповещений (receiver) задается произвольно. Неиспользуемые каналы можно удалить из конфигурации.
global:
templates:
- '/etc/alertmanager-templates/*.tmpl'
route:
receiver: alert-null # канал для отправки всех сообщений по умолчанию.
# В примере указана пустая заглушка для отправки сообщений только по указанным далее маршрутам.
# Может быть использован любой другой канал.
group_by: ['alertname', 'hostname', 'group', 'severity', 'metric']
group_wait: 3m
group_interval: 5m
repeat_interval: 1d
routes:
- receiver: alert-mmost
matchers: # задаем условия для отправки сообщений через этот канал
- team = ipa_support
- receiver: alert-telegram1
matchers:
- group = infra
- receiver: send-to-telegram2
matchers:
- group = middleware
- severity =~ "warning|critical"
- receiver: email-alerts
matchers:
- group = middleware
- severity = critical
receivers:
- name: alert-mmost1
slack_configs:
- api_url: https://im.astralinux.ru/hooks/<webhookid>
channel: '<channel-name>' # имя канала в mattermost
send_resolved: true
title: '{{ template "slack.title" . }}'
color: '{{ template "slack.color" . }}'
text: '{{ template "slack.text" . }}'
- name: alert-telegram1
# Оповещения в первую группу telegram
telegram_configs:
- bot_token: '<bot_token>' # https://core.telegram.org/bots/features#botfather
api_url: 'https://api.telegram.org'
# Не забудьте добавить бота в группу, в которую должны приходить сообщения
chat_id: -1000000000001 # <указать id группы в формате -1234567890, в начале стоит минус
send_resolved: true
message: '{{ template "telegram.message" . }}'
- name: send-to-telegram2
# Оповещения во вторую группу telegram (при необходимости)
telegram_configs:
- bot_token: '<bot_token>'
api_url: 'https://api.telegram.org'
chat_id: -1000000000002
send_resolved: true
message: '{{ template "telegram.message" . }}'
- name: email-alerts
email_configs:
- to: email@example-domain.ru
send_resolved: false
from: astra-monitoring@example-domain.ru
smarthost: <smtp-relay-address>:25
require_tls: false
- name: alert-null # пустой канал-заглушка
inhibit_rules:
- source_matchers: [severity="critical"]
target_matchers: [severity="warning"]
# Apply inhibition if the alertname is the same.
# CAUTION:
# If all label names listed in `equal` are missing
# from both the source and target alerts,
# the inhibition rule will apply!
equal: [alertname, hostname, instance, group]
Webhook-интеграции
Система поддерживает интеграцию с внешними сервисами через Webhook, что позволяет подключить каналы оповещений, не поддерживаемые нативно Alertmanager. Среди совместимых сервисов:
GitLab
Ansible Tower
IRC-чаты
Zoom
SMS-шлюзы
Другие веб-сервисы
Конфигурация каналов оповещений
Каналы оповещений настраиваются в секции receivers
. Для каждого канала указываются:
Уникальное имя получателя
Специфичные параметры:
Email: адреса получателей
Telegram: токен бота и ID чата
Webhook: URL эндпоинта
Можно создать несколько получателей одного типа с разными параметрами.
Маршрутизация оповещений
Логика распределения оповещений по каналам задаётся в секции route
:
default
- канал для оповещений без специальных условийmatchers
- условия маршрутизации на основе лейблов:matchers: - group = "middleware" - severity =~ "warning|critical"
Выбор того или иного канала оповещений зависит от условий, заданных в секции route, включая канал «по умолчанию» (в примере выше это alert-null), куда будут отправляться все оповещения. Для остальных маршрутов условия задаются в блоке matchers маршрута. Например, это может быть проверка на значение каких-либо лейблов - severity, group и т.д. Оповещение может быть отправлено в несколько разных каналов. Так, в примере выше описана отправка в telegram2 алертов, у которых лейбл group = «middleware», а severity = «warning» или «critical». При этом, алерты с лейблами group = «middleware» и severity = «critical» будут также дублироваться на электронную почту из канала email-alerts.
Группировка оповещений
Система предоставляет гибкие механизмы для управления потоком уведомлений:
group_by
Определяет метки для объединения связанных оповещений в группы.
Пример:group_by: ['host', 'service']
объединит все алерты от одного хоста и сервиса.group_wait (по умолчанию: 30 секунд)
Время ожидания перед отправкой первой группы оповещений.
Позволяет собрать связанные события в одно уведомление.group_interval (по умолчанию: 5 минут)
Интервал между отправками обновлений для существующей группы.repeat_interval (по умолчанию: 4 часа)
Периодичность повторных уведомлений о нерешенных проблемах.
Пример конфигурации:
route: group_by: ['host'] group_wait: 1m group_interval: 10m repeat_interval: 6h
Подавление избыточных оповещений
В секции inhibit_rules
можно настроить правила для:
Автоматического подавления менее важных оповещений
Уменьшения информационного шума при критических событиях
Пример правила:
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'host']
Это правило отключает warning-оповещения при наличии критических событий с теми же метками.
Активные настройки Alertmanager, его состояние и список активных алертов можно проверить в web-интерфейсе по доменному имени, заданному при развертывании в среде Kubernetes (например, вида https://alertmanager.am.domain.local/) или по порту 9093 при развертывании в среде Docker Compose (вида http(s)://astra-monitoring.server:9093/). Также, используя API Alertmanager, возможно проверять его состояние GET-запросами по пути /-/healthy, /-/ready или инициировать перезагрузку конфигурации POST-запросом по пути /-/reload.
Более подробно о возможностях настройки подсистемы оповещения можно найти в официальной документации.
После внесения изменений, необходимо обновить компоненты Платформы с помощью инструментов docker-compose / helm-chart.