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-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0188- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
awesome-zig一个关于 Zig 优秀库及资源的协作列表。Makefile00
热门内容推荐
最新内容推荐
5个实战技巧:用langchaingo构建企业级对话系统的全流程指南解锁模块化编辑:Milkdown框架的可扩展开发指南[技术专题] OpenWeChat消息处理:从核心原理到高级实践Dapr集群部署失败?5步实战指南助你快速定位并解决问题小爱音箱AI升级定制指南:从零开始的设备改造与功能扩展Vanna AI训练数据效率提升实战指南:从数据准备到模型优化全流程解析打造现代界面新范式:Glass Liquid设计理念与实践指南PandaWiki部署实战:从环境准备到系统优化全指南4个步骤掌握Claude AI应用容器化部署:claude-quickstarts项目Docker实践指南4个高效步骤:Pixelle-Video API集成与开发实战指南
项目优选
收起
deepin linux kernel
C
27
12
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
598
4.03 K
Ascend Extension for PyTorch
Python
439
531
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
920
768
暂无简介
Dart
844
204
React Native鸿蒙化仓库
JavaScript
320
374
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
69
21
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.46 K
822
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
368
247
昇腾LLM分布式训练框架
Python
130
156
