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)
配置步骤
1. 准备相同的 Alertmanager 配置文件
所有实例使用完全一致的
alertmanager.yml
(路由、接收者等配置):global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'web.hook' receivers: - name: 'web.hook' webhook_configs: - url: 'http://example.com/alert'
2. 启动集群节点
假设部署 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
3. Prometheus 配置对接集群
在 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