Перейти к основному содержимому

Практикум Prometheus — Alertmanager и Grafana Alerting

Инженеру

Практикум, шаг 6 из 9. Назад — экспортёры. Дальше — Loki, Tempo, Mimir.


Два контура алертинга

КонтурГде правилаКуда летят уведомления
Prometheus + Alertmanagerrules/*.yml в PrometheusAlertmanager → email, Slack, Telegram
Grafana Unified AlertingUI Grafana или provisioningContact points, notification policies

Оба могут сосуществовать. Классический cloud-native путь — Prometheus rules → Alertmanager.

Документация — Alertmanager, Tutorial alerting.


Alerting rule в Prometheus

rules/alerts.yml:

groups:
- name: host
rules:
- alert: HostDown
expr: up{job="node"} == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Node {{ $labels.instance }} down"
description: "Target unreachable more than 2 minutes."

- alert: DiskSpaceLow
expr: |
(1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"}
/ node_filesystem_size_bytes) * 100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: "Disk >90% on {{ $labels.instance }}"

Подключение в prometheus.yml:

rule_files:
- /etc/prometheus/rules/*.yml

alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']

Проверка:

promtool check rules rules/alerts.yml

В UI Prometheus — вкладка Alerts (Pending → Firing после for).


Alertmanager в Compose

alertmanager:
image: prom/alertmanager:v0.27.0
ports:
- "9093:9093"
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro

alertmanager.yml — минимальная маршрутизация:

route:
receiver: default
group_by: ['alertname', 'job']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h

receivers:
- name: default
webhook_configs:
- url: 'http://127.0.0.1:5001/' # тестовый webhook или Alertmanager Bot

UI Alertmanager — http://localhost:9093 — silences, grouping, status.


Inhibition и grouping

Grouping — одно письмо на пачку алертов HostDown по кластеру.

Inhibition — если HostDown, подавить DiskSpaceLow на том же instance:

inhibit_rules:
- source_matchers:
- alertname = HostDown
target_matchers:
- alertname = DiskSpaceLow
equal: ['instance']

Grafana Unified Alerting

Alerting → Alert rules → New alert rule

  1. Query A — PromQL, например avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.1.
  2. Condition — порог.
  3. Contact point — Slack, email, Telegram (настройте в Contact points).
  4. Notification policy — маршрут по label severity.

Плюс Grafana — алерты по Loki и Tempo, не только Prometheus.

Минус дублирования — держите один источник правды для prod (либо Prometheus rules, либо Grafana, с документированным исключением).


Практическое упражнение

  1. Остановите node_exporter: docker compose stop node_exporter.
  2. Дождитесь Pending → Firing для HostDown.
  3. Откройте Alertmanager — группа алертов.
  4. Создайте Silence на 1 час для maintenance.
  5. Запустите exporter снова — алерт Resolved.

Runbook в annotations

annotations:
summary: "High error rate on {{ $labels.job }}"
runbook_url: "https://wiki.example.com/runbooks/high-5xx"

Grafana может показывать ссылку в notification template.


Чек-лист

  • promtool check rules без ошибок
  • Alertmanager в Targets Prometheus (status → alertmanagers)
  • Тестовый алерт переходит в Firing
  • Silence работает в UI Alertmanager

Дальше — логи, трейсы, Mimir.


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").