Docker 容器实时性能监控方案

在搬瓦工 VPS 上使用 Docker 部署应用后,需要实时监控各容器的资源使用情况。本文将介绍使用 Docker 内置命令、cAdvisor、PrometheusGrafana 构建完整的容器监控方案。

一、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% 的循环折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。