
类型:虚拟化技术
简介:基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。
随着Docker在网站部署、微服务架构和企业应用中的普及,越来越多的业务开始运行在容器环境中。
相比传统服务器部署方式,Docker可以快速创建和管理应用环境,但随着服务器中运行的容器数量增加,运维人员也面临新的问题:如何快速了解每个容器的资源使用情况?如何定位CPU占用过高、内存不足或网络异常的问题?
虽然Docker自带docker stats命令可以查看实时资源占用,但它无法保存历史数据,也无法生成长期趋势分析。
因此,在生产环境中通常会结合cAdvisor、Prometheus和Grafana搭建完整的容器监控系统:
- cAdvisor:负责采集Docker容器资源指标;
- Prometheus:负责存储和查询监控数据;
- Grafana:负责生成可视化监控面板。
本文将介绍如何部署Docker容器监控环境,实现对容器CPU、内存、网络流量以及运行状态的持续监控,适用于个人服务器、企业应用和Docker化网站部署场景。
Docker容器监控架构
Docker容器监控整体流程如下:
Docker容器
↓
cAdvisor
↓
Prometheus
↓
Grafana
各组件作用:
| 组件 | 作用 |
|---|---|
| Docker | 运行应用容器 |
| cAdvisor | 采集容器资源指标 |
| Prometheus | 保存和查询监控数据 |
| Grafana | 展示监控图表 |
通过这套架构,可以实现:
- 查看每个容器CPU使用情况;
- 分析内存占用变化;
- 监控网络流量;
- 查看容器运行状态;
- 根据历史数据定位性能问题。
部署环境准备
本文测试环境:
| 软件 | 版本 |
|---|---|
| 操作系统 | Ubuntu 22.04 |
| Docker | 29.x |
| cAdvisor | v0.57.0 |
| Prometheus | 最新稳定版本 |
| Grafana | 最新稳定版本 |
服务器建议:
- CPU:2核以上;
- 内存:4GB以上;
- 已安装Docker环境。
安装Docker环境
如果服务器尚未安装Docker,可以执行:
apt update
安装Docker:
apt install docker.io -y
启动Docker并设置开机启动:
systemctl enable --now docker
查看Docker状态:
systemctl status docker
查看版本:
docker --version
如果正常返回版本信息,说明Docker安装成功。
创建测试Docker容器
为了验证监控效果,先运行一个测试容器。
启动Nginx容器:
docker run -d \
--name nginx-demo \
--restart unless-stopped \
-p 18080:80 \
nginx:alpine
查看运行中的容器:
docker ps
输出示例:
CONTAINER ID IMAGE
xxxxxx nginx:alpine
此时服务器已经运行一个Docker服务,可以通过cAdvisor采集资源数据。
安装并部署cAdvisor
cAdvisor是Google推出的容器监控工具,可以自动收集Docker容器的:
- CPU使用率;
- 内存占用;
- 文件系统使用情况;
- 网络流量;
- 容器运行状态。
拉取cAdvisor镜像
执行:
docker pull gcr.io/cadvisor/cadvisor:v0.57.0
启动cAdvisor容器
执行:
docker run -d \
--name cadvisor \
--restart unless-stopped \
-p 18081:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:v0.57.0
参数说明:
| 参数 | 作用 |
|---|---|
| -p 18081:8080 | 映射访问端口 |
| /rootfs | 读取宿主机文件系统 |
| /sys | 获取系统指标 |
| /var/lib/docker | 获取Docker容器数据 |
| privileged | 提供必要权限 |
验证cAdvisor运行状态
查看容器:
docker ps
查看日志:
docker logs cadvisor
测试指标接口:
curl http://127.0.0.1:18081/metrics
如果返回大量监控指标,说明cAdvisor部署成功。
访问:
http://服务器IP:18081
即可查看cAdvisor监控页面。
配置Prometheus采集Docker数据
Prometheus需要配置cAdvisor作为数据来源。
编辑Prometheus配置文件:
vim /etc/prometheus/prometheus.yml
添加:
scrape_configs:
- job_name: cadvisor
static_configs:
- targets:
- localhost:18081
保存后检查配置:
promtool check config /etc/prometheus/prometheus.yml
如果返回:
SUCCESS
说明配置正确。
重启Prometheus:
systemctl restart prometheus
查看Prometheus监控目标
打开Prometheus页面:
http://服务器IP:9090
进入:
Status → Targets
如果看到:
cadvisor UP
说明Prometheus已经成功采集Docker数据。
常用Docker监控PromQL查询
Prometheus通过PromQL查询容器指标。
查看运行中的容器数量
count(container_last_seen{name!=""})
查看容器CPU使用率
sum by(name)(
rate(container_cpu_usage_seconds_total{name!=""}[5m])
)*100
可以查看不同容器CPU消耗情况。
查看容器内存使用
container_memory_usage_bytes{name!=""}
用于分析:
- 内存增长;
- 内存泄漏;
- 高占用容器。
查看容器网络流量
接收流量:
sum by(name)(
rate(container_network_receive_bytes_total{name!=""}[5m])
)
发送流量:
sum by(name)(
rate(container_network_transmit_bytes_total{name!=""}[5m])
)
使用Grafana创建Docker监控面板
Grafana可以将Prometheus中的数据转换为可视化图表。
安装Grafana后:
- 登录Grafana后台;
- 添加Prometheus数据源;
- 导入Docker监控Dashboard;
- 查看容器运行状态。
常见监控指标:
- CPU使用率;
- 内存占用;
- 网络流量;
- 容器数量;
- 容器运行时间。
通过Grafana,可以更加直观地观察服务器和容器长期变化趋势。
Docker监控常见问题
cAdvisor启动失败
可能原因:
- 端口被占用;
- Docker权限不足;
- 参数配置错误。
检查端口:
ss -lntp | grep 18081
查看日志:
docker logs cadvisor
Prometheus显示cAdvisor为DOWN
检查cAdvisor是否正常:
curl http://127.0.0.1:18081/metrics
如果无法返回数据:
docker restart cadvisor
重新启动。
Grafana显示大量无用容器数据
Prometheus默认可能采集系统cgroup数据。
查询时增加过滤:
name!=""
即可只显示实际运行的Docker容器。
Docker容器监控的应用场景
Docker监控适用于:
网站服务器
监控:
- Web容器CPU;
- 数据库容器内存;
- 网络访问压力。
SaaS应用
分析:
- 服务负载;
- 容器性能;
- 资源趋势。
AI应用部署
监控:
- 模型服务资源占用;
- 推理服务压力;
- GPU相关资源变化。

