插件窝 干货文章 Linux上的Docker容器监控:如何实时监测容器的运行状态?

Linux上的Docker容器监控:如何实时监测容器的运行状态?

Docker 监控 容器 bash 799    来源:    2025-04-14

在Linux环境下实时监控Docker容器运行状态,可以通过多种工具和方法实现。以下是详细的解决方案:

一、基础命令工具

  1. docker stats
docker stats [容器名/ID]  # 实时监控所有/指定容器
  • 显示:CPU%、内存使用率、内存限制、网络IO、块IO
  • 静默模式:--no-stream 获取单次快照
  1. docker top
docker top <容器ID>  # 查看容器内进程树
  1. docker inspect
docker inspect -f '{{.State.Status}}' <容器ID>  # 获取精确状态

二、高级监控方案

1. cAdvisor + Prometheus + Grafana(推荐组合)

  • cAdvisor(容器指标采集): 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
  • Prometheus(配置示例): ```yaml scrape_configs:
    • job_name: cadvisor static_configs:
      • targets: ['cadvisor:8080'] ```
  • Grafana:导入Docker监控仪表板(如ID 193)

2. 原生Docker API监控

# 获取实时事件流
curl --unix-socket /var/run/docker.sock \
  "http:/v1.41/containers/<ID>/stats?stream=true"

3. 轻量级替代方案

  • Glances(带Docker插件): bash glances --enable-docker
  • Netdatabash 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次

四、自动化告警实现

  1. Prometheus Alertmanager 配置示例:
rules:
- alert: HighContainerCPU
  expr: sum(rate(container_cpu_usage_seconds_total[1m])) by (name) > 0.8
  for: 5m
  labels:
    severity: warning
  1. Docker健康检查集成
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}}"

六、性能优化建议

  1. 限制监控工具资源使用:
docker update --cpus 0.5 --memory 512M cadvisor
  1. 对于Swarm/K8s集群,建议使用:

- kube-state-metrics - Rancher的监控体系

常见问题排查

  1. 容器假死检测
timeout 5 docker exec <ID> echo alive || echo dead
  1. 资源限制检查
docker inspect <ID> | jq '.[0].HostConfig'

以上方案可根据实际环境组合使用,生产环境推荐采用Prometheus+Grafana的完整监控栈,配合自动化告警机制。对于开发测试环境,使用docker stats配合日志监控即可满足基本需求。