抑制是指当某以此告警发出后,可以停止重复发送由此告警引发的其他告警的机制
比如,我现在有一台服务器宕机了,上面跑了很多中间件都设置了告警,那么我将收到大量无用的告警信息
1. 新增告警规则(检查docker状态)
#这里我们新增一条告警规则,检查docker服务状态的
cat >> /etc/prometheus/rules/node_up.yml <<EOF
- name: docker
rules:
- alert: docker
expr: node_systemd_unit_state{name="docker.service",state="active"} == 0
for: 10s
labels:
severity: 2 #这里设置一个告警级别为2
team: docker
annotations:
summary: "{{ \$labels.instance }} 已停止运行超过 15s"
description: hello world
EOF
#重载配置
systemctl restart prometheus
2. alertmanager添加告警抑制(3台节点)
cat >> /etc/alertmanager/alertmanager.yml <<EOF
inhibit_rules: #告警抑制
- source_match:
severity: '1' #前一个告警规则的标签
target_match:
severity: '2' #后面触发告警规则的标签
equal:
- instance
EOF
#重载服务
systemctl restart alertmanager
当我们前面已经有一个告警了,假设主机宕机了(我这里模拟为node-exporter已经挂了)
那么后面的告警规则在触发的时候会先翻一下前面的已经触发的告警,去查看是否有severity: '1'的标签
如果有了,那么去对比instance标签,是不是当前这台主机,如果是的话,
那么去查看一下自己准备发的告警里标签是否存在severity: '2',如果存在,就不告警了
3.测试告警
#我们先测试一下docker告警是否正常
systemctl stop docker
告警正常,我们尝试把node-exporter服务停止,后docker的告警将会被抑制
systemctl stop node-exporter
可以看到docker的告警停止了,由node-exporter开始告警,我们再将node-exporter启动
上图中可见,我恢复了node-exporter服务后,发送了info的恢复邮件的同时 docker的评估告警也开始了
以上仅是个人观点,如果有误请指出谢谢╰( ̄ω ̄o)