Alertmanager 集群是什么
Alertmanager 的高可用靠 gossip 集群实现:多个实例组成一个集群,通过默认 9094 端口同步静默与通知去重状态,实例之间不需要共享存储。所有实例同时工作,前面挂负载均衡承接 Prometheus 的推送;通知由选主实例统一发出,因此同一条告警不会因为集群里有多个实例而被重复通知。
基本信息
| 集群端口 | 默认 9094,由 --cluster.listen-address 指定 |
|---|---|
| 关键参数 | --cluster.listen-address、--cluster.peer、--cluster.advertise-address |
| 同步内容 | 静默、通知日志(去重依据) |
| 前置条件 | 集群端口互通,各实例配置版本一致 |
| 权限要求 | 进程启动参数与防火墙放行 |
典型使用场景
- 消除单点:避免单实例故障期间完全收不到告警
- 无损升级:滚动重启各实例期间仍有人负责发通知
- 多机房部署:各机房各放一个实例,就近接收推送
- 静默共享:任一实例创建的静默在全集群生效
- 通知去重:同一条告警只发一次,不因多实例而重复打扰
运维要点
- 各实例配置文件必须整组同步发布,否则通知行为随请求落点漂移
- 集群端口要在实例之间全通,丢包会造成状态同步延迟甚至集群分裂
- 负载均衡按请求分发,不要做会话粘滞,避免流量与通知集中在一台
- 升级时逐台重启,并观察成员是否重新加入集群
- 用启动日志确认成员列表与状态同步正常,再继续下一台
集群启动参数
集群启动参数
alertmanager \
--config.file=/etc/alertmanager/alertmanager.yml \
--storage.path=/var/lib/alertmanager \
--cluster.listen-address=0.0.0.0:9094 \
--cluster.peer=am-2.example.com:9094 \
--cluster.peer=am-3.example.com:9094
# 成员是否互相可见,看启动日志里的集群成员列表
# 验证静默全集群生效:在一台上建静默,去另一台查询常见问题
| 现象 | 原因 | 处理方向 |
|---|---|---|
| 通知重复 | 集群端口不通,实例各自为政 | 放通 9094 并确认成员列表 |
| 静默只在一台生效 | gossip 未同步或配置版本不一致 | 先测连通性再统一配置 |
| 升级后行为变化 | 滚动过程中配置版本不一致 | 整组同步发布并在维护窗口执行 |
| 状态同步慢 | 网络抖动或实例负载过高 | 检查网络质量与实例资源 |
集群内通知由选主实例统一发出,静默与抑制状态经 gossip 同步,这样既保证同一条告警不会重复打扰,也避免静默只在某一台上生效。