Архитектура
Alertmanager должен оставаться источником alert truth. Nerve не заменяет labels, silences, grouping или resolved notifications. Интеграционная точка простая: receiver отправляет короткий alert summary в Nerve, а оператор решает, запускать ли ограниченное действие.
Маршрутизируйте только page-worthy alerts
route:
receiver: default
routes:
- matchers:
- severity="critical"
receiver: nerve-phone
receivers:
- name: nerve-phone
webhook_configs:
- url: http://127.0.0.1:8099/alertmanager
send_resolved: true
Action mapping
Не привязывайте каждый alert к исправлению. Маппинг нужен только для стабильных, хорошо понятных сигналов, где runbook уже проверен.
Payload для телефона
[{{ .Status }}] {{ .CommonLabels.alertname }}
severity={{ .CommonLabels.severity }}
instance={{ .CommonLabels.instance }}
runbook={{ .CommonAnnotations.runbook_url }}
Когда action не нужен
Не добавляйте remediation button к неизвестным симптомам, security alerts, риску потери данных или массовому отказу сразу многих сервисов. Хорошее действие уменьшает рутину, но не прячет incident от человека.
Audit fields
Для каждого подтвержденного действия пишите Alertmanager fingerprint, action name, target host, pipe, approver identity, start time, exit code и короткий output. Это сильно помогает при postmortem.
Тестовый alert перед production
Перед включением боевого receiver отправьте synthetic alert с отдельным label вроде env=staging. Так можно проверить шаблон сообщения, resolved notification и ссылку на runbook без шума в production escalation.
Checklist безопасного remediation
- В Alertmanager receiver хранится sender DSN, не agent token.
- Agent работает на host или network segment, где действительно разрешены действия.
- Actions вызывают маленькие wrapper scripts.
- Read-only diagnostics идут перед mutation.
- Resolved notifications остаются включенными для critical alerts.