首页
/ 10分钟搞定Docker Compose性能监控:Prometheus+Grafana可视化方案

10分钟搞定Docker Compose性能监控:Prometheus+Grafana可视化方案

2026-02-04 05:21:12作者:咎岭娴Homer

你是否还在为Docker Compose应用的性能瓶颈发愁?服务器资源占用飙升却找不到原因?本文将带你从零开始搭建一套完整的性能监控系统,通过Prometheus(普罗米修斯)收集容器 metrics(指标数据),再用Grafana( grafana)构建实时可视化看板,让多容器应用的性能问题无所遁形。

读完本文你将掌握:

  • 编写带监控功能的Docker Compose配置文件
  • 部署Prometheus+Grafana监控栈
  • 配置容器指标自动采集
  • 构建自定义性能监控看板
  • 设置资源告警阈值

监控架构 overview

Docker Compose监控系统由三个核心组件构成:

  1. cAdvisor:容器指标采集器,运行在每个Docker主机上
  2. Prometheus:时序数据库,存储监控指标
  3. Grafana:可视化平台,展示监控数据和告警

监控架构

核心工作流程

  1. cAdvisor从Docker引擎获取容器CPU、内存、网络IO等指标
  2. Prometheus定期抓取cAdvisor暴露的metrics接口
  3. Grafana从Prometheus查询数据并渲染可视化图表

编写docker-compose.yml配置文件

创建包含监控组件的docker-compose.monitor.yml文件,定义三个服务的部署参数:

version: '3.8'

services:
  # 容器指标采集器
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.47.0
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - "8080:8080"
    restart: always
    deploy:
      resources:
        limits:
          cpu: 200m
          memory: 256M

  # 时序数据库
  prometheus:
    image: prom/prometheus:v2.45.0
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus-data:/prometheus
    ports:
      - "9090:9090"
    restart: always
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'

  # 可视化平台
  grafana:
    image: grafana/grafana:10.1.0
    volumes:
      - grafana-data:/var/lib/grafana
    ports:
      - "3000:3000"
    restart: always
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=secret
    depends_on:
      - prometheus

volumes:
  prometheus-data:
  grafana-data:

配置文件关键参数说明:

  • cAdvisor:挂载Docker主机的核心目录以获取容器数据,限制资源占用防止影响主机性能
  • Prometheus:通过prometheus.yml配置指标抓取规则,使用命名卷存储历史数据
  • Grafana:设置管理员密码,依赖Prometheus服务确保启动顺序

配置Prometheus数据采集

创建Prometheus配置文件prometheus.yml,定义抓取目标和数据保留策略:

global:
  scrape_interval: 15s  # 抓取频率
  evaluation_interval: 15s  # 规则评估频率
  scrape_timeout: 10s  # 抓取超时时间

scrape_configs:
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']  # cAdvisor服务地址

  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']  # Prometheus自身监控

  - job_name: 'docker-compose'
    static_configs:
      - targets: ['cadvisor:8080']  # 复用cAdvisor采集容器数据

核心配置参数

  • scrape_interval: 控制数据采集频率,默认15秒
  • job_name: 采集任务名称,用于区分不同来源的数据
  • targets: 监控目标地址,使用Docker Compose服务名作为主机名

启动监控服务栈

在终端执行以下命令启动所有监控组件:

# 后台启动服务
docker compose -f docker-compose.monitor.yml up -d

# 查看服务状态
docker compose -f docker-compose.monitor.yml ps

# 查看日志
docker compose -f docker-compose.monitor.yml logs -f

服务正常启动后,可以通过以下地址访问各组件:

  • cAdvisor: http://localhost:8080
  • Prometheus: http://localhost:9090
  • Grafana: http://localhost:3000

配置Grafana可视化看板

1. 添加Prometheus数据源

  1. 访问Grafana界面(默认账户admin/secret)
  2. 进入Configuration > Data Sources
  3. 点击Add data source,选择Prometheus
  4. 设置URL为http://prometheus:9090
  5. 点击Save & Test验证连接

2. 导入Docker监控看板

  1. 进入Dashboards > Import
  2. 输入看板ID:893(Docker monitoring by cAdvisor)
  3. 选择刚刚添加的Prometheus数据源
  4. 点击Import完成导入

关键监控指标解析

通过Grafana看板可以实时监控以下关键指标:

容器资源使用情况

  • CPU使用率container_cpu_usage_seconds_total
  • 内存使用量container_memory_usage_bytes
  • 网络吞吐量container_network_transmit_bytes_totalcontainer_network_receive_bytes_total
  • 磁盘IOcontainer_fs_reads_bytes_totalcontainer_fs_writes_bytes_total

服务健康状态

  • 容器重启次数:container_restarts_total
  • 服务可用性:up{job="docker-compose"}

设置性能告警

在Grafana中配置资源告警规则,当指标超过阈值时触发通知:

  1. 进入Alerting > Alert rules > New alert rule
  2. 设置查询条件:avg(rate(container_cpu_usage_seconds_total{name=~"your-service.*"}[5m])) by (name) > 0.8
  3. 配置阈值:CPU使用率持续3分钟超过80%
  4. 添加通知渠道:支持Email、Slack、钉钉等

监控数据持久化与清理

数据保留策略

编辑Prometheus配置文件设置数据保留时间:

global:
  retention: 15d  # 保留15天数据

定期清理无效容器

使用Docker Compose的down命令清理不再使用的监控组件:

# 停止并删除服务、网络
docker compose -f docker-compose.monitor.yml down

# 清理未使用的数据卷
docker volume prune -f

生产环境优化建议

  1. 资源限制:为监控组件设置资源限制,避免影响业务容器

    deploy:
      resources:
        limits:
          cpu: 500m
          memory: 512M
    
  2. 安全加固

    • 为Grafana启用HTTPS
    • 创建只读Prometheus API密钥
    • 限制cAdvisor访问来源
  3. 高可用部署

    • 使用Docker Swarm或Kubernetes实现服务编排
    • 配置Prometheus联邦集群
    • 实现Grafana多实例负载均衡

常见问题排查

问题1:Prometheus无法抓取数据

检查网络连通性:

# 进入Prometheus容器
docker compose -f docker-compose.monitor.yml exec prometheus sh

# 测试cAdvisor连接
wget -qO- cadvisor:8080/metrics

问题2:Grafana图表无数据

  1. 检查Prometheus是否有数据:http://localhost:9090/graph?g0.expr=container_cpu_usage_seconds_total&g0.tab=0
  2. 验证Grafana数据源配置
  3. 检查防火墙规则是否阻止容器间通信

问题3:cAdvisor占用过高资源

修改cAdvisor部署配置:

command:
  - '--housekeeping_interval=30s'  # 降低数据采集频率
  - '--max_housekeeping_interval=30s'

总结

通过本文介绍的方案,你已经拥有了一套功能完备的Docker Compose性能监控系统。这套方案的优势在于:

  1. 轻量级部署:通过Docker Compose一键启动整个监控栈
  2. 全面监控:覆盖容器CPU、内存、网络、磁盘等关键指标
  3. 灵活扩展:支持添加更多Prometheus exporter监控其他服务
  4. 可视化能力:利用Grafana丰富的图表类型展示数据

官方文档:docs/reference/compose_up.md 监控源码参考:pkg/compose/monitor.go

下一步建议探索:

  • 集成Alertmanager实现告警聚合
  • 监控Docker Compose应用的业务指标
  • 使用PromQL编写自定义监控规则
登录后查看全文
热门项目推荐
相关项目推荐