先把当时的情况摆出来。一套五节点的集群,某个中间件挂掉后群里收到五条一模一样的告警,只是 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 放进去就等于不聚合;聚合之后要在描述里带上受影响的实例列表。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
