Alertmanager 告警路由与通知管理
Alertmanager 作为 Prometheus 监控体系中的告警处理组件,负责接收 Prometheus 发送来的警报,并进行去重、分组、静默(Silences)、抑制(Inhibition)以及向最终的接收器(如企业微信、钉钉、邮件、Webhook)发送通知。
1. 核心告警路由配置文件(alertmanager.yml)
以下是一个规范的 Alertmanager 配置,实现了告警去重、合并分组、静默、以及根据告警级别路由到不同接收器的机制:
global:
resolve_timeout: 5m # 告警解除后 5 分钟发送恢复通知
# 告警路由树
route:
group_by: ['alertname', 'cluster', 'service'] # 按这三个标签对告警进行合并打包
group_wait: 30s # 新建告警组后等待 30 秒,合并后续产生的同组告警
group_interval: 5m # 告警发生变化时,两次发送通知的间隔
repeat_interval: 12h # 重复发送未解决告警的间隔周期(防骚扰)
receiver: 'default-receiver' # 默认接收器
routes:
# 严重级别告警 (severity=critical) 直接发送至电话/短信/钉钉高优通道
- match:
severity: 'critical'
receiver: 'ops-critical-group'
# 轻微级别告警 (severity=warning) 发送至常规运维邮箱/IM群
- match:
severity: 'warning'
receiver: 'ops-warning-group'
receivers:
- name: 'default-receiver'
webhook_configs:
- url: 'http://dingtalk-webhook-adapter/send' # 钉钉群机器人适配器
- name: 'ops-critical-group'
email_configs:
- to: 'ops-manager@company.com'
send_resolved: true
webhook_configs:
- url: 'http://alert-phone-caller/api/call' # 电话语音告警接口
- name: 'ops-warning-group'
email_configs:
- to: 'ops-team@company.com'
send_resolved: true
2. 告警静默与抑制
告警静默 (Silences)
当进行计划内的服务器停机维护或割接时,为了防止产生海量垃圾告警骚扰,可以在 Alertmanager Web UI 中创建 Silence。
- 可以通过正则匹配(如
instance=~"prod-db-.*")静默特定批量的服务器。 - 设定静默的有效期,在维护结束后自动解除。
告警抑制 (Inhibition)
告警抑制能够防止出现因为底层基础设施崩溃导致的“告警风暴”。
- 典型场景:当某台服务器的
NodeDown(宕机)告警触发时,显然其上的所有服务(如NginxDown、MySQLDown)都会失效。 - 解决办法:在配置文件中声明抑制规则。如果存在
NodeDown告警,则自动忽略来自同一台服务器的所有应用级告警。
inhibit_rules:
- source_match:
alertname: 'NodeDown'
target_match_re:
alertname: '.*Down'
equal: ['instance'] # 确保只有当 instance 标签相同时,抑制才生效