监控两台服务器上的容器状态
一、架构拓扑说明
服务器 A(监控机 / Server A):
运行组件:
Prometheus(数据存储与抓取)、Grafana(面板大屏)、cAdvisor(监控 A 机自身容器)、node-exporter(监控 A 机系统硬件)。
服务器 B(业务机 / Server B):
运行组件:无需安装 Prometheus 和 Grafana。
仅需安装:
cAdvisor(监控 B 机的容器)和node-exporter(可选,建议安装以监控 B 机的 CPU/内存/磁盘底座)。
二、服务器 B 上的部署要点
在服务器 B 上启动 cAdvisor 容器时,端口映射需要与单机部署有所区别:
端口绑定为
0.0.0.0:8080: 在单机部署时使用的是127.0.0.1:8080,但因为服务器 A 需要跨机器拉取数据,服务器 B 的端口必须暴露给局域网:Bash
docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/dev/disk/:/dev/disk:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ --privileged \ --device=/dev/kmsg \ --restart=always \ lagoudocker/cadvisor:latest配置阿里云安全组(关键安全项):
登录服务器 B 的阿里云安全组。
新增一条入方向规则:放行 TCP 协议的
28080端口。授权对象(来源 IP):切勿填
0.0.0.0/0。因为两台机器都在阿里云,如果处于同地域(Region),直接填服务器 A 的私网 IP(如172.24.23.73);如果跨地域,则填服务器 A 的公网 IP。
三、修改服务器 A 的 prometheus.yml
在服务器 A 的 Prometheus 配置文件中,将服务器 B 的目标地址加入抓取清单,并通过标签(Label)进行区分:
YAML
scrape_configs:
# 监控 Prometheus 服务端自身
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# 监控两台机器的 Docker 容器指标
- job_name: "cadvisor"
static_configs:
# 节点 1:监控服务器 A 自身容器
- targets: ["localhost:8080"]
labels:
instance_name: "aliyun-server-A"
env: "prod"
# 节点 2:通过内网 IP 监控服务器 B 的容器
- targets: ["<服务器B的私网IP>:8080"]
labels:
instance_name: "aliyun-server-B"
env: "prod"
# (建议)同时监控两台机器的系统硬件底座
- job_name: "node-exporter"
static_configs:
- targets: ["localhost:9100"]
labels:
instance_name: "aliyun-server-A"
- targets: ["<服务器B的私网IP>:9100"]
labels:
instance_name: "aliyun-server-B"
保存后执行热重载让配置生效:
Bash
curl -X POST http://localhost:9090/-/reload
四、这样架构的优势
极省资源:Prometheus 和 TSDB 数据库比较消耗内存和磁盘,业务机器 B 不需要分担这些存储和计算开销,保持了纯粹的业务运行环境。
统一视图:打开 Grafana 后,顶部下拉框可以直接在
aliyun-server-A和aliyun-server-B之间快速切换,或者在同一个大屏里同时观察两台机器上所有容器的吞吐量与资源使用率。
评论