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编写自定义监控规则
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust099- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
热门内容推荐
最新内容推荐
跨系统应用融合:APK Installer实现Windows环境下安卓应用运行的技术路径探索如何用OpCore Simplify构建稳定黑苹果系统?掌握这3大核心策略ComfyUI-LTXVideo实战攻略:3大核心场景的视频生成解决方案告别3小时抠像噩梦:AI如何让人人都能制作电影级视频Anki Connect:知识管理与学习自动化的API集成方案Laigter法线贴图生成工具零基础实战指南:提升2D游戏视觉效率全攻略如何用智能助手实现高效微信自动回复?全方位指南3步打造高效游戏自动化工具:从入门到精通的智能辅助方案掌握语音分割:从入门到实战的完整路径开源翻译平台完全指南:从搭建到精通自托管翻译服务
项目优选
收起
暂无描述
Dockerfile
710
4.51 K
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
578
99
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
958
955
deepin linux kernel
C
28
16
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.61 K
942
Ascend Extension for PyTorch
Python
573
694
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
1.43 K
116
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
414
339
暂无简介
Dart
952
235
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
2
