丹青识画系统运维监控体系搭建:使用Prometheus与Grafana
丹青识画系统运维监控体系搭建使用Prometheus与Grafana最近在负责一个叫“丹青识画”的AI图像识别系统的运维工作。系统上线后虽然功能跑得挺顺但总感觉心里没底服务器GPU现在忙不忙内存还够用吗用户请求的响应速度怎么样有没有什么潜在的错误在悄悄发生这种“黑盒”状态对运维来说太被动了。出了问题只能被动响应无法提前预警。于是我决定为这套系统搭建一套完整的监控体系目标很简单让系统的运行状态变得“看得见、摸得着”。经过一番调研和实践我选择了PrometheusGrafana这套经典组合效果非常不错。今天就把这套从零到一的搭建过程和实战经验分享出来希望能给有类似需求的同学一些参考。1. 为什么丹青识画系统需要监控在聊具体怎么搭建之前我们先得搞清楚为什么要费这个劲。对于“丹青识画”这类AI推理服务监控不是锦上添花而是保障服务稳定性的生命线。想象一下你的系统正在线上默默服务。突然业务方反馈“今天的图片识别怎么这么慢”或者更糟用户直接投诉“服务挂了图片传不上去”这时候你才去登录服务器手忙脚乱地查日志、看进程整个过程既低效又被动。有了监控体系情况就完全不同了。你可以提前看到GPU利用率正在缓慢爬升预测到性能瓶颈可以实时发现某个API接口的错误率突然飙升在用户感知前就定位问题还可以通过历史数据回溯分析出业务高峰期的规律为扩容提供数据支撑。具体到“丹青识画”系统我们最关心的核心指标有这几类资源消耗GPU的算力用了多少显存还剩多少服务器的CPU、内存、磁盘I/O压力大不大服务性能用户上传一张图片系统平均多久能返回结果延迟每秒能处理多少请求QPS成功率有多少业务健康度AI模型推理的准确率有没有波动有没有出现大量识别失败或超时的请求把这些指标监控起来我们就从“盲人摸象”变成了“心中有数”。2. 监控体系核心组件Prometheus与Grafana我们选择的方案是Prometheus Grafana这是云原生领域事实上的监控标准方案之一。它们俩分工明确配合默契。Prometheus是个“数据收集和存储专家”。它的工作模式是主动去“拉取”Pull各个被监控目标暴露出来的指标数据。比如我们在丹青识画的服务代码里埋点暴露一个/metrics接口里面包含了请求次数、延迟等信息。Prometheus 服务器会定期比如每15秒访问这个接口把数据抓回来存到它自己的时序数据库里。它还有一个强大的规则引擎可以让我们基于这些数据配置告警规则。Grafana是个“数据可视化大师”。它本身不存储数据而是作为一个超级灵活的仪表盘从 Prometheus或者其他数据源那里查询数据然后以各种精美的图表折线图、柱状图、仪表盘等展示出来。我们可以把关心的指标比如GPU利用率、API延迟做成一个一目了然的运维大屏。这套组合的优势很明显开源、生态丰富、功能强大而且非常适合我们这种自定义指标多的AI服务场景。3. 第一步部署与配置Prometheus万事开头难我们先让Prometheus跑起来。假设我们的丹青识画系统部署在了一台Linux服务器上。3.1 安装Prometheus首先我们去Prometheus官网下载最新版本的预编译包。通过命令行操作如下# 下载Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz # 解压 tar xvfz prometheus-2.45.0.linux-amd64.tar.gz # 移动到合适的目录并创建软链接方便使用 sudo mv prometheus-2.45.0.linux-amd64 /opt/prometheus sudo ln -s /opt/prometheus/prometheus /usr/local/bin/prometheus3.2 配置Prometheus安装好后关键步骤是配置它。配置文件通常是prometheus.yml。我们需要告诉它监控谁丹青识画服务以及监控规则。# prometheus.yml 示例核心配置 global: scrape_interval: 15s # 每15秒抓取一次数据 evaluation_interval: 15s # 每15秒评估一次告警规则 # 告警规则文件的路径 rule_files: - alerts.yml # 这里定义要抓取的所有目标 scrape_configs: # 监控Prometheus自身 - job_name: prometheus static_configs: - targets: [localhost:9090] # 监控丹青识画AI服务这是重点 - job_name: danqing-ai-service static_configs: - targets: [localhost:8000] # 假设丹青识画服务运行在本机8000端口 metrics_path: /metrics # 服务暴露指标的路径 scrape_interval: 10s # 对这个重要服务我们可以抓取更频繁一些这个配置的意思是Prometheus会去抓取localhost:8000/metrics这个地址的数据这些数据就来自我们的丹青识画服务。3.3 启动Prometheus配置好后我们可以用systemd创建一个服务方便管理。# 创建Prometheus用户和目录 sudo useradd --no-create-home --shell /bin/false prometheus sudo mkdir /etc/prometheus /var/lib/prometheus sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus # 创建systemd服务文件 /etc/systemd/system/prometheus.service # 文件内容如下[Unit] DescriptionPrometheus Monitoring Wantsnetwork-online.target Afternetwork-online.target [Service] Userprometheus Groupprometheus Typesimple ExecStart/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates /etc/prometheus/consoles \ --web.console.libraries /etc/prometheus/console_libraries [Install] WantedBymulti-user.target# 启动并设置开机自启 sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus现在访问http://你的服务器IP:9090就能看到Prometheus自带的简单界面了。不过现在它还没什么数据可看因为我们的丹青识画服务还没暴露指标。4. 第二步让丹青识画服务暴露监控指标Prometheus准备好了下一步是让被监控的对象——我们的丹青识画服务——能够提供数据。这通常需要在服务代码中集成一个Prometheus客户端库。以Python假设丹青识画使用Flask框架为例我们可以使用prometheus_client这个库。4.1 安装客户端库并埋点首先安装库pip install prometheus_client然后在丹青识画服务的应用代码中比如app.py添加监控埋点from flask import Flask, request, jsonify from prometheus_client import Counter, Histogram, Gauge, generate_latest, CONTENT_TYPE_LATEST import time app Flask(__name__) # 定义指标 # 1. 计数器统计总请求数和错误数 REQUEST_COUNT Counter(danqing_http_requests_total, Total HTTP Requests, [method, endpoint, status]) ERROR_COUNT Counter(danqing_http_errors_total, Total HTTP Error Responses, [method, endpoint]) # 2. 直方图记录请求延迟分布单位秒 REQUEST_LATENCY Histogram(danqing_http_request_duration_seconds, HTTP Request latency, [endpoint]) # 3. 仪表盘记录当前GPU利用率假设通过某个函数获取 GPU_UTILIZATION Gauge(danqing_gpu_utilization_percent, Current GPU Utilization Percentage) GPU_MEMORY_USED Gauge(danqing_gpu_memory_used_mb, GPU Memory Used in MB) # 模拟获取GPU信息的函数 def get_gpu_info(): # 这里需要调用实际的GPU监控命令如nvidia-smi并解析结果 # 示例返回假数据 return {utilization: 45.5, memory_used: 3200} app.before_request def before_request(): 在请求开始前记录时间 request.start_time time.time() app.after_request def after_request(response): 在请求结束后计算延迟并更新指标 # 计算请求耗时 latency time.time() - request.start_time endpoint request.path # 更新请求延迟直方图 REQUEST_LATENCY.labels(endpointendpoint).observe(latency) # 更新请求总数计数器 REQUEST_COUNT.labels(methodrequest.method, endpointendpoint, statusresponse.status_code).inc() # 如果响应码是5xx更新错误计数器 if 500 response.status_code 600: ERROR_COUNT.labels(methodrequest.method, endpointendpoint).inc() return response app.route(/api/identify, methods[POST]) def identify_image(): 丹青识图的核心识别接口 # 这里是原有的业务逻辑... # 模拟处理 time.sleep(0.1) return jsonify({result: cat, confidence: 0.95}) app.route(/metrics) def metrics(): 暴露Prometheus指标端点 # 更新GPU指标可以定时更新这里每次访问/metrics时更新 gpu_info get_gpu_info() GPU_UTILIZATION.set(gpu_info[utilization]) GPU_MEMORY_USED.set(gpu_info[memory_used]) return generate_latest(), 200, {Content-Type: CONTENT_TYPE_LATEST} if __name__ __main__: app.run(host0.0.0.0, port8000)这段代码做了几件关键事定义了四种核心指标请求总数、错误数、请求延迟、GPU使用情况。通过装饰器在每次API请求前后自动记录延迟和计数。暴露了一个/metrics端点Prometheus会来这个地址抓取数据。重启丹青识画服务后访问http://localhost:8000/metrics你应该能看到一堆以danqing_开头的指标数据了。这说明你的服务已经成功“开口说话”了。5. 第三步使用Grafana打造可视化仪表盘数据有了接下来我们需要一个漂亮的“驾驶舱”来观察它们。这就是Grafana的舞台。5.1 安装与启动Grafana在Ubuntu/Debian系统上安装非常方便# 添加Grafana仓库并安装 sudo apt-get install -y software-properties-common sudo add-apt-repository deb https://packages.grafana.com/oss/deb stable main wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - sudo apt-get update sudo apt-get install grafana # 启动Grafana服务 sudo systemctl start grafana-server sudo systemctl enable grafana-server安装完成后访问http://你的服务器IP:3000默认用户名和密码都是admin。首次登录会要求修改密码。5.2 配置数据源登录后第一件事是告诉Grafana数据从哪里来。点击左侧齿轮图标进入Configuration-Data Sources。点击Add data source选择Prometheus。在URL一栏填写你的Prometheus地址通常是http://localhost:9090如果Grafana和Prometheus装在同一台机器。点击Save Test如果显示“Data source is working”恭喜你连接成功了。5.3 创建你的第一个监控仪表盘现在可以开始创建图表了。我们以“丹青识画服务QPS每秒查询率”为例。点击左侧加号图标选择Create-Dashboard-Add new panel。在Query选项卡下数据源选择刚才添加的Prometheus。在Metrics浏览器里输入我们的指标名rate(danqing_http_requests_total[1m])。这个PromQL查询语句的意思是计算danqing_requests_total这个计数器在过去1分钟内的平均增长速率也就是QPS。你可以在右侧调整图表的标题、样式等。比如将标题设为“服务总QPS”。点击右上角的Apply保存这个面板。用同样的方法我们可以添加更多面板平均请求延迟rate(danqing_http_request_duration_seconds_sum[5m]) / rate(danqing_http_request_duration_seconds_count[5m])GPU利用率danqing_gpu_utilization_percent错误率rate(danqing_http_errors_total[5m]) / rate(danqing_http_requests_total[5m]) * 100把这些面板拖拽排列好一个实时反映丹青识画系统健康状态的运维仪表盘就初具雏形了。你可以根据团队关注的重点不断调整和丰富这个仪表盘。6. 第四步设置告警变被动为主动可视化让我们能“看见”但运维不能一直盯着屏幕。我们需要系统在出现问题时主动“喊”我们。这就是告警的功能。6.1 在Prometheus中定义告警规则我们在Prometheus的配置文件中提到了alerts.yml现在来创建它。# alerts.yml groups: - name: danqing_service_alerts rules: # 规则1错误率过高告警 - alert: HighErrorRate expr: rate(danqing_http_errors_total[5m]) / rate(danqing_http_requests_total[5m]) * 100 5 for: 2m # 持续2分钟满足条件才触发 labels: severity: warning annotations: summary: 丹青识画服务错误率过高 description: 当前错误率已达 {{ $value }}%超过5%的阈值。请立即检查服务日志。 # 规则2请求延迟过高告警 - alert: HighRequestLatency expr: histogram_quantile(0.95, rate(danqing_http_request_duration_seconds_bucket[5m])) 1 for: 3m labels: severity: warning annotations: summary: 丹青识画服务请求延迟过高 description: 95分位请求延迟已达 {{ $value }}秒超过1秒的阈值。 # 规则3GPU利用率持续过高告警 - alert: HighGPUUtilization expr: avg_over_time(danqing_gpu_utilization_percent[10m]) 85 for: 5m labels: severity: critical annotations: summary: GPU利用率持续过高 description: GPU平均利用率在过去10分钟内高达 {{ $value }}%可能影响服务性能。修改Prometheus的主配置文件prometheus.yml确保rule_files部分指向这个文件然后重启Prometheus服务。6.2 配置Grafana告警通道告警规则定义好了触发了怎么通知我们呢需要在Grafana里配置通知渠道。在Grafana中进入Alerting-Contact points。点击Add contact point选择你需要的通知方式比如最常用的Email或DingTalk钉钉、Slack、Webhook等。以邮件为例填写SMTP服务器信息、发件人、收件人等。保存后当你创建或编辑图表时就可以在Alert选项卡下配置告警规则并选择这个联系点作为通知目标。这样当GPU利用率持续超过85%或者错误率飙升时你就能在几分钟内收到告警邮件或钉钉消息从而在用户投诉到来之前就开始排查问题。7. 总结回过头来看为“丹青识画”系统搭建这套基于Prometheus和Grafana的监控体系投入是值得的。它不再是那个运行在迷雾中的黑盒而是变成了一个各项指标清晰可见、健康状况一目了然的透明系统。从技术实施上说整个过程并不复杂。核心就是四步部署Prometheus抓取数据、在应用代码中暴露关键指标、用Grafana将数据可视化、最后配置告警规则实现主动预警。这套组合拳打下来运维的主动权就大大增强了。实际运行一段时间后最大的感受是“安心”。每天打开Grafana仪表盘看一眼系统的负载、性能、错误情况尽在掌握。通过历史趋势图我们成功预测了两次业务高峰提前进行了资源扩容避免了服务卡顿。告警功能也及时捕捉到了两次因外部依赖导致的错误率上升让我们得以快速响应。如果你也在管理类似的AI服务或在线业务强烈建议花点时间把监控体系建起来。它可能不会直接产生业务价值但却是业务稳定运行的“压舱石”。从最简单的几个核心指标开始逐步丰富你会发现运维工作从此变得更加从容和高效。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻

