На главную
DevOps и серверы
Правила оповещений Prometheus
Правила оповещений Prometheus: сервер не отвечает, кончается диск и память, ошибки 5xx, медленные ответы, истекающий сертификат, упавший юнит, давно не было бэкапа — с порогами, задержкой и понятным текстом. И конфиг Alertmanager к ним.
Какие правила нужны
К ней добавится имя правила
alerts.yml
groups:
- name: infra
rules:
- alert: InstanceDown
expr: 'up == 0'
for: 5m
labels:
severity: critical
team: ops
annotations:
summary: 'Цель {{ $labels.instance }} не отвечает'
description: 'Prometheus не может снять метрики с {{ $labels.job }} на {{ $labels.instance }} уже {{ $value }}.'
- alert: Memory
expr: 'node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10'
for: 10m
labels:
severity: warning
team: ops
annotations:
summary: 'Память на {{ $labels.instance }} на исходе'
description: 'Доступно {{ $value | printf "%.1f" }} % памяти.'
- alert: Disk
expr: 'node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"} * 100 < 10'
for: 10m
labels:
severity: critical
team: ops
annotations:
summary: 'Диск {{ $labels.mountpoint }} на {{ $labels.instance }} заканчивается'
description: 'Свободно {{ $value | printf "%.1f" }} %.'
- alert: CertExpiry
expr: 'probe_ssl_earliest_cert_expiry - time() < 14 * 24 * 3600'
for: 1h
labels:
severity: warning
team: ops
annotations:
summary: 'Сертификат {{ $labels.instance }} скоро истечёт'
description: 'Осталось {{ $value | humanizeDuration }}.'
- alert: SystemdUnit
expr: 'node_systemd_unit_state{state="failed"} == 1'
for: 5m
labels:
severity: critical
team: ops
annotations:
summary: 'Юнит {{ $labels.name }} на {{ $labels.instance }} в состоянии failed'
description: 'Посмотрите journalctl -u {{ $labels.name }}.'
Alertmanager
Например адрес топика ntfy
alertmanager.yml
route:
receiver: default
group_by: ['alertname', 'instance']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
- matchers: [severity="critical"]
receiver: urgent
repeat_interval: 1h
receivers:
- name: default
# добавьте получателя
- name: urgent
# добавьте получателя
inhibit_rules:
- source_matchers: [severity="critical"]
target_matchers: [severity="warning"]
equal: ['instance']
Правило без задержки (for) срабатывает от одного случайного замера. Правило без инструкции будят человека, который не знает, что делать, — поэтому у каждого есть текст и ссылка.