VideoAgentTrek-ScreenFilter模型服务监控:使用Prometheus与Grafana打造可视化监控面板

张开发
2026/6/10 11:12:37 15 分钟阅读
VideoAgentTrek-ScreenFilter模型服务监控:使用Prometheus与Grafana打造可视化监控面板
VideoAgentTrek-ScreenFilter模型服务监控使用Prometheus与Grafana打造可视化监控面板最近我们团队把VideoAgentTrek-ScreenFilter模型部署到了线上环境用来处理视频内容过滤任务。服务跑起来之后大家心里其实都没底它到底稳不稳定处理一个视频要多久GPU资源用得好不好万一半夜出问题了怎么办总不能一直靠人工盯着日志吧这既不现实也不高效。我们需要的是一套能7x24小时自动“盯梢”的系统一旦服务有风吹草动能立刻通知我们。经过一番折腾我们最终用Prometheus和Grafana搭建了一套完整的监控方案把服务的健康状况、性能表现都变成了直观的图表和告警。今天我就把这套从零到一的监控搭建过程分享给你。无论你是运维同学还是负责模型服务的开发者这套方法都能帮你把服务的“黑盒”变成“透明盒”睡个安稳觉。1. 为什么模型服务也需要监控你可能觉得模型服务部署完、接口能调通就万事大吉了。但真正用起来问题才刚开始。我们遇到过几次线上故障一次是GPU内存泄漏服务运行几天后突然崩溃导致线上视频处理任务大量堆积另一次是某个依赖库版本冲突导致部分特定格式的视频处理失败率飙升但因为没有监控直到用户投诉我们才发现。这些经历让我们意识到模型服务尤其是像VideoAgentTrek-ScreenFilter这样涉及计算资源的服务和传统的Web服务一样需要可观测性。我们需要知道服务健康吗API接口能不能正常响应成功率有多少性能怎么样处理一个视频平均要多久有没有慢请求资源吃紧吗GPU利用率高不高显存够不够用出了事谁能告诉我服务异常时能不能第一时间通知到负责人Prometheus负责采集和存储这些指标数据Grafana则负责把数据变成一目了然的图表和仪表盘。两者结合就能为我们回答上面所有问题。2. 监控体系搭建从数据采集到可视化整个监控流程可以看作一个管道首先要在模型服务里埋点暴露指标然后由Prometheus定期来抓取这些指标并存储最后Grafana从Prometheus里查询数据绘制成图表。2.1 第一步让模型服务“说话”暴露指标VideoAgentTrek-ScreenFilter模型服务是基于Python的FastAPI框架开发的。要让Prometheus能采集到数据我们需要在服务中集成指标暴露功能。这里我们使用prometheus-fastapi-instrumentator这个库它非常方便几乎无需手动埋点。首先安装必要的库pip install prometheus-fastapi-instrumentator prometheus-client然后在你的FastAPI应用启动文件中比如main.py添加几行代码from fastapi import FastAPI from prometheus_fastapi_instrumentator import Instrumentator import torch app FastAPI(titleVideoAgentTrek-ScreenFilter API) # 初始化你的模型路由等... # app.include_router(...) # 关键步骤挂载指标收集器 instrumentator Instrumentator().instrument(app) # 如果你还想监控GPU使用情况可以添加自定义指标 from prometheus_client import Gauge gpu_utilization Gauge(model_service_gpu_utilization, GPU utilization percentage) gpu_memory_used Gauge(model_service_gpu_memory_used_mb, GPU memory used in MB) app.on_event(startup) async def startup_event(): instrumentator.expose(app) # 暴露/metrics端点 # 启动一个后台任务定期更新GPU指标如果有GPU的话 if torch.cuda.is_available(): # 这里示例一个简单的更新函数实际可能需要更复杂的逻辑 async def update_gpu_metrics(): import asyncio while True: util torch.cuda.utilization(0) if torch.cuda.device_count() 0 else 0 mem_used torch.cuda.memory_allocated(0) / 1024 / 1024 if torch.cuda.device_count() 0 else 0 gpu_utilization.set(util) gpu_memory_used.set(mem_used) await asyncio.sleep(10) # 每10秒更新一次 # 注意实际项目中请妥善管理后台任务 # asyncio.create_task(update_gpu_metrics())启动服务后访问http://你的服务地址:端口/metrics你就能看到Prometheus格式的指标数据了。这里面已经自动包含了HTTP请求次数、延迟等丰富信息。2.2 第二步配置“数据收集员”PrometheusPrometheus会定期抓取scrape我们服务暴露的/metrics端点。我们需要配置一个prometheus.yml文件来告诉它抓谁、怎么抓。一个基础的配置示例如下global: scrape_interval: 15s # 每15秒抓取一次数据 evaluation_interval: 15s # 每15秒评估一次告警规则 scrape_configs: - job_name: video-agent-service # 监控任务名称 static_configs: - targets: [your-service-host:8000] # 你的模型服务地址和端口 labels: service: video-filter env: production使用Docker运行Prometheus是最简单的方式docker run -d \ -p 9090:9090 \ -v /path/to/your/prometheus.yml:/etc/prometheus/prometheus.yml \ --name prometheus \ prom/prometheus运行后访问http://localhost:9090就能看到Prometheus的Web界面。在“Status - Targets”下应该能看到我们配置的video-agent-service状态是“UP”表示数据抓取正常。2.3 第三步打造“监控仪表盘”Grafana数据有了但看原始数据太费劲。Grafana登场它的任务是把数据变成漂亮的图表。同样用Docker运行Grafanadocker run -d \ -p 3000:3000 \ --name grafana \ grafana/grafana-enterprise访问http://localhost:3000默认账号密码是admin/admin。首次登录需要修改密码。接下来是关键操作添加数据源在Configuration - Data Sources里选择“Prometheus”URL填写http://prometheus:9090如果Grafana和Prometheus在同一宿主机且Prometheus容器名是prometheus。点击“Save Test”显示成功即可。导入或创建仪表盘Grafana社区有大量现成的仪表盘模板。你可以去 Grafana Labs官网 搜索“FastAPI”或“Python”相关的看板。更推荐的方式是自己创建这样更贴合业务。3. 核心监控仪表盘配置实战下面我们来创建一个专为VideoAgentTrek-ScreenFilter模型服务定制的监控仪表盘。主要关注四个层面服务概览、API性能、资源利用和业务健康。3.1 服务概览面板这个面板像汽车的仪表盘一眼就能看出服务整体状态。当前请求速率QPS用rate(http_requests_total[5m])计算最近5分钟的平均每秒请求数。服务健康状态直接用up{jobvideo-agent-service}值为1健康0不健康。总成功/失败请求数分别用http_requests_total{status~2..}和http_requests_total{status~5..}来统计。在Grafana中创建一个新的Dashboard然后添加一个“Stat”类型的面板选择对应的PromQL查询语句即可。把这些关键指标放在一起做成一个一目了然的概览行。3.2 API性能深度监控对于模型服务延迟是生命线。我们需要密切关注API的响应时间。请求延迟分布直方图prometheus-fastapi-instrumentator会自动生成http_request_duration_seconds_bucket指标。我们可以用它来绘制延迟的百分比P50, P90, P99。P99延迟histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))。这个值非常重要它反映了最慢的那1%请求的耗时能帮你发现长尾问题。平均请求延迟rate(http_request_duration_seconds_sum[5m]) / rate(http_request_duration_seconds_count[5m])。按接口分解延迟为不同的API路由比如/filter和/health分别绘制延迟曲线这样可以快速定位是哪个接口变慢了。在Grafana中使用“Time series”图表类型来绘制这些曲线并给每个图表起一个清晰的名字。3.3 资源利用率监控模型服务是资源消耗大户特别是GPU。GPU利用率使用我们之前自定义的model_service_gpu_utilization指标。在Grafana中创建一个Gauge图表设置阈值比如超过80%警告超过95%严重。GPU显存使用使用model_service_gpu_memory_used_mb指标。同时可以查询torch.cuda.max_memory_allocated()来获取显存总量计算使用百分比。系统资源虽然Prometheus主要抓应用指标但我们可以通过部署node_exporter来收集服务器本身的CPU、内存、磁盘I/O等指标这对于排查宿主机资源瓶颈至关重要。3.4 业务健康度与告警设置监控的最终目的是为了及时发现问题。Grafana强大的告警功能可以帮我们做到这一点。配置告警规则服务宕机up{jobvideo-agent-service} 0持续1分钟则告警。高错误率rate(http_requests_total{status~5..}[5m]) / rate(http_requests_total[5m]) * 100 5错误率超过5%告警。高延迟histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) 10P99延迟超过10秒告警。GPU过载model_service_gpu_utilization 90持续5分钟告警。设置告警渠道在Grafana的“Alerting”菜单中可以配置通知渠道比如邮件、Slack、钉钉、Webhook等。当触发告警时消息会自动发送到指定群组附带上详细的指标信息和图表链接方便快速定位。4. 总结给VideoAgentTrek-ScreenFilter模型服务配上Prometheus和Grafana这套监控组合拳之后我们的运维体验提升了好几个档次。再也不用像以前那样出了问题才去翻日志而是能够主动地、可视化地掌握服务的每一丝脉搏。从具体的实践来看这套方案有几个特别实在的好处。一是心里有底了服务是忙是闲资源是宽裕还是紧张打开仪表盘一目了然。二是排查问题快了一旦收到告警通过关联的指标图表能很快缩小问题范围比如到底是代码bug、资源不足还是依赖服务出问题。三是能做容量规划了通过观察历史趋势能更科学地决定什么时候该给服务扩容。当然这套监控体系也不是一劳永逸的。随着业务发展我们还在考虑加入更细粒度的业务指标比如过滤不同类型视频的成功率、处理视频时长的分布等。监控本身也是一个需要持续迭代和优化的过程。如果你也在管理类似的AI模型服务强烈建议花点时间把监控搭起来。前期的一点投入换来的是后期运维效率的巨大提升和线上稳定性的坚实保障。从最简单的几个核心指标开始逐步丰富你会发现看得见的服务才是真正可控的服务。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章