Prometheus 采集 Docker 指标
为什么用 Prometheus 监控 Docker
Docker 提供了丰富的运行时指标(CPU、内存、网络、磁盘 I/O 等),但 docker stats 只能看当前状态,无法做历史趋势分析、告警和多维度聚合。Prometheus 作为云原生监控的事实标准,天然支持 Docker 指标采集。
采集架构
Docker Host → cAdvisor / Docker Daemon Metrics API → Prometheus → Grafana
方式一:通过 cAdvisor 采集
cAdvisor(Container Advisor)是 Google 开源的工具,直接集成在 kubelet 中,也可以独立运行。
docker run -d \
--name=cadvisor \
--restart=always \
-p 8080:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
gcr.io/cadvisor/cadvisor:latest
访问 http://host:8080/metrics 即可看到容器指标。
方式二:直接使用 Docker Engine Metrics
Docker 19.03+ 内置了 Prometheus 端点,需要在 daemon.json 中启用:
{
"metrics-addr": "0.0.0.0:9323",
"experimental": true
}
重启后访问 http://host:9323/metrics。
Prometheus 配置
scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['localhost:9323']
- job_name: 'cadvisor'
static_configs:
- targets: ['localhost:8080']
关键指标
| 类别 | 指标示例 | 说明 |
|---|---|---|
| CPU | container_cpu_usage_seconds_total |
CPU 累计使用秒数 |
| 内存 | container_memory_usage_bytes |
当前内存使用量 |
| 网络 | container_network_receive_bytes_total |
网络接收字节数 |
| 磁盘 | container_fs_usage_bytes |
文件系统使用量 |
面试要点
- cAdvisor vs Engine Metrics:cAdvisor 指标更丰富(细分到每个容器),Engine Metrics 更轻量
- 数据保留:Prometheus 本地存储有保留期限制,生产环境建议配合 Thanos 或 VictoriaMetrics
- 告警规则:推荐配置容器 OOM、CPU 持续飙高、磁盘空间不足等告警
- 标签优化:用
container_label_*做精细化分组查询
面试官可能追问:容器级别的监控和宿主机级别有什么区别?监控数据的精度如何保证?
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容