Docker 容器实时性能监控方案
在搬瓦工 VPS 上使用 Docker 部署应用后,需要实时监控各容器的资源使用情况。本文将介绍使用 Docker 内置命令、cAdvisor、Prometheus 和 Grafana 构建完整的容器监控方案。
一、Docker 内置监控命令
1.1 docker stats
Docker 自带的实时资源统计命令:
# 查看所有容器的实时资源使用
docker stats
# 查看指定容器
docker stats container_name
# 不持续刷新,只输出一次
docker stats --no-stream
# 自定义输出格式
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"
1.2 docker inspect
# 查看容器详细配置
docker inspect container_name
# 查看资源限制
docker inspect --format='{{.HostConfig.Memory}}' container_name
docker inspect --format='{{.HostConfig.NanoCpus}}' container_name
二、部署 cAdvisor
cAdvisor(Container Advisor)是 Google 开源的容器资源监控工具,可以自动采集所有容器的性能指标:
docker run -d \
--name cadvisor \
--restart unless-stopped \
-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 \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:latest
部署后访问 http://你的IP:8080 即可查看 cAdvisor 自带的 Web 界面,包含每个容器的 CPU、内存、网络和文件系统使用图表。
三、完整监控栈部署
使用 Docker Compose 一键部署 cAdvisor + Prometheus + Grafana:
mkdir -p /opt/docker-monitoring
cat > /opt/docker-monitoring/docker-compose.yml <<'EOF'
version: '3.8'
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
privileged: true
devices:
- /dev/kmsg
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.retention.time=30d'
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=your_secure_password
volumes:
prometheus-data:
grafana-data:
EOF
Prometheus 配置
cat > /opt/docker-monitoring/prometheus.yml <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
EOF
cd /opt/docker-monitoring
docker compose up -d
四、核心容器指标
4.1 CPU 指标
# 各容器 CPU 使用率
rate(container_cpu_usage_seconds_total{name!=""}[5m]) * 100
# CPU 使用率按容器排序(Top 10)
topk(10, rate(container_cpu_usage_seconds_total{name!=""}[5m]) * 100)
# 容器 CPU 限制使用比
rate(container_cpu_usage_seconds_total{name!=""}[5m]) / container_spec_cpu_quota * 1e5 * 100
4.2 内存指标
# 容器内存使用量
container_memory_usage_bytes{name!=""}
# 容器内存使用率(相对于限制)
container_memory_usage_bytes{name!=""} / container_spec_memory_limit_bytes{name!=""} * 100
# 缓存内存
container_memory_cache{name!=""}
4.3 网络指标
# 容器入站流量速率
rate(container_network_receive_bytes_total{name!=""}[5m])
# 容器出站流量速率
rate(container_network_transmit_bytes_total{name!=""}[5m])
# 网络错误率
rate(container_network_receive_errors_total{name!=""}[5m])
4.4 磁盘 IO 指标
# 磁盘读取速率
rate(container_fs_reads_bytes_total{name!=""}[5m])
# 磁盘写入速率
rate(container_fs_writes_bytes_total{name!=""}[5m])
# 文件系统使用量
container_fs_usage_bytes{name!=""}
五、Grafana 仪表板
在 Grafana 中添加 Prometheus 数据源后,导入 Docker 监控仪表板:
- 仪表板 ID
893:Docker and System Monitoring,综合展示系统和容器指标。 - 仪表板 ID
14282:cAdvisor Exporter,专注容器资源监控。 - 仪表板 ID
10619:Docker Container & Host Metrics。
六、容器告警规则
cat > /opt/docker-monitoring/container_alerts.yml <<'EOF'
groups:
- name: docker_alerts
rules:
- alert: ContainerDown
expr: absent(container_last_seen{name!=""})
for: 1m
labels:
severity: critical
annotations:
summary: "容器已停止: {{ $labels.name }}"
- alert: ContainerHighCpu
expr: rate(container_cpu_usage_seconds_total{name!=""}[5m]) * 100 > 80
for: 5m
labels:
severity: warning
annotations:
summary: "容器 CPU 过高: {{ $labels.name }}"
description: "CPU 使用率 {{ $value | printf \"%.1f\" }}%"
- alert: ContainerHighMemory
expr: container_memory_usage_bytes{name!=""} / container_spec_memory_limit_bytes{name!=""} * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "容器内存过高: {{ $labels.name }}"
- alert: ContainerRestarting
expr: increase(container_restart_count[15m]) > 3
for: 0m
labels:
severity: warning
annotations:
summary: "容器频繁重启: {{ $labels.name }}"
EOF
七、Docker 资源限制
在 Docker Compose 中为容器设置资源限制,防止单个容器耗尽 VPS 资源:
services:
myapp:
image: myapp:latest
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
八、docker system 命令
# 查看 Docker 磁盘使用概况
docker system df
# 详细显示
docker system df -v
# 清理未使用的资源
docker system prune -a --volumes
# 查看 Docker 事件流
docker events --since="2h"
九、常见问题
cAdvisor 占用过多资源
可以降低采集频率来减少资源消耗,添加启动参数 --housekeeping_interval=30s。
指标名称中 name 为空
查询时添加 {name!=""} 过滤器排除系统级别的 cgroup 指标,只保留具名容器的数据。
总结
Docker 容器监控是运维搬瓦工 VPS 的重要环节。使用 cAdvisor + Prometheus + Grafana 的组合可以实现专业级的容器监控。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。