Короткий ответ
Alertmanager — отдельный компонент, который принимает уже сработавшие алерты от одного или нескольких серверов Prometheus и занимается их дальнейшей судьбой: группировкой, подавлением дублей, задержкой (inhibition), маршрутизацией в нужный канал (Slack, email, PagerDuty) и управлением периодами "тишины" (silences).
Как это работает подробнее
сам Prometheus только вычисляет alerting rules (PromQL-условия) и, когда условие истинно дольше заданного for, отправляет алерт по HTTP в Alertmanager. Дальше Alertmanager группирует похожие алерты в одно уведомление, подавляет повторные отправки на период repeat_interval и решает, куда маршрутизировать алерт согласно дереву route.
Пример кода
config.yaml
# Фрагмент alerting rule в Prometheus
groups:
- name: example
rules:
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05
for: 10m
labels:
severity: criticalЧто использовать на практике
- Практика. разделение ответственности позволяет нескольким инстансам Prometheus отправлять алерты в один общий Alertmanager (или кластер из нескольких для отказоустойчивости), а также централизованно настраивать "тишину" на время планового обслуживания без изменения правил в самом Prometheus.
- Практика. Когда условие
exprостаётся истинным дольше10m, Prometheus переводит алерт в статусfiringи отправляет его в Alertmanager; в UI Alertmanager (/#/alerts) этот алерт появится с меткойseverity=criticalи будет маршрутизирован согласно настроенномуroute.
Подводные камни
- Частые ошибки. путать
alerting rulesв Prometheus (когда алерт должен сработать) с конфигурацией маршрутизации в Alertmanager (куда и как он доставляется) — это две разные системы с разными конфигами; забывать поднять отдельныйsilenceперед плановыми работами, из-за чего дежурный получает лавину ожидаемых и бесполезных уведомлений.