用Prometheus监控Docker容器并实现大屏展示的核心是三步:采集(cAdvisor暴露指标)、存储查询(Prometheus拉取打标)、可视化(Grafana设计面板);关键在于链路稳定、延迟低、标签可读,需正确配置scrape_interval、rate函数、动态变量及告警联动。
用 prometheus 监控 docker 容器状态并实现实时大屏展示,核心在于三步:采集容器指标、存储与查询、可视化呈现。关键不是堆工具,而是让数据链路稳定、延迟低、标签可读。
1. 用 cAdvisor 暴露容器运行时指标
cAdvisor 是 Google 开发的开源容器监控代理,原生支持 Docker,能自动发现容器、采集 CPU、内存、网络、磁盘 I/O 等实时指标,并以 Prometheus 格式暴露(默认 http://localhost:8080/metrics)。
推荐直接以容器方式运行,自动挂载宿主机 cgroup 和 proc:
docker run -d \ --name=cadvisor \ --restart=always \ -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:v0.47.0
启动后访问 http://localhost:8080/metrics 可验证是否返回如 container_cpu_usage_seconds_total{container="cadvisor",...} 类型的指标。
2. 配置 Prometheus 主动拉取并打标
在 Prometheus 的 prometheus.yml 中添加 job,建议启用服务发现或静态配置,并为每台宿主机打上唯一标识(如 instance 或自定义 host 标签),方便大屏按节点下钻:
scrape_configs:
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor-host:8080']
labels:
host: 'prod-web-01'若多节点部署,可用 DNS SRV 或 Consul 实现自动发现;务必设置 scrape_interval: 15s(不建议低于 10s),兼顾实时性与性能压力。
3. Grafana 大屏设计要点
Grafana 是最常用的 Prometheus 可视化前端。搭建大屏时重点关注:
- 面板类型选对:容器 CPU/内存用「Time series」折线图(开「Stacking」看总量占比);容器数量变化用「Stat」+「Sparkline」;异常状态(如 OOMKilled)用「Alert list」或「State timeline」
-
查询写准:用
rate(container_cpu_usage_seconds_total[5m])算平均使用率,避免瞬时尖刺;内存用container_memory_usage_bytes而非 RSS,更反映实际占用 -
标签过滤要灵活:在 Dashboard 右上角加变量(如
host,container),用label_values(container_cpu_usage_seconds_total, container)动态生成下拉项 - 告警联动可选:配合 Alertmanager,在大屏顶部加一个「告警概览 Panel」,显示当前 firing 的容器级告警(如内存 >90% 持续 3 分钟)
4. 可选增强:补充业务维度与长期趋势
纯 cAdvisor 缺少业务语义(如“订单服务”“用户中心”)。建议:
- 在容器启动时通过
--label service=order-api打标,Prometheus 用relabel_configs提取为指标标签 - 用
container_last_seen判断容器是否已退出,避免僵尸数据干扰统计 - 对关键容器,额外部署轻量 Exporter(如
blackbox_exporter做 HTTP 健康探测),丰富状态维度 - 长期趋势分析可搭配 Thanos 或 VictoriaMetrics 替代本地 TSDB,支撑月级同比/环比图表
整套链路无需改应用代码,部署快、扩展性强。真正难点在于指标含义理解到位、查询不写错、大屏交互不卡顿——把每个 panel 的 query 放到 Prometheus 表达式浏览器里先跑通,再搬进 Grafana。











