Prometheus 依赖 cAdvisor 或 docker-exporter 等导出器采集 Docker 容器指标,cAdvisor 因原生支持、自动发现及覆盖 CPU/内存/网络/磁盘等全维度指标而被推荐;docker-exporter 则适用于低权限场景,但指标较精简。

要监控 Docker 实例,Prometheus 本身不直接采集容器指标,必须借助专门的导出器(exporter)把 Docker 运行时数据暴露为 HTTP metrics 接口,再由 Prometheus 定期抓取。核心路径很清晰:Docker → cAdvisor 或 docker-exporter → Prometheus → Grafana(可选)。
下面分三块讲清楚实操要点,不绕弯、不堆概念。
首选方案:用 cAdvisor 监控所有容器(推荐)
cAdvisor 是 Google 开源的容器资源探针,原生支持 Docker,能自动发现并持续采集每个容器的 CPU、内存、网络、磁盘 I/O、进程数等实时指标,且部署极简。
-
启动 cAdvisor 容器(在被监控主机上执行):
docker run -d \ --name=cadvisor \ --restart=always \ --privileged \ -p 8080:8080 \ -v /:/rootfs:ro \ -v /var/run:/var/run:rw \ -v /sys:/sys:ro \ -v /var/lib/docker/:/var/lib/docker:ro \ -v /dev/disk/:/dev/disk:ro \ gcr.io/cadvisor/cadvisor:v0.47.2
注意:
--privileged和多挂载卷是必需的,否则无法读取 cgroups 和容器运行时数据。 -
在 Prometheus 的
prometheus.yml中添加 job:scrape_configs: - job_name: 'cadvisor' static_configs: - targets: ['localhost:8080']重启 Prometheus 后,访问
http://<prometheus-ip>:9090/targets确认cadvisor处于 UP 状态。 -
常用 PromQL 示例:
- 查看某容器 CPU 使用率(1分钟平均):
rate(container_cpu_usage_seconds_total{container!="",image!=""}[1m]) - 查看内存使用量(字节):
container_memory_usage_bytes{container!="",image!=""} - 查看容器运行状态:
container_last_seen{container!="",image!=""}
- 查看某容器 CPU 使用率(1分钟平均):
补充方案:用 docker-exporter(轻量替代)
如果你不想启用 --privileged 模式,或仅需基础容器列表与状态,可用 docker-exporter(非官方但广泛使用):
-
启动命令(需挂载 Docker socket):
docker run -d \ --name=docker-exporter \ -p 9323:9323 \ -v /var/run/docker.sock:/var/run/docker.sock \ martinlindhe/docker-exporter
-
Prometheus 配置:
-
job_name: 'docker' static_configs:
- targets: ['localhost:9323']
它暴露的指标较精简(如 docker_container_status, docker_container_memory_usage),适合低权限环境,但不包含细粒度 I/O 或进程统计。
关键配置提醒:别漏掉这两点
时间同步必须一致
Prometheus、cAdvisor、被监控主机三者系统时间偏差超过 5 秒,会导致指标时间戳错乱甚至丢数。建议统一启用systemd-timesyncd或chrony。-
Docker daemon 要开启 metrics API(可选但有用)
编辑/etc/docker/daemon.json,添加:{ "metrics-addr": "127.0.0.1:9322", "experimental": true }然后
sudo systemctl restart docker。Prometheus 可额外抓取http://localhost:9322/metrics获取 daemon 层指标(如镜像数量、活跃容器数、构建缓存等)。
不复杂但容易忽略。


















