Nanbeige4.1-3B链路监控教程:Prometheus+Grafana监控vLLM服务指标

Nanbeige4.1-3B链路监控教程:Prometheus+Grafana监控vLLM服务指标 Nanbeige4.1-3B链路监控教程PrometheusGrafana监控vLLM服务指标你刚刚用vLLM成功部署了Nanbeige4.1-3B模型并用Chainlit搭建了一个漂亮的前端界面。模型运行起来了对话也正常这感觉真不错。但很快你可能会有新的疑问我的模型服务现在健康吗它处理请求的速度怎么样内存和GPU使用情况如何有没有请求失败总不能每次都靠手动刷新页面或者看日志来猜吧这就是为什么我们需要监控。今天我就带你从零开始为你的Nanbeige4.1-3B vLLM服务搭建一套专业的监控系统。我们将使用Prometheus来收集指标用Grafana来可视化展示。整个过程就像给你的模型服务装上一个“仪表盘”所有运行状态一目了然。1. 监控系统能帮你看到什么在动手之前我们先搞清楚这套监控系统能给你带来什么。它不仅仅是几个图表而是你模型服务的“健康体检报告”和“性能仪表盘”。核心监控维度服务健康度你的vLLM服务是不是在正常运行有没有崩溃或重启请求流量当前有多少请求正在处理历史请求量趋势如何是平稳还是存在高峰性能指标延迟用户从发送问题到收到回答平均要等多久这是体验的关键吞吐量每秒能成功处理多少个请求这是能力的体现资源使用率GPU你的显卡被“榨干”了吗利用率高不高内存模型加载后占用了多少显存和内存会不会有内存泄漏的风险错误与异常有多少请求失败了失败的原因是什么快速定位问题想象一下有了这些数据你就能提前预警在服务真正出问题前发现资源使用率飙升或错误率上升的苗头。性能优化发现延迟高的瓶颈在哪里是模型推理慢还是网络传输有问题容量规划根据历史流量趋势决定是否需要升级服务器配置。心里有底再也不用“盲人摸象”对服务的运行状态了如指掌。接下来我们就一步步实现它。2. 环境准备与监控架构我们的目标是在你已经部署了Nanbeige4.1-3B和Chainlit的同一台服务器或容器上增加监控组件。为了最小化侵入性我们采用容器化部署。整体架构很简单vLLM服务作为被监控的目标需要暴露指标接口。Prometheus作为监控数据库和采集器定期从vLLM拉取指标并存储。Grafana作为可视化仪表盘从Prometheus读取数据并绘制成图表。你需要准备一台已经部署了nanbeige4.1-3b-vllm镜像的服务器CSDN星图云容器或你自己的服务器。服务器上安装了Docker和Docker Compose这是最方便的方式。对Linux命令行有基本了解。如果是在CSDN星图云的容器环境中通常Docker是预装好的。我们可以通过WebSSH或终端连接进去操作。3. 第一步让vLLM服务暴露监控指标默认情况下vLLM服务本身不会提供监控指标。我们需要在启动vLLM时开启它的指标导出功能。关键点vLLM内置了对Prometheus格式指标的支持我们只需要在启动命令中添加一个参数。假设你原本的vLLM启动命令是这样的可能写在某个启动脚本里python -m vllm.entrypoints.openai.api_server \ --model /path/to/nanbeige4.1-3b \ --served-model-name nanbeige4.1-3b \ --port 8000为了暴露指标你需要添加--metrics-port参数python -m vllm.entrypoints.openai.api_server \ --model /path/to/nanbeige4.1-3b \ --served-model-name nanbeige4.1-3b \ --port 8000 \ --metrics-port 8001 # 新增指标暴露在8001端口参数解释--port 8000这是API服务端口Chainlit通过这个端口与vLLM通信。--metrics-port 8001这是监控指标端口Prometheus会从这个端口拉取数据。如何修改你需要找到你当前服务的启动方式。如果是在CSDN星图镜像中可能需要修改镜像的启动脚本或环境变量。一个更通用的方法是在容器启动后通过docker exec进入容器用ps aux | grep vllm找到进程然后修改启动命令并重启服务。验证指标是否暴露修改并重启vLLM服务后你可以用curl命令测试一下curl http://localhost:8001/metrics如果看到一堆以# HELP和# TYPE开头后面跟着类似vllm_num_requests_total的文本数据恭喜你第一步成功了4. 第二步使用Docker Compose部署PrometheusPrometheus的配置很简单我们用一个docker-compose.yml文件来定义和启动它。在你的服务器上找一个合适的目录比如/opt/monitoring/然后创建这个文件# docker-compose.yml version: 3.8 services: prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml # 挂载配置文件 - prometheus_data:/prometheus # 持久化存储数据 command: - --config.file/etc/prometheus/prometheus.yml - --storage.tsdb.path/prometheus - --web.console.libraries/etc/prometheus/console_libraries - --web.console.templates/etc/prometheus/consoles - --storage.tsdb.retention.time30d # 数据保留30天 - --web.enable-lifecycle ports: - 9090:9090 # 将Prometheus的Web界面映射到宿主机的9090端口 networks: - monitoring-net grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped volumes: - grafana_data:/var/lib/grafana # 持久化存储Grafana数据如仪表盘配置 environment: - GF_SECURITY_ADMIN_PASSWORDadmin123 # 设置Grafana管理员密码请务必修改 ports: - 3000:3000 # 将Grafana的Web界面映射到宿主机的3000端口 networks: - monitoring-net depends_on: - prometheus networks: monitoring-net: driver: bridge volumes: prometheus_data: grafana_data:接下来在同一个目录下创建Prometheus的配置文件prometheus.yml# prometheus.yml global: scrape_interval: 15s # 每15秒抓取一次指标 evaluation_interval: 15s # 每15秒评估一次规则 scrape_configs: - job_name: vllm static_configs: - targets: [host.docker.internal:8001] # 关键这里指向vLLM的指标端口 labels: service: nanbeige4.1-3b-vllm关键配置解释scrape_interval: Prometheus抓取指标的频率15秒是个平衡点既不会太频繁增加负担又能及时反映变化。targets: 这里指定了vLLM服务的地址。host.docker.internal是一个特殊的DNS名称在Docker容器内指向宿主机的IP。这意味着Prometheus容器会去访问宿主机上的8001端口。如果你的vLLM也运行在Docker容器中并且和Prometheus在同一个Docker网络下你可以使用vLLM容器的服务名和端口例如targets: [vllm-service:8001]。如果都在宿主机直接运行可以改成targets: [localhost:8001]或targets: [127.0.0.1:8001]。现在启动监控服务cd /opt/monitoring docker-compose up -d用docker-compose ps检查两个容器是否都正常运行。访问http://你的服务器IP:9090可以打开Prometheus的Web界面。在顶部导航栏点击 “Status” - “Targets”你应该能看到一个名为vllm的job状态是UP。这表示Prometheus已经成功连接到你的vLLM服务并开始采集数据了。5. 第三步配置Grafana数据源和仪表盘Prometheus存好了数据但我们还需要一个漂亮的界面来展示它这就是Grafana的工作。登录Grafana打开浏览器访问http://你的服务器IP:3000。默认用户名是admin密码是我们在docker-compose.yml里设置的admin123你应该改一个更复杂的。添加数据源登录后点击左边栏的齿轮图标 “Configuration” - “Data Sources”。点击 “Add data source”选择 “Prometheus”。在 “HTTP” 部分的 “URL” 中填写http://prometheus:9090因为Grafana和Prometheus在同一个Docker网络中可以用服务名访问。其他设置保持默认点击最下方的 “Save Test”。如果显示 “Data source is working”就成功了。导入现成的仪表盘 从头创建仪表盘很费时间幸运的是社区已经有了一些针对vLLM或类似AI服务的Grafana仪表盘模板。我们可以直接导入。点击左边栏的 “” 号 - “Import”。在 “Import via grafana.com” 输入框中输入仪表盘ID19077这是一个流行的LLM服务监控仪表盘兼容vLLM指标。或者你也可以在Grafana官网搜索 “vLLM” 或 “LLM Monitoring” 寻找其他模板。加载后在 “Prometheus” 下拉框中选择你刚才创建的数据源。点击 “Import”。现在你应该能看到一个功能丰富的监控仪表盘了它可能包含了请求率、延迟分布、GPU内存使用率、Token生成速度等多个面板。6. 核心监控指标解读与仪表盘定制导入的仪表盘很好但理解每个图表的意义更重要。这样你才能根据自己的需求进行调整。我们来认识几个最关键的vLLM指标1. 请求与吞吐量vllm_num_requests_total收到的总请求数。rate(vllm_num_requests_total[5m])过去5分钟的平均请求速率QPS。这是看服务忙不忙的核心指标。2. 延迟Latencyvllm_request_duration_seconds_bucket这是一个直方图指标记录了请求处理时间的分布。通过它我们可以计算平均延迟rate(vllm_request_duration_seconds_sum[5m]) / rate(vllm_num_requests_total[5m])P99/P95延迟比如99%的请求在多少秒内完成。这个比平均延迟更能反映尾部用户体验。在Grafana中可以用histogram_quantile(0.99, rate(vllm_request_duration_seconds_bucket[5m]))来计算。3. 资源使用vllm_gpu_memory_usage_percentGPU显存使用百分比。vllm_cpu_memory_usage_percentCPU内存使用百分比。DCGM_FI_DEV_GPU_UTIL如果你安装了NVIDIA DCGM exporter还能看到GPU计算利用率。4. 生成Generation指标vllm_num_tokens_generated_total生成的总Token数。rate(vllm_num_tokens_generated_total[5m])Token生成速率Tokens per second。这直接反映了模型的推理速度。定制你的仪表盘你可以点击仪表盘标题选择 “Edit”然后自由地调整面板移动位置调整大小。修改查询点击面板标题 - “Edit”可以修改PromQL查询语句调整时间范围、计算方式等。添加警报在面板上设置规则当指标超过阈值如延迟5秒错误率1%时通过邮件、Slack等方式通知你。创建新面板点击顶部 “Add panel”根据上面提到的核心指标创建你最关心的图表。7. 总结从部署到洞察至此你已经为你的Nanbeige4.1-3B vLLM服务成功搭建了一套从数据采集Prometheus到可视化Grafana的完整监控链路。让我们回顾一下关键步骤和收获启用了vLLM的指标暴露功能这是所有监控的基础。通过Docker Compose快速部署了Prometheus和Grafana并将它们连接到vLLM服务。在Grafana中导入并初步配置了一个专业的监控仪表盘立刻获得了服务运行的全景视图。现在你的模型服务不再是一个“黑盒”。你可以实时观察用户请求是否平稳有没有突发流量。每个请求的响应时间是否在可接受范围内。宝贵的GPU和内存资源是否被有效利用。服务是否健康稳定错误是否发生。这套监控系统是你进行服务运维、性能调优和容量规划的眼睛。建议你花些时间熟悉Grafana根据你的具体业务需求定制专属的监控视图和警报规则让它真正成为你保障AI服务稳定运行的得力助手。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。