Prometheus监控Docker容器
Prometheus 监控 Docker 容器
Docker Daemon 指标暴露
进入到 docker 配置文件,编辑 daemon.json
cd /etc/docker/
vim daemon.json在文件中添加 json 格式串内添加
"metrics-addr": "0.0.0.0:9323"
保存退出
:wq重载配置文件,重启 docker 使配置文件生效
# Linux 命令行操作
sudo systemctl daemon-reload
sudo systemctl restart docker更多关于
daemon.json查看
使用 cAdvisor:容器资源采集专家
Google 开源的cAdvisor(Container Advisor)专为容器设计,可自动收集容器的 CPU、内存、网络及文件系统使用情况。部署方式极简:
我这里使用宿主机 8281 端口来映射容器的 8080 端口
docker run -d --volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8281:8080 \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
google/cadvisor:latest--volume=/:/rootfs:ro- 作用:将宿主机的根目录映射到容器的
/rootfs。 - 目的:让 cAdvisor 能够查看宿主机上所有文件系统的使用情况(如磁盘空间占用)。
ro表示只读,确保安全。
- 作用:将宿主机的根目录映射到容器的
--volume=/var/run:/var/run:ro- 作用:映射宿主机的运行状态目录。
- 目的:主要用于通过
/var/run/docker.sock与 Docker 守护进程通信,获取容器列表、元数据和状态。
--volume=/sys:/sys:ro- 作用:映射宿主机的
/sys虚拟文件系统。 - 目的:这是最关键的映射。 cAdvisor 通过访问
/sys/fs/cgroup来获取各容器的 CPU、内存、磁盘 I/O 等实时性能指标。
- 作用:映射宿主机的
--volume=/var/lib/docker/:/var/lib/docker:ro- 作用:映射 Docker 数据的存储路径。
- 目的:让 cAdvisor 能够读取 Docker 镜像层和容器可写层的大小信息,从而计算具体的磁盘镜像占用。
--volume=/dev/disk/:/dev/disk:ro- 作用:映射物理磁盘设备信息。
- 目的:使 cAdvisor 能够识别宿主机的物理磁盘分区信息,从而准确统计特定物理硬盘的 I/O 指标。
- 特权模式:在启用 SELinux 或特定内核限制的系统中,可能需要添加
--privileged标志或--device=/dev/kmsg以确保能读取系统日志
cAdvisor 会为每个容器生成带 container_name 标签的指标(如 container_cpu_usage_seconds_total),并通过 http://<host>:8080/metrics 暴露数据。
访问与集成
- Web UI:容器启动后,可通过浏览器访问
http://<宿主机IP>:8281查看图形化界面。 - 指标 API:Prometheus 采集路径默认为
http://<宿主机IP>:8281/metrics。 - Kubernetes:在 K8s 环境中,cAdvisor 曾内置在 Kubelet 中(监听 4194 端口),但在较新版本(v1.12+)中已被移除或不再直接对外暴露端口,通常建议通过 DaemonSet 独立部署或通过 Kubelet API 访问指标