在Linux系统上运行容器化服务时,单节点的监控方案容易出现单点故障,导致监控数据中断,无法及时感知容器异常。高可用的容器监控架构可以解决这一问题,保障监控服务的持续可用。
核心组件选型
我们选用以下组件搭建高可用监控架构:
- Prometheus:负责采集容器和宿主机的监控指标,支持多实例部署实现高可用
- Grafana:负责监控数据的可视化展示,支持多实例负载均衡
- Alertmanager:负责告警规则触发和告警通知,支持集群部署
- Node Exporter:采集Linux宿主机的基础指标
- cAdvisor:采集容器的运行指标
基础环境准备
准备两台配置相同的Linux服务器,假设IP分别为192.168.0.10和192.168.0.11,安装Docker和Docker Compose,确保两台服务器之间网络互通。
部署高可用Prometheus集群
Prometheus本身不支持原生的集群模式,我们可以通过联邦采集或者多实例采集相同目标的方式实现高可用,这里采用多实例采集相同目标的方案。
配置Prometheus实例
在192.168.0.10上创建Prometheus配置文件prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node_exporter"
static_configs:
- targets: ["192.168.0.10:9100", "192.168.0.11:9100"]
- job_name: "cadvisor"
static_configs:
- targets: ["192.168.0.10:8080", "192.168.0.11:8080"]
- job_name: "alertmanager"
static_configs:
- targets: ["192.168.0.10:9093", "192.168.0.11:9093"]
在192.168.0.11上创建相同的prometheus.yml配置文件,内容一致即可。
启动Prometheus实例
两台服务器分别执行以下Docker命令启动Prometheus:
# 192.168.0.10执行 docker run -d --name prometheus -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:latest --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus # 192.168.0.11执行 docker run -d --name prometheus -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:latest --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus
部署Node Exporter和cAdvisor
两台服务器都需要部署Node Exporter和cAdvisor,用于采集宿主机和容器指标。
启动Node Exporter
docker run -d --name node_exporter -p 9100:9100 -v /proc:/host/proc:ro -v /sys:/host/sys:ro -v /:/rootfs:ro prom/node-exporter:latest
启动cAdvisor
docker run -d --name cadvisor -p 8080:8080 -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro gcr.io/cadvisor/cadvisor:latest
部署高可用Alertmanager集群
Alertmanager支持原生的集群模式,通过Gossip协议实现节点间状态同步。
配置Alertmanager
创建alertmanager.yml配置文件,两台服务器使用相同配置:
global:
resolve_timeout: 5m
route:
group_by: ["alertname"]
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: "webhook"
receivers:
- name: "webhook"
webhook_configs:
- url: "http://127.0.0.1:5000/alert"
send_resolved: true
cluster:
peer: "192.168.0.10:9094,192.168.0.11:9094"
启动Alertmanager实例
192.168.0.10执行:
docker run -d --name alertmanager -p 9093:9093 -p 9094:9094 -v /path/to/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager:latest --config.file=/etc/alertmanager/alertmanager.yml --cluster.listen-address=192.168.0.10:9094
192.168.0.11执行:
docker run -d --name alertmanager -p 9093:9093 -p 9094:9094 -v /path/to/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager:latest --config.file=/etc/alertmanager/alertmanager.yml --cluster.listen-address=192.168.0.11:9094
部署高可用Grafana
Grafana通过连接多个Prometheus实例实现数据源高可用,前端可以通过负载均衡分发请求到多个Grafana实例。
启动Grafana实例
两台服务器分别执行:
docker run -d --name grafana -p 3000:3000 -v grafana-storage:/var/lib/grafana grafana/grafana:latest
配置Grafana数据源
登录任意一台Grafana控制台,添加Prometheus数据源,地址填写两个Prometheus实例的地址,格式为http://192.168.0.10:9090,http://192.168.0.11:9090,Grafana会自动尝试连接可用的实例。
验证高可用效果
可以手动停止其中一台服务器的Prometheus实例,观察Grafana是否还能正常展示监控数据;停止其中一台Alertmanager实例,触发告警规则观察是否能正常收到告警通知,验证高可用架构是否生效。
注意事项
- 生产环境建议为Prometheus配置远程存储,避免本地存储数据丢失
- 可以在两台服务器前端添加Nginx做负载均衡,提升访问稳定性
- 定期备份Prometheus的配置文件和Grafana的仪表盘配置
PrometheusGrafanacontainer_monitoringhigh_availability修改时间:2026-07-15 01:00:40