资源监控与统计
容器资源监控是运维基础,下面介绍 Docker 内置统计与 cgroups 分析。
docker stats
实时统计
Bash
# 查看所有容器统计
docker stats
# 输出
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
abc123 web 0.50% 128MiB / 512MiB 25% 1.2MB / 500KB 10MB / 5MB 45
def456 db 2.30% 384MiB / 1GiB 37% 500KB / 1.2MB 50MB / 20MB 120
指定容器
Bash
# 查看指定容器
docker stats web db
# 单次输出(不实时)
docker stats --no-stream
# 输出 JSON 格式
docker stats --no-stream --format "{{json .}}"
统计字段
| 字段 | 说明 |
|---|---|
| CPU % | CPU 使用百分比 |
| MEM USAGE / LIMIT | 内存使用 / 限制 |
| MEM % | 内存使用百分比 |
| NET I/O | 网络输入/输出 |
| BLOCK I/O | 磁盘输入/输出 |
| PIDS | 进程数 |
格式化输出
Bash
# 自定义格式
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
# 仅输出特定字段
docker stats --format "{{.Name}}: CPU {{.CPUPerc}}, MEM {{.MemPerc}}"
# 输出 CSV
docker stats --no-stream --format "{{.Name}},{{.CPUPerc}},{{.MemUsage}}" > stats.csv
cgroups 分析
查看 cgroups 信息
Bash
# cgroups v2
cat /sys/fs/cgroup/docker/<container_id>/memory.current
cat /sys/fs/cgroup/docker/<container_id>/cpu.stat
# cgroups v1
cat /sys/fs/cgroup/memory/docker/<container_id>/memory.usage_in_bytes
cat /sys/fs/cgroup/cpu/docker/<container_id>/cpu.stat
进程统计
Bash
# 查看容器进程
docker top my-app
# 输出
PID USER TIME COMMAND
1234 root 0:10 node server.js
1235 root 0:05 worker
历史数据
Bash
# docker stats 仅实时,不保存历史
# 需配合外部监控系统
# Prometheus + cAdvisor
docker run -d \
--name=cadvisor \
-p 8080:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker:/var/lib/docker:ro \
gcr.io/cadvisor/cadvisor:latest
# 访问 http://localhost:8080
告警配置
Bash
# 脚本监控 + 告警
#!/bin/bash
THRESHOLD=80
docker stats --no-stream --format "{{.MemPerc}}" | while read line; do
usage=$(echo $line | tr -d '%')
if (( $(echo "$usage > $THRESHOLD" | bc -l) )); then
echo "WARNING: Memory usage > $THRESHOLD%"
# 发送告警通知
fi
done
要点总结
docker stats实时查看容器 CPU、内存、网络、磁盘 IO--no-stream单次输出,--format自定义格式- cgroups 提供底层资源统计,适合深入分析
- cAdvisor 集成 Prometheus 实现历史数据和可视化
- 生产环境建议配合外部监控系统(Prometheus + Grafana)
📝 发现内容有误?点击此处直接编辑