Docker Compose 整合性能监控系统需统一编排 cAdvisor、Node Exporter、Prometheus 和 Grafana,确保网络互通、标签清晰、配置可维护;cAdvisor 监控容器指标并挂载宿主机路径,Node Exporter 监控系统层指标并映射路径,中间件 exporter 配置连接与认证;所有服务加入自定义网络 monitor_net 并通过 labels 注入 role、env 等语义信息;Prometheus 用 relabel_configs 清洗和标准化标签,Grafana 利用标签实现动态筛选与聚合展示。

用 Docker Compose 整合第三方性能监控指标采集系统,核心是把采集器(如 cAdvisor、Node Exporter)、时序数据库(Prometheus)和可视化平台(Grafana)统一编排,让它们网络互通、标签清晰、配置可维护。
选对采集器并按角色部署
不同层级的指标需要不同采集器,不能只靠一个工具包打天下:
-
cAdvisor:专盯容器运行时指标(CPU、内存、网络、磁盘IO),必须挂载宿主机关键路径(
/proc、/sys、/var/lib/docker),端口统一暴露为8080/metrics -
Node Exporter:专注宿主机系统层指标(负载、磁盘空间、内核参数),启动时加
--path.procfs=/host/proc等参数映射路径,暴露端口固定为9100/metrics -
mysqld_exporter 或 redis_exporter:针对具体中间件,需配置连接地址和认证信息,端口建议统一设为
9104/metrics、9121/metrics等便于识别
在 docker-compose.yml 中打标与组网
所有服务必须在同一自定义网络中,并通过 labels 注入语义信息,否则 Prometheus 抓取后无法区分来源:
- 给
cadvisor加labels: { role: "container", host: "web-server-01" } - 给
node-exporter加labels: { role: "host", env: "prod" } - 给
mysqld_exporter加labels: { service: "mysql", cluster: "primary" } - 定义全局网络
monitor_net,所有服务都加入它,确保 Prometheus 能用容器名(如http://cadvisor:8080/metrics)稳定访问
配置 Prometheus 主动拉取多目标
prometheus.yml 不要拆成多个文件,一份配置管理全部 job,重点靠 relabel_configs 清洗标签:
- 每个 job 对应一类采集器,例如
job_name: "cadvisor"下用static_configs列出所有 cAdvisor 实例 - 用
source_labels: [__address__]+regex: "(.+)-(.+)"提取主机标识,写入instance标签 - 用
replacement: "$1"从容器名提取环境名,注入env标签,方便 Grafana 按环境筛选 - 加
action: labeldrop删除冲突的默认标签(如重复的instance),避免查询歧义
对接 Grafana 实现按标签聚合展示
Grafana 不是简单连上 Prometheus 就行,得利用标签做分组和过滤:
- 数据源配置里启用
Direct模式,避免代理转发引入延迟 - 仪表盘变量设置为
label_values(instance)或label_values(env),让用户下拉切换目标 - 查询语句示例:
sum(container_cpu_usage_seconds_total{env="prod"}) by (instance, job),一眼看出各实例 CPU 总消耗 - 为不同采集器预置 dashboard JSON 模板(如 cAdvisor 官方模板 ID 1860),导入后自动适配标签维度
不复杂但容易忽略。关键不在组件数量,而在标签一致性和配置收敛性。



















