DAMO-YOLO手机检测镜像资源监控:Prometheus+Grafana GPU/内存/延迟看板搭建
1. 项目背景与监控需求
在实际的手机检测生产环境中,仅仅能够使用系统是远远不够的。当DAMO-YOLO手机检测系统部署后,我们需要实时掌握系统的运行状态:GPU使用率是否正常?内存是否充足?推理延迟是否在可接受范围内?这些指标直接影响着系统的稳定性和用户体验。
传统的命令行监控方式既不方便也不直观。本文将带你搭建一套完整的监控系统,使用Prometheus采集数据,Grafana展示看板,实现对手机检测系统的全方位监控。
为什么需要监控系统?
- 实时了解资源使用情况,避免资源瓶颈
- 快速定位性能问题,提升系统稳定性
- 历史数据追溯,为扩容优化提供依据
- 直观的可视化界面,降低运维门槛
2. 监控系统架构设计
2.1 整体架构
手机检测系统 (DAMO-YOLO) ↓ Prometheus 数据采集 (每15秒拉取一次) ↓ Grafana 数据可视化 (实时展示) ↓ Web 看板 (GPU/内存/延迟监控)2.2 监控指标说明
我们需要监控的核心指标包括:
- GPU指标:使用率、显存占用、温度
- 内存指标:系统内存使用、交换空间使用
- 性能指标:推理延迟、吞吐量、错误率
- 系统指标:CPU使用率、磁盘IO、网络流量
3. 环境准备与组件安装
3.1 安装Prometheus
首先安装Prometheus作为数据采集器:
# 创建监控专用目录 mkdir -p /opt/monitoring cd /opt/monitoring # 下载Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.47.2/prometheus-2.47.2.linux-amd64.tar.gz tar xvfz prometheus-*.tar.gz cd prometheus-* # 创建配置文件 cat > prometheus.yml << 'EOF' global: scrape_interval: 15s scrape_configs: - job_name: 'node' static_configs: - targets: ['localhost:9100'] - job_name: 'phone-detection' static_configs: - targets: ['localhost:8000'] EOF # 创建systemd服务 cat > /etc/systemd/system/prometheus.service << 'EOF' [Unit] Description=Prometheus After=network.target [Service] User=root ExecStart=/opt/monitoring/prometheus/prometheus \ --config.file=/opt/monitoring/prometheus/prometheus.yml \ --storage.tsdb.path=/opt/monitoring/prometheus/data Restart=always [Install] WantedBy=multi-user.target EOF # 启动服务 systemctl daemon-reload systemctl start prometheus systemctl enable prometheus3.2 安装Node Exporter
Node Exporter用于采集系统指标:
# 下载Node Exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz tar xvfz node_exporter-*.tar.gz mv node_exporter-*/node_exporter /usr/local/bin/ # 创建systemd服务 cat > /etc/systemd/system/node_exporter.service << 'EOF' [Unit] Description=Node Exporter After=network.target [Service] User=root ExecStart=/usr/local/bin/node_exporter Restart=always [Install] WantedBy=multi-user.target EOF # 启动服务 systemctl start node_exporter systemctl enable node_exporter3.3 安装Grafana
安装Grafana用于数据可视化:
# 安装Grafana wget -q -O - https://packages.grafana.com/gpg.key | apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | tee -a /etc/apt/sources.list.d/grafana.list apt-get update apt-get install -y grafana # 启动Grafana systemctl start grafana-server systemctl enable grafana-server # 开放Grafana端口(默认3000) ufw allow 3000/tcp4. 手机检测系统监控配置
4.1 添加监控指标导出
为了监控手机检测系统的性能指标,我们需要在应用中添加监控端点:
# 在phone-detection应用中添加监控功能 from prometheus_client import start_http_server, Summary, Gauge, Counter import time # 定义监控指标 INFERENCE_DURATION = Summary('inference_duration_seconds', '推理耗时') GPU_MEMORY_USAGE = Gauge('gpu_memory_usage_bytes', 'GPU显存使用量') GPU_UTILIZATION = Gauge('gpu_utilization_percent', 'GPU使用率') REQUESTS_TOTAL = Counter('requests_total', '总请求数') ERRORS_TOTAL = Counter('errors_total', '错误总数') def monitor_inference(func): """监控装饰器:记录推理耗时和资源使用""" def wrapper(*args, **kwargs): start_time = time.time() REQUESTS_TOTAL.inc() try: result = func(*args, **kwargs) # 记录GPU信息(如果有GPU) if torch.cuda.is_available(): GPU_MEMORY_USAGE.set(torch.cuda.memory_allocated()) GPU_UTILIZATION.set(get_gpu_utilization()) return result except Exception as e: ERRORS_TOTAL.inc() raise e finally: INFERENCE_DURATION.observe(time.time() - start_time) return wrapper # 在检测函数上添加监控 @monitor_inference def detect_phones(image): # 原有的检测逻辑 pass # 启动监控服务器(在应用启动时调用) def start_monitoring(): start_http_server(8000)4.2 配置Prometheus采集
修改Prometheus配置,添加手机检测系统的监控目标:
# 在prometheus.yml中添加以下内容 scrape_configs: - job_name: 'phone-detection-metrics' static_configs: - targets: ['localhost:8000'] metrics_path: '/metrics' scrape_interval: 15s - job_name: 'node-metrics' static_configs: - targets: ['localhost:9100'] scrape_interval: 15s重启Prometheus使配置生效:
systemctl restart prometheus5. Grafana看板配置
5.1 数据源配置
- 访问Grafana:http://你的服务器IP:3000
- 默认账号:admin/admin(首次登录会要求修改密码)
- 添加Prometheus数据源:
- Name: Prometheus
- URL: http://localhost:9090
- Access: Server (default)
5.2 创建手机检测监控看板
5.2.1 GPU监控面板
创建GPU使用率监控:
# GPU使用率 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) # GPU显存使用 node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes # GPU显存使用率 (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 1005.2.2 内存监控面板
内存使用情况监控:
# 内存使用量 node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes # 内存使用率 (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 # 交换空间使用 node_memory_SwapTotal_bytes - node_memory_SwapFree_bytes5.2.3 推理性能面板
手机检测性能监控:
# 平均推理延迟 rate(inference_duration_seconds_sum[5m]) / rate(inference_duration_seconds_count[5m]) # 每秒请求数 rate(requests_total[5m]) # 错误率 rate(errors_total[5m]) / rate(requests_total[5m]) * 1005.2.4 系统健康面板
整体系统健康状态:
# CPU使用率 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) # 磁盘使用率 100 - (node_filesystem_free_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100) # 网络流量 rate(node_network_receive_bytes_total[1m])5.3 看板布局与告警设置
5.3.1 看板布局建议
一个完整的监控看板应该包含以下面板:
- 顶部状态栏:系统整体健康状态(红绿灯指示)
- GPU监控区:使用率、显存、温度
- 内存监控区:使用量、使用率、交换空间
- 性能监控区:推理延迟、吞吐量、错误率
- 系统监控区:CPU、磁盘、网络
- 历史趋势区:24小时性能趋势图
5.3.2 关键告警设置
设置以下关键告警阈值:
- GPU使用率> 90% 持续5分钟
- 内存使用率> 85% 持续5分钟
- 推理延迟> 100ms 持续3分钟
- 错误率> 5% 持续2分钟
6. 实战:搭建完整监控看板
6.1 导入预置看板模板
Grafana社区提供了丰富的看板模板,我们可以导入适合的模板:
- 访问Grafana官网的Dashboards页面
- 搜索"Node Exporter"或"GPU Monitoring"
- 选择适合的模板(如:1860 - Node Exporter Full)
- 在Grafana中点击"Import"并输入模板ID
6.2 自定义手机检测看板
如果需要完全自定义看板,可以按照以下步骤:
{ "dashboard": { "title": "手机检测系统监控", "panels": [ { "title": "GPU使用率", "type": "graph", "targets": [{ "expr": "100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[1m])) * 100)" }] }, { "title": "内存使用", "type": "graph", "targets": [{ "expr": "node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes" }] } ] } }6.3 配置告警通知
配置邮件或Webhook告警通知:
- 在Grafana中配置SMTP设置或Webhook地址
- 为每个关键指标创建告警规则
- 设置告警触发条件和通知模板
7. 监控系统维护与优化
7.1 数据保留策略
调整Prometheus数据保留时间,避免磁盘写满:
# 在prometheus.yml中添加 global: scrape_interval: 15s evaluation_interval: 15s # 保留15天数据 retention: 15d # 或者按磁盘空间限制 storage: tsdb: retention: 15d retention.size: 50GB7.2 性能优化建议
- 调整采集间隔:非关键指标可适当延长采集间隔
- 数据降采样:历史数据可降低精度节省空间
- 清理旧数据:定期清理过期监控数据
- 使用远程存储:重要数据可备份到远程存储
7.3 日常维护命令
# 检查服务状态 systemctl status prometheus node_exporter grafana-server # 查看日志 journalctl -u prometheus -f journalctl -u grafana-server -f # 检查端口监听 netstat -tlnp | grep -E '(9090|9100|3000)' # 测试数据采集 curl http://localhost:9090/metrics curl http://localhost:9100/metrics8. 总结
通过本文的指导,你已经成功搭建了一套完整的DAMO-YOLO手机检测系统监控平台。这个平台能够:
- 实时监控GPU、内存、延迟等关键指标
- 可视化展示系统运行状态和性能趋势
- 自动告警及时发现和处理问题
- 历史分析为系统优化提供数据支持
监控系统的价值不仅在于发现问题,更在于预防问题。通过持续观察系统运行状态,你可以:
- 提前发现资源瓶颈,避免系统崩溃
- 优化模型性能,提升用户体验
- 合理规划资源,降低成本支出
- 快速定位问题,减少故障时间
现在你的手机检测系统已经有了"眼睛"和"警报器",可以更加稳定可靠地运行了。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。