【动漫制作强者:DaSiWa V9发布】一个基于Wan 2.2 制作的视频模型DaSiWa-WAN 2.2 I2V 14B

【动漫制作强者:DaSiWa V9发布】一个基于Wan 2.2 制作的视频模型DaSiWa-WAN 2.2 I2V 14B

【DaSiWa新版本发布】一个基于Wan 2.2 制作的视频模型DaSiWa-WAN 2.2 I2V 14B 它有效地解决了视频生成时,原版wan22的动作速度偏慢的问题。而且针对二次元画风的视频,DaSiWa非常适合使用。 我在上一篇文章已经介绍过“大丝袜”模型的前面八个版本&…

2026/5/17 8:38:23 阅读更多 →
键盘连击拦截工具:让机械键盘重获新生的信号过滤方案

键盘连击拦截工具:让机械键盘重获新生的信号过滤方案

键盘连击拦截工具:让机械键盘重获新生的信号过滤方案 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 当你在文档中输入"…

2026/5/17 8:38:23 阅读更多 →
EVA-02在.NET生态中的集成:C#调用文本重建服务

EVA-02在.NET生态中的集成:C#调用文本重建服务

EVA-02在.NET生态中的集成:C#调用文本重建服务 最近在做一个企业内部的知识库智能问答项目,技术栈是清一色的.NET。团队想引入一个强大的文本理解与重建模型来提升问答质量,看中了EVA-02的能力。但问题来了:怎么让咱们熟悉的C#代…

