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监控系统由三个核心组件构成:
- cAdvisor:容器指标采集器,运行在每个Docker主机上
- Prometheus:时序数据库,存储监控指标
- Grafana:可视化平台,展示监控数据和告警
核心工作流程
- cAdvisor从Docker引擎获取容器CPU、内存、网络IO等指标
- Prometheus定期抓取cAdvisor暴露的metrics接口
- 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数据源
- 访问Grafana界面(默认账户admin/secret)
- 进入Configuration > Data Sources
- 点击Add data source,选择Prometheus
- 设置URL为
http://prometheus:9090 - 点击Save & Test验证连接
2. 导入Docker监控看板
- 进入Dashboards > Import
- 输入看板ID:893(Docker monitoring by cAdvisor)
- 选择刚刚添加的Prometheus数据源
- 点击Import完成导入
关键监控指标解析
通过Grafana看板可以实时监控以下关键指标:
容器资源使用情况
- CPU使用率:
container_cpu_usage_seconds_total - 内存使用量:
container_memory_usage_bytes - 网络吞吐量:
container_network_transmit_bytes_total和container_network_receive_bytes_total - 磁盘IO:
container_fs_reads_bytes_total和container_fs_writes_bytes_total
服务健康状态
- 容器重启次数:
container_restarts_total - 服务可用性:
up{job="docker-compose"}
设置性能告警
在Grafana中配置资源告警规则,当指标超过阈值时触发通知:
- 进入Alerting > Alert rules > New alert rule
- 设置查询条件:
avg(rate(container_cpu_usage_seconds_total{name=~"your-service.*"}[5m])) by (name) > 0.8 - 配置阈值:CPU使用率持续3分钟超过80%
- 添加通知渠道:支持Email、Slack、钉钉等
监控数据持久化与清理
数据保留策略
编辑Prometheus配置文件设置数据保留时间:
global:
retention: 15d # 保留15天数据
定期清理无效容器
使用Docker Compose的down命令清理不再使用的监控组件:
# 停止并删除服务、网络
docker compose -f docker-compose.monitor.yml down
# 清理未使用的数据卷
docker volume prune -f
生产环境优化建议
-
资源限制:为监控组件设置资源限制,避免影响业务容器
deploy: resources: limits: cpu: 500m memory: 512M -
安全加固:
- 为Grafana启用HTTPS
- 创建只读Prometheus API密钥
- 限制cAdvisor访问来源
-
高可用部署:
- 使用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图表无数据
- 检查Prometheus是否有数据:http://localhost:9090/graph?g0.expr=container_cpu_usage_seconds_total&g0.tab=0
- 验证Grafana数据源配置
- 检查防火墙规则是否阻止容器间通信
问题3:cAdvisor占用过高资源
修改cAdvisor部署配置:
command:
- '--housekeeping_interval=30s' # 降低数据采集频率
- '--max_housekeeping_interval=30s'
总结
通过本文介绍的方案,你已经拥有了一套功能完备的Docker Compose性能监控系统。这套方案的优势在于:
- 轻量级部署:通过Docker Compose一键启动整个监控栈
- 全面监控:覆盖容器CPU、内存、网络、磁盘等关键指标
- 灵活扩展:支持添加更多Prometheus exporter监控其他服务
- 可视化能力:利用Grafana丰富的图表类型展示数据
官方文档:docs/reference/compose_up.md 监控源码参考:pkg/compose/monitor.go
下一步建议探索:
- 集成Alertmanager实现告警聚合
- 监控Docker Compose应用的业务指标
- 使用PromQL编写自定义监控规则
登录后查看全文
热门项目推荐
相关项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
LongCat-AudioDiT-1BLongCat-AudioDiT 是一款基于扩散模型的文本转语音(TTS)模型,代表了当前该领域的最高水平(SOTA),它直接在波形潜空间中进行操作。00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
HY-Embodied-0.5这是一套专为现实世界具身智能打造的基础模型。该系列模型采用创新的混合Transformer(Mixture-of-Transformers, MoT) 架构,通过潜在令牌实现模态特异性计算,显著提升了细粒度感知能力。Jinja00
FreeSql功能强大的对象关系映射(O/RM)组件,支持 .NET Core 2.1+、.NET Framework 4.0+、Xamarin 以及 AOT。C#00
项目优选
收起
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
655
4.25 K
deepin linux kernel
C
27
14
Ascend Extension for PyTorch
Python
498
604
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
390
282
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.53 K
889
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
938
859
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.07 K
557
暂无简介
Dart
902
217
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
132
207
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
124
195
