先把当时的情况摆出来。一套五节点的集群,某个中间件挂掉后群里收到五条一模一样的告警,只是 instance 标签不同,Alertmanager 用的是默认路由配置。

排查方向其实有限,先把可能性排一排。规则没有按集群维度聚合,每台各算一条。另一种情况是group_by 里带了 instance,等于不聚合。

少数情况下是重复通知间隔太短,未恢复的告警反复发。不容易想到的是,没有配抑制规则,主告警和衍生告警一起发。

上来先确认告警条数与标签差异

curl -s http://10.0.0.41:9093/api/v2/alerts | grep -c 'order-cluster'

然后把 group_by 改成按服务和集群聚合

grep -n 'group_by' /etc/alertmanager/alertmanager.yml

随后加抑制规则压掉衍生告警

amtool check-config /etc/alertmanager/alertmanager.yml

等前面都确认过,再把重复通知间隔调到四小时

grep -n 'repeat_interval' /etc/alertmanager/alertmanager.yml

怎么算真的好了,看的是同一批现象。同一次故障只收到一条汇总告警,恢复时也只发一条,群里不再出现五连发。

提醒一点。group_by 的维度决定通知粒度,instance 放进去就等于不聚合;聚合之后要在描述里带上受影响的实例列表。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189