1,问题
在前一篇博客中有讲到说使用alertmanager,即便设置了repeat_interval,但还是收到了两条告警,且间隔时间是for标签的时间
alertmanager片段示例:
routes:
- receiver: message
match:
xxxx:xxxx
repeat_interval: 3600s
continue: true
receivers:
- name: message
webhook_configs:
- send_resolved: true
url: http://localhost:8080/message/yyyy
prometheus 规则片段示例:
rules:
- alert: alertName
expr: up == 1
for: 5m
labels:
xxxx:xxxx
2,可能的原因
1,send_resloved = true
这个标签表示告警恢复后,会发送通知,已经正常了。(就是这个标签的锅)
2,没有group_by标签。
后边查证,没有group_by标签,默认在一组里边,所以也没影响。
3,repeat_interval设置的是s不是h。
这个就更离谱了,Prometheus的duration里边有常用的时间单位,当然包含s。
3,结果
1,试验了一下,是send_resloved=true引起的。
至于收到两条告警,猜想原因是第二条告警是告警恢复通知,但是由于routes里边配置的都是web_hook,触发到业务接口,都当成告警处理了,所以其实第二个通知的内容可能是告警已经恢复的通知,而不是告警,所以这里可能是业务逻辑的bug,但还好,在设置send_resloved = false后,就没有收到第二条消息了,ps,send_resloved默认就是false的,我就是手残,没事儿设置这个,测试还专门提了bug。服气。
2,关于repeat_interval的理解。
如果repeat_interval:1h,那么这个小时内,如果有产生多个告警,那么只会通知一次,一条消息。