在Linux环境下监控Docker容器的性能和健康状态,可以通过以下多维度方案实现:
一、基础命令工具 1. docker stats 实时监控
docker stats --all --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"
• 可添加--no-stream
获取单次快照
• 自定义输出字段:Container,CPUPerc,MemUsage,NetIO,BlockIO,MemPerc,PIDs
docker inspect --format='{{json .State.Health}}' <container>
二、原生监控方案 1. cAdvisor (Google开源)
docker run -d \
--name=cadvisor \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker:/var/lib/docker:ro \
-p 8080:8080 \
gcr.io/cadvisor/cadvisor:v0.47.0
• Web UI提供CPU/内存/网络/磁盘多维图表 • 支持Prometheus metrics端点
curl --unix-socket /var/run/docker.sock http://localhost/containers/<container-id>/stats?stream=false
三、企业级监控方案 1. Prometheus + Grafana 组合
# docker-compose监控套件示例
services:
prometheus:
image: prom/prometheus
ports: ["9090:9090"]
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
node_exporter:
image: prom/node-exporter
pid: "host"
grafana:
image: grafana/grafana
ports: ["3000:3000"]
四、健康检查策略 1. Dockerfile 内置检查
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/health || exit 1
#!/bin/bash
# 检查容器响应
if ! docker exec ${CONTAINER} curl -s localhost:8080/health; then
docker restart ${CONTAINER}
send_alert "Container ${CONTAINER} restarted"
fi
五、高级监控技巧 1. 网络性能分析
nsenter -t $(docker inspect -f '{{.State.Pid}}' <container>) -n iftop
docker run --rm -it \
-v /var/lib/docker:/var/lib/docker:ro \
alpine sh -c "apk add smartmontools && smartctl -a /dev/sda"
docker logs --since 5m <container> | grep -i 'error\|exception'
六、报警集成方案 1. Prometheus Alertmanager 配置示例
rules:
- alert: HighMemoryUsage
expr: container_memory_usage_bytes{name=~".+"} / container_spec_memory_limit_bytes > 0.9
for: 5m
labels:
severity: critical
annotations:
summary: "High memory usage on {{ $labels.name }}"
最佳实践建议: 1. 监控粒度控制:生产环境建议15s采集间隔 2. 指标保留策略:Prometheus建议配置2-4周数据保留 3. 资源开销:监控容器本身消耗应<5%主机资源 4. 日志轮转:配置logrotate防止监控日志膨胀
扩展方案: • 使用eBPF进行深度内核级监控 • 结合OpenTelemetry实现全链路追踪 • 考虑服务网格(如Istio)的集成监控能力
通过以上方案组合,可以实现从基础指标到业务级健康状态的完整监控体系。建议根据实际环境复杂度从cAdvisor+Prometheus基础方案开始,逐步扩展监控维度。