Alertmanager 故障排查
4.1 排查思路
Alertmanager 故障建议按链路排查:
- Alertmanager 服务是否正常启动。
- Alertmanager 配置是否正确加载。
- Prometheus 是否真正把告警发到了 Alertmanager。
- route 是否命中正确 receiver。
- 告警是否被 silence 或 inhibit。
- receiver 是否成功把通知发到外部系统。
- HA 集群节点是否正常同步。
常用入口:
http://alertmanager.example.com:9093
http://alertmanager.example.com:9093/#/alerts
http://alertmanager.example.com:9093/#/silences
4.2 服务启动失败
排查:
systemctl status alertmanager # 查看 Alertmanager 服务状态
journalctl -u alertmanager -n 300 --no-pager # 查看最近启动日志
amtool check-config /etc/alertmanager/alertmanager.yml # 校验 Alertmanager 配置
常见原因:
- YAML 格式错误。
- route / receiver 配置不合法。
- Webhook URL 写错但语法仍然通过。
- 配置文件权限错误。
- 端口
9093被占用。
端口检查:
ss -lntp | grep 9093 # 检查 9093 端口是否被占用
4.3 Prometheus 没把告警发过来
排查:
curl http://localhost:9090/api/v1/alerts # 查看 Prometheus 当前告警
curl http://localhost:9093/api/v2/alerts # 查看 Alertmanager 当前告警
检查 Prometheus 配置:
alerting: # Prometheus 告警发送配置
alertmanagers: # Alertmanager 实例列表
- static_configs: # 使用静态地址配置
- targets: # Alertmanager 地址列表
- localhost:9093 # 本机 Alertmanager 地址
常见原因:
- Prometheus 未配置
alerting.alertmanagers。 - Prometheus 侧地址写错。
- Prometheus 到 Alertmanager 网络不通。
- Prometheus 当前并没有 firing 告警。
- Prometheus 规则未触发或
for条件未满足。
4.4 Alertmanager 收到告警但没通知
排查方向:
- route 是否命中了正确 receiver。
- receiver 配置是否完整。
- 外部通知地址是否可访问。
- 告警是否被 silence。
- 告警是否被 inhibit。
检查 API:
curl http://localhost:9093/api/v2/alerts # 查看 Alertmanager 当前告警
curl http://localhost:9093/api/v2/status # 查看 Alertmanager 当前配置和状态
常见原因:
- 根路由
receiver写错。 - 子路由
matchers不匹配。 - Webhook URL 无法访问。
- 邮件或机器人配置缺失。
- 告警被静默或抑制。
4.5 路由不生效
现象:
- 所有告警都落到默认 receiver。
critical和warning没有分开。- 团队路由没有命中。
检查配置重点:
route: # 根路由
receiver: default-webhook # 默认接收器
routes: # 子路由列表
- matchers: # 第一条子路由匹配条件
- severity="critical" # 匹配 critical 告警
receiver: oncall-webhook # 命中后发送到 oncall receiver
常见原因:
matchers标签名和 Prometheus 告警标签不一致。team、severity、service标签未在告警规则中设置。- 子路由顺序不合理,前面的规则已经吃掉了告警。
建议:
- 先确认 Prometheus 告警里实际有哪些标签。
- route 命中逻辑按“最具体优先,默认兜底”组织。
4.6 静默不生效
排查:
amtool --alertmanager.url=http://localhost:9093 silence query # 查看当前静默列表
curl http://localhost:9093/api/v2/silences # 查看静默 API 返回
常见原因:
- silence 匹配条件和告警标签不一致。
- 静默时间窗口已过期。
- 查询的是错误的 Alertmanager 节点。
- HA 集群同步异常,静默没有传播。
4.7 抑制不生效
检查配置:
inhibit_rules: # 抑制规则列表
- source_matchers: # 触发抑制的源告警
- alertname="NodeDown" # 节点不可达告警
target_matchers: # 被抑制的目标告警
- severity=~"warning|critical" # 抑制 warning 和 critical
equal: # 只有这些标签相同才抑制
- instance # 同一 instance 才生效
常见原因:
- 源告警并未 firing。
equal指定的标签值不同。instance、cluster等标签没有统一。- 目标告警标签条件不满足。
4.8 告警重复过多
常见原因:
group_by过细,导致无法合并。repeat_interval太短。- 两个 Prometheus 实例重复发送,但路由分组不合理。
- HA 集群配置不完整。
检查配置:
route: # 根路由
group_by: [alertname, cluster, service] # 告警分组标签
group_wait: 30s # 首次等待时间
group_interval: 5m # 同组新增告警发送间隔
repeat_interval: 4h # 未恢复告警重复通知间隔
处理建议:
- 不要把
instance盲目放进group_by。 - 调大
repeat_interval。 - Prometheus HA 场景下统一标签规划。
4.9 Webhook 通知失败
排查:
nc -l 5001 # 临时监听 Webhook 请求
curl http://localhost:9093/api/v2/status # 查看 Alertmanager 状态
journalctl -u alertmanager -n 200 --no-pager # 查看最近日志
常见原因:
- Webhook 服务未启动。
- URL 路径错误。
- DNS 解析异常。
- 防火墙或安全组未放行。
- 对方服务响应过慢或返回 5xx。
4.10 HA 集群不同步
现象:
- 一个节点有 silence,另一个没有。
- 集群内通知去重异常。
- 节点页面显示状态不一致。
检查:
ss -lntp | grep 9094 # 检查 9094 集群通信端口
curl http://localhost:9093/api/v2/status # 查看集群状态
常见原因:
--cluster.listen-address未配置。--cluster.peer配置错误。- 9094 端口未放通。
- 节点之间主机名或 IP 无法互通。
4.11 常用诊断命令
systemctl status alertmanager # 查看 Alertmanager 服务状态
journalctl -u alertmanager -n 300 --no-pager # 查看 Alertmanager 日志
amtool check-config /etc/alertmanager/alertmanager.yml # 校验 Alertmanager 配置
curl http://localhost:9093/api/v2/status # 查看 Alertmanager 状态
curl http://localhost:9093/api/v2/alerts # 查看 Alertmanager 当前告警
curl http://localhost:9093/api/v2/silences # 查看 Alertmanager 当前静默
amtool --alertmanager.url=http://localhost:9093 silence query # 查看静默列表
ss -lntp | grep 9093 # 检查 Web 端口监听状态
ss -lntp | grep 9094 # 检查集群通信端口监听状态