Alertmanager 从 v0.21.0 版本开始引入了内置的集群功能,通过 gossip 协议实现多个实例间的状态同步,无需依赖外部共享存储。以下是具体的集群配置方案:
集群相关的主要启动参数:
--cluster.listen-address
:集群通信监听地址(如 0.0.0.0:9094
)
--cluster.peer
:初始集群节点地址(其他实例的集群地址)
--cluster.advertise-address
:向集群宣告的地址(默认使用 listen-address)
--cluster.gossip-interval
:gossip 协议的消息间隔(默认 200ms)
所有实例使用完全一致的 alertmanager.yml
(路由、接收者等配置):
global:resolve_timeout: 5mroute:group_by: ['alertname']group_wait: 10sgroup_interval: 10srepeat_interval: 1hreceiver: 'web.hook'
receivers:
- name: 'web.hook'webhook_configs:- url: 'http://example.com/alert'
假设部署 3 个节点,分别在 192.168.1.10、192.168.1.11、192.168.1.12 服务器上:
节点 1 启动命令:
./alertmanager \--config.file=alertmanager.yml \--web.listen-address=0.0.0.0:9093 \--cluster.listen-address=0.0.0.0:9094 \--cluster.peer=192.168.1.11:9094 \--cluster.peer=192.168.1.12:9094
节点 2 启动命令:
./alertmanager \--config.file=alertmanager.yml \--web.listen-address=0.0.0.0:9093 \--cluster.listen-address=0.0.0.0:9094 \--cluster.peer=192.168.1.10:9094 \--cluster.peer=192.168.1.12:9094
节点 3 启动命令:
./alertmanager \--config.file=alertmanager.yml \--web.listen-address=0.0.0.0:9093 \--cluster.listen-address=0.0.0.0:9094 \--cluster.peer=192.168.1.10:9094 \--cluster.peer=192.168.1.11:9094
在 Prometheus 配置中添加所有 Alertmanager 节点:
alerting:alertmanagers:- static_configs:- targets:- 192.168.1.10:9093- 192.168.1.11:9093- 192.168.1.12:9093
通过访问任意节点的 /-/healthy
和 /-/ready
端点检查健康状态:
curl http://192.168.1.10:9093/-/healthy
curl http://192.168.1.10:9093/-/ready
查看集群成员信息(需要启用 debug 端点):
# 启动时添加 --web.enable-debug-endpoints
curl http://192.168.1.10:9093/debug/cluster