2026/7/2 21:43:47 阅读更多 →

最新新闻

【计算机Java毕业设计案例】休闲洗浴场馆营业数据统计管理系统的设计与实现 基于 Java 的洗浴服务项目预约管理系统(程序+文档+讲解+定制)

【计算机Java毕业设计案例】休闲洗浴场馆营业数据统计管理系统的设计与实现 基于 Java 的洗浴服务项目预约管理系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/4 21:15:57 阅读更多 →
LittleArduinoProjects完全指南:开启你的电子创意之旅 [特殊字符]

LittleArduinoProjects完全指南:开启你的电子创意之旅 [特殊字符]

LittleArduinoProjects完全指南:开启你的电子创意之旅 🚀 【免费下载链接】LittleArduinoProjects a collection of "Little Electronic & Arduino Projects", most involving electronics or an Arduino in one way or another! 项目地…

2026/7/4 21:15:57 阅读更多 →
2026视频去水印方法,免费视频去水印实用教程

2026视频去水印方法,免费视频去水印实用教程

在日常浏览短视频、自媒体素材整理、个人作品备份的场景中,视频水印常常会影响画面观感与素材使用效果。很多普通用户都在寻找简单、高效、无门槛的视频去水印方案,尤其是适配手机、电脑多端的免费视频去水印方法。2026年各类去水印工具持续迭代&#xf…

2026/7/4 21:13:56 阅读更多 →
Codex如何为AI代码生成树立质量标杆:从原理到实践

Codex如何为AI代码生成树立质量标杆:从原理到实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 1. 先搞清楚“最严的父亲”到底在说什么 看到“Codex堪称Claude Code最严的父亲”这个标题,第一反应可能是困惑。这不像一…

2026/7/4 21:13:56 阅读更多 →
VisTR完全指南:从安装到推理,30分钟快速掌握视频实例分割神器

VisTR完全指南:从安装到推理,30分钟快速掌握视频实例分割神器

VisTR完全指南:从安装到推理,30分钟快速掌握视频实例分割神器 【免费下载链接】VisTR [CVPR2021 Oral] End-to-End Video Instance Segmentation with Transformers 项目地址: https://gitcode.com/gh_mirrors/vi/VisTR VisTR(End-to-…

2026/7/4 21:11:55 阅读更多 →
CANN/ge LLM-DataDist C++接口列表

CANN/ge LLM-DataDist C++接口列表

# LLM-DataDist-interface-list 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE…

2026/7/4 21:09:54 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