17.7.6 告警维护与静默机制
告警维护与静默机制#
告警维护与静默机制用于在变更窗口内抑制噪音但不破坏监控体系。核心能力包括 Silence(静默) 与 Inhibit(抑制),前者完全停止通知,后者保留告警状态但压制下游告警的通知。
机制原理草图#
安装与工具准备(amtool)#
# 以二进制方式安装 amtool(与 alertmanager 版本一致)
wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
tar -xf alertmanager-0.27.0.linux-amd64.tar.gz
sudo cp alertmanager-0.27.0.linux-amd64/amtool /usr/local/bin/
amtool --version
Silence 创建与管理(命令示例)#
# 1) 创建静默(作用 2 小时)
# 说明:--match 指定标签,--duration 设定时长,--comment 记录原因
amtool --alertmanager.url=http://127.0.0.1:9093 \
silence add \
--match='env="prod"' \
--match='job=~"mysql|nginx"' \
--match='instance=~"10.0.1.(10|11):9100"' \
--duration=2h \
--comment="发布窗口,工单#CHG-20240101"
# 2) 列出静默并查看状态
amtool --alertmanager.url=http://127.0.0.1:9093 silence list
# 3) 过期/生效过滤
amtool --alertmanager.url=http://127.0.0.1:9093 silence list --active
amtool --alertmanager.url=http://127.0.0.1:9093 silence list --expired
# 4) 解除静默(用列表中的 silence ID)
amtool --alertmanager.url=http://127.0.0.1:9093 silence expire a1b2c3d4e5f6
Alertmanager 配置示例(抑制策略)#
# /etc/alertmanager/alertmanager.yml
inhibit_rules:
- source_match:
alertname: InstanceDown
target_match_re:
alertname: "CPUHigh|MemoryHigh|DiskFull"
equal: ["instance", "job", "env"]
route:
group_by: ["alertname", "job", "env"]
group_wait: 30s
group_interval: 5m
repeat_interval: 2h
receiver: "ops-email"
receivers:
- name: "ops-email"
email_configs:
- to: "ops@example.com"
API 方式创建静默(适合 CI/CD)#
# 通过 REST API 创建静默
curl -X POST http://127.0.0.1:9093/api/v2/silences \
-H 'Content-Type: application/json' \
-d '{
"matchers":[
{"name":"env","value":"prod","isRegex":false},
{"name":"job","value":"mysql|nginx","isRegex":true}
],
"startsAt":"2024-01-01T10:00:00Z",
"endsAt":"2024-01-01T12:00:00Z",
"createdBy":"jenkins",
"comment":"发布流水线自动静默"
}'
维护窗口管理流程(示例)#
# 维护开始前自动静默(示例脚本片段)
export AM_URL="http://127.0.0.1:9093"
export DURATION="90m"
amtool --alertmanager.url=$AM_URL silence add \
--match='env="prod"' \
--match='service="payment"' \
--duration=$DURATION \
--comment="支付服务变更窗口"
# 维护后验证告警是否恢复(查询活动告警)
amtool --alertmanager.url=$AM_URL alert query --severity=critical
常见排错与验证#
- 静默未生效
- 排查:标签不匹配或大小写不一致
- 验证命令:
bash amtool --alertmanager.url=http://127.0.0.1:9093 alert query --active - 静默范围过大
- 排查:正则过宽
- 建议:用 instance 或 service 精确匹配 - 静默过期后仍未恢复通知
- 排查:抑制规则仍在生效
- 验证:
bash amtool --alertmanager.url=http://127.0.0.1:9093 status | grep -i inhibit -A3
练习#
- 用
amtool为env=prod的nginx静默 30 分钟,设置注释并截图保存静默 ID。 - 添加一个抑制规则:当
ServiceDown触发时抑制LatencyHigh与ErrorRateHigh。 - 使用 API 创建静默并用
amtool silence list --active验证其生效。