Promethues 告警触发流程 告警收敛: 分组 抑制 静默
什么是告警收敛?
在对节点或服务的日常监控中,收到的警报太多,如一下就几十封,或者很多不必要的邮件发来,容易导致人很麻木,这样时间久了,遇到比较严重的警报,我们也会放松警惕性。
面对这种情况,alertmanager 收敛可很好解决这个问题,就是当Prometheus成功的把一条告警发给了Alertmanager,而Alertmanager并不是简简单单的直接发送出去,而是合理做一些控制,这样就不会导致告警信息过多,重要告警被淹没。
分组(group):将类似性质的警报分类为单个通知,同类告警聚合帮助运维排查问题
抑制(Inhibition):当警报发出后,停止重复发送由此警报引发的其他警报
静默(Silences):是一种简单的特定时间静音提醒的机制(时间段内,根据规则,不发警报)
分组:
分组(group): 将类似性质的警报合并为单个通知
优势:
假设有一大堆关于MySQL的告警,但是希望在分析问题时能够针对不同的实例进行,所以可以针对不同实例进行分组。每一个告警都会被分往不同实例分组中去,每一个分组最后都会合成一个消息发送给接收者。
所以最后运维人员收到的是一封封邮件,而每一封邮件都是关于一个实例的告警。通过这种方式有效的减少了告警消息数量。
示例:假设MySQL A产生了一个报警,另外一台MySQL B,这台MySQL挂掉了,监控系统检测到IO线程和SQL也挂了。通过ID进行分组,不同的实例分配到不同的分组,最后运维将会收到两条告警消息,一条是关于MySQL A CPU过高的告警;另外一条是关于MySQL B挂掉的告警消息。
group_by: [‘alertname‘] # 以标签作为分组依据 group_wait: 10s # 分组报警等待时间 group_interval: 10s # 发送组告警间隔时间 repeat_interval: 1h # 重复告警发送间隔时间
抑制 inhibition:
当警报发出后,停止重复发送由此警报引发的其他警报,可以消除冗余告警
优势:假设有一台主机挂掉了,上面运行着MySQL的服务,这个时候主机挂掉和MySQL挂掉的两条告警到达Alertmanager的顺序可能不一样,运维人员接收的告警顺序也可能不一样。如果先收到MySQL服务挂掉的告警,排查问题的思路可能就往别的方向走了,但是实际上这不是最根本的原因,所以我们可以通过抑制,将主机挂掉的告警把这主机上面MySQL服务挂掉告警抑制掉,最后只收到主机挂掉的告警。这样能够把冗余信息消除掉,最后得到故障发生最本质的原因。
示例:假设MySQL服务器A上面运行着MySQL服务,当这台服务器突然宕机时候,这两条告警都会出来,但是你配置一条抑制规则,抑制掉MySQL的告警,最后收到服务器挂掉的告警。
inhibit_rules: - source_match: # 当此告警发生,其他的告警被抑制 severity: ‘critical‘ target_match: # 被抑制的对象 severity: ‘warning‘ equal: [‘id‘, ‘instance‘]
配置文件:vim alertmanager.yml # inhibit_rules标记:降低告警收敛,减少报警,发送关键报警 inhibit_rules: # source_match: 匹配当前告警发生后其他告警抑制掉 - source_match: # severity: 指定告警级别 severity: 'critical' # target_match: 抑制告警 target_match: # severity: 指定抑制告警级别 severity: 'warning' # equal: 只有包含指定标签才可成立规则 equal: ['alertname', 'dev', 'instance']
静默 silences:
是一种简单的特定时间静音的机制
优势:假设你有一堆分别关于MySQL实例1、2、3的告警,如果服务器要升级维护,不希望这个时间段收到关于实例1的告警,可以先设置这个时间段告警静默,就能不再收到关于这台实例的告警,但是你仍然可以收到其他实例的告警,通过这种方式你可以阻止系统发送一些可以预期的告警。
示例:假设要在MySQL A上面跑一个批处理任务,这个批处理任务消耗系统资源比较大,会触发这些告警。同时你的系统中还有一台MySQL B的服务器,这个是对外提供服务的,你不希望把它的报警给静默掉,所以可以配置一条静默规则,把MySQL A告警给静默掉,最后就收不到关于MySQL A的告警,同时其他服务不会被影响到
# 静默在 alertmanager 的 web界面 silence 里面配置。
选择 create silence 创建一个新的静默配置
在 start 与 end 中填写静默的时间段
在 name 中给 silence 取名
在 Value 中 填写需要静默的实例(例如172.16.214.141:9100)
# 配置完成后在静默的时间端就看不到此实例的报警了
1、创建静默
2、填入开始结束时间,填写标签名称,保存
3、查看创建静默
延时 Delay
系统发生故障产生告警,每分钟发送一条告警消息,这样的告警信息十分令人崩溃。Alertmanager提供第一个参数是repeat interval,可以将重复的告警以更大频率发送,但是只有这个参数会带来两个的问题。
问题一:第一个问题是告警不能及时收到。假设当前发送一条告警,下一次告警在一个小时之后,但在这一个小时之内系统产生了一条告警,这时告警无法被及时发出去。所以alertmanager提供了第二个参数group inteval,让报警能够及时的发送出去。
问题二:当故障发生时,告警条件一个个被满足,到达Alertmanager的顺序也分先后,所以在最开始的时候可能收到多个消息。Alertmanager提供了第三个参数叫做group wait,在一个分组收到第一条报警消息之后,通过等到group wait,把故障最开始发生时候产生告警收敛掉,最后作为一条消息发送出来。
共 0 条评论