问题描述:在解析Prometheus推送的告警信息时,使用fingerprint作为唯一标识,但发现居然存在重复推送,即:已经恢复的告警信息再次进入firing状态。
解析
当已恢复的告警再次进入firing状态时,Alertmanager不会将其视为一个全新的告警实例,并且其fingerprint也不会变为新的。
以下是关于此问题的详细解释:
1、告警的fingerprint:
fingerprint是基于告警的标签(labels)和其他属性计算得出的唯一标识符。它用于在Alertmanager中标识和跟踪告警。
只要告警的标签和其他相关属性没有变化,其fingerprint就会保持不变。
2、告警的恢复与重新触发:
当告警从firing状态变为resolved状态时,表示该告警已经恢复。然而,如果触发该告警的条件再次满足,告警可能会重新进入firing状态。
在这种情况下,由于告警的标签和其他属性没有变化,因此其fingerprint仍然保持不变。
3、Alertmanager对告警的处理:
当Alertmanager接收到告警时,它会根据告警的fingerprint进行去重和分组。具有相同fingerprint的告警被视为同一个告警的不同实例或重复告警。
如果告警从resolved状态重新进入firing状态,并且距离上次发送通知的时间超过了配置的repeat_interval,Alertmanager可能会再次发送通知。但是,这并不意味着它将其视为一个全新的告警实例,而只是重新触发了针对该告警的通知。
总结:
当已恢复的告警再次进入firing状态时,其fingerprint不会变为新的。Alertmanager会根据该告警的fingerprint将其识别为之前已经处理过的告警的重新触发,并根据配置进行相应的处理(如发送通知)。
归纳起来,告警的fingerprint是基于其标签和其他属性计算得出的唯一标识符,只要这些属性没有变化,其fingerprint就会保持不变。因此,当已恢复的告警再次进入firing状态时,其fingerprint不会变为新的,用这个的小伙伴们多注意这个问题