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编写自定义监控规则
登录后查看全文
热门项目推荐
相关项目推荐
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
yuanrongopenYuanrong runtime:openYuanrong 多语言运行时提供函数分布式编程,支持 Python、Java、C++ 语言,实现类单机编程高性能分布式运行。Go051
pc-uishopTNT开源商城系统使用java语言开发,基于SpringBoot架构体系构建的一套b2b2c商城,商城是满足集平台自营和多商户入驻于一体的多商户运营服务系统。包含PC 端、手机端(H5\APP\小程序),系统架构以及实现案例中应满足和未来可能出现的业务系统进行对接。Vue00
ebook-to-mindmapepub、pdf 拆书 AI 总结TSX01
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
540
3.77 K
Ascend Extension for PyTorch
Python
351
417
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
889
614
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
338
185
openJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力
TSX
988
253
openGauss kernel ~ openGauss is an open source relational database management system
C++
169
233
暂无简介
Dart
778
193
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
115
141
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.35 K
758
