在Linux环境下实时监控Docker容器运行状态,可以通过多种工具和方法实现。以下是详细的解决方案:
docker stats [容器名/ID] # 实时监控所有/指定容器
--no-stream
获取单次快照docker top <容器ID> # 查看容器内进程树
docker inspect -f '{{.State.Status}}' <容器ID> # 获取精确状态
bash
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=8080:8080 \
--name=cadvisor \
google/cadvisor:latest
# 获取实时事件流
curl --unix-socket /var/run/docker.sock \
"http:/v1.41/containers/<ID>/stats?stream=true"
bash
glances --enable-docker
bash
docker run -d --name=netdata \
--pid=host \
--net=host \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
netdata/netdata
指标类型 | 监控重点 | 异常阈值参考 |
---|---|---|
CPU使用率 | 持续>80% | 容器CPU限制的90% |
内存使用 | OOM风险 | 接近limit值的95% |
磁盘IO | 持续高延迟 | await > 50ms |
网络带宽 | 饱和状态 | 接近接口带宽上限 |
重启次数 | 异常退出 | 1小时内>3次 |
rules:
- alert: HighContainerCPU
expr: sum(rate(container_cpu_usage_seconds_total[1m])) by (name) > 0.8
for: 5m
labels:
severity: warning
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/ || exit 1
# 集中式日志收集
docker run --log-driver=fluentd \
--log-opt fluentd-address=host:24224 \
--log-opt tag="docker.{{.Name}}"
docker update --cpus 0.5 --memory 512M cadvisor
- kube-state-metrics - Rancher的监控体系
timeout 5 docker exec <ID> echo alive || echo dead
docker inspect <ID> | jq '.[0].HostConfig'
以上方案可根据实际环境组合使用,生产环境推荐采用Prometheus+Grafana的完整监控栈,配合自动化告警机制。对于开发测试环境,使用docker stats配合日志监控即可满足基本需求。