Alertmanager и маршрутизация

Урок про Alertmanager — компонент, превращающий firing-алерты в осмысленные уведомления нужным людям.

Alertmanager — отдельный сервис, который принимает алерты от Prometheus, группирует, подавляет дубликаты и маршрутизирует их получателям.

Prometheus умеет лишь определить, что алерт firing. Куда его отправить, как не разбудить всю команду из-за одного инцидента и как сгруппировать связанные алерты — это работа Alertmanager.

Зачем нужен отдельный сервис

Разделение ответственности: Prometheus решает «есть ли проблема», Alertmanager — «кому и как об этом сообщить». Один Alertmanager обслуживает несколько Prometheus-серверов и даёт единые правила доставки.

[Prometheus] --firing--> [Alertmanager] --> Slack / Email / PagerDuty

Маршрутизация: route и receivers

Конфиг описывает дерево route и список receivers. Алерт спускается по дереву, и первый подходящий маршрут определяет получателя. Критичные алерты можно слать в PagerDuty, остальные — в Slack.

route:
  receiver: "slack-default"
  group_by: ["alertname", "job"]
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  routes:
    - match:
        severity: "critical"
      receiver: "pagerduty"

receivers:
  - name: "slack-default"
    slack_configs:
      - channel: "#alerts"
  - name: "pagerduty"
    pagerduty_configs:
      - routing_key: "<ключ>"

Группировка и тишина

  • Группировка (group_by) объединяет похожие алерты в одно уведомление — например, все упавшие инстансы одного job.
  • Silence временно глушит алерты по фильтру лейблов: удобно на время планового обслуживания.
  • Inhibition подавляет одни алерты при наличии других: если упал весь дата-центр, не нужны сотни «сервис недоступен».

Как работает под капотом

Получив firing-алерт, Alertmanager помещает его в группу по group_by и ждёт group_wait, собирая родственные алерты в одно сообщение. Дальше работает repeat_interval — как часто повторять напоминание, пока проблема не решена. Перед отправкой применяются silences и inhibition-правила. Так из потока сырых алертов получается аккуратный поток уведомлений.

Частые ошибки

  • Не настроить группировку. Падение 50 инстансов превратится в 50 сообщений вместо одного.
  • Слишком короткий repeat_interval. Команду засыплет повторами одного и того же алерта.
  • Забыть про silence на деплой. Плановые работы поднимут лавину ложных алертов.

Итог

  • Alertmanager группирует, подавляет и маршрутизирует firing-алерты.
  • route + receivers определяют, куда уходит каждый алерт.
  • Silence глушит алерты на обслуживание, inhibition подавляет производные.
Проверьте себя
1. За что отвечает Alertmanager, а не Prometheus?
AЗа сбор метрик
BЗа группировку, подавление и маршрутизацию уведомлений
CЗа хранение временных рядов
DЗа запуск экспортеров
2. Что делает группировка (group_by)?
AУдаляет алерты
BОбъединяет похожие алерты в одно уведомление
CУскоряет scrape
DШифрует уведомления
3. Зачем нужен silence?
AЧтобы удалить метрику
BЧтобы временно заглушить алерты по фильтру, например на время обслуживания
CЧтобы ускорить правила
DЧтобы поменять receiver навсегда