抑制是指當某以此告警發出後,可以停止重複發送由此告警引發的其他告警的機制
比如,我現在有一台伺服器當機了,上面跑了很多中間件都設定了告警,那麼我将收到大量無用的告警資訊
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啟動