核心是cadvisor采集→prometheus存储→grafana可视化闭环:cadvisor监听8080端口暴露/metrics,prometheus通过static_configs抓取localhost:8080,grafana用container_cpu_usage_seconds_total等指标构建时间序列、状态统计与异常表格面板。

直接用 Grafana 搭容器监控大屏,核心是把 Docker 的运行指标“采上来、存得住、画得清”。关键不在组件堆得多,而在数据链路是否闭环:cAdvisor 采集 → Prometheus 存储 → Grafana 可视化。整个过程不依赖复杂插件,本地单机环境也能跑通。
确保指标源头可用
Docker 本身不直接暴露 Prometheus 兼容的 metrics,需借助 cAdvisor(Google 开发的容器监控代理)来补足。它默认监听 8080 端口,提供 /metrics 接口,内容是标准的 Prometheus 格式文本。启动方式很简单:
- 运行命令:
docker run -d --name=cadvisor -p 8080:8080 --privileged --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro google/cadvisor:latest - 验证是否就绪:浏览器访问 http://localhost:8080/metrics,能看到大量以 container_ 开头的指标,比如
container_cpu_usage_seconds_total、container_memory_usage_bytes - 注意权限:--privileged 和多 volume 挂载是必需的,否则 cAdvisor 无法读取底层容器统计信息
Prometheus 正确抓取容器指标
cAdvisor 只是数据源,Prometheus 才负责定时拉取并存储。在 prometheus.yml 中添加 job 即可:
- 配置示例:
scrape_configs: - job_name: 'cadvisor' static_configs: - targets: ['localhost:8080'] - 重启 Prometheus 后,访问 http://localhost:9090/targets,确认 cadvisor 状态为 UP
- 在 Graph 页面试查:
container_cpu_usage_seconds_total{container!="",image!=""},应返回多条时间序列;用sum by (container)(rate(container_cpu_usage_seconds_total[1m]))可算出各容器每秒 CPU 使用量
Grafana 面板设计贴合容器场景
不是所有图表都适合容器监控。重点突出动态性、对比性和异常感知:
- CPU / 内存趋势:用 Time series 图,开启 Stacking 模式,叠加显示所有容器的使用量,一眼看出资源分布和总量变化
-
容器数量与状态:Stat 面板 + Sparkline,查询
count by (state)(container_last_seen),实时反映 running/exited/stopped 容器数 -
高频异常定位:用 Table 面板,查询
container_status{state="exited"} == 1,配合排序和自动刷新,快速发现反复退出的容器 - 避免堆砌:单个面板只聚焦一个维度(如按 image、按 name、按 namespace),用变量(Variable)做下拉筛选,比硬编码 target 更灵活
补充建议提升实用性
大屏不只是好看,更要能辅助判断:
- 设置自动刷新(如 10s),确保数据实时滚动
- 加一条基准线:比如内存使用率 > 85% 标红,CPU 平均 > 1.5 核标黄,让阈值一目了然
- 导出常用面板为 JSON,团队内共享复用,避免重复配置
- 若用 Kubernetes,直接部署 kube-state-metrics + node-exporter,指标更全(如 Pod 生命周期、调度状态),但原理与上述一致











