Chandra vLLM服务监控:Prometheus+Grafana指标采集,GPU利用率实时看板

1. 监控需求与方案概述

在实际部署Chandra vLLM服务后,很多用户会遇到这样的问题:服务运行是否正常?GPU资源利用情况如何?处理速度是否达到预期?如果没有合适的监控工具,就像在黑暗中开车一样,完全不知道系统状态。

这就是为什么我们需要为Chandra vLLM服务搭建完整的监控体系。通过Prometheus采集指标数据,Grafana进行可视化展示,我们可以实时掌握:

  • GPU利用率和使用情况
  • 内存占用和显存使用
  • 请求处理速度和吞吐量
  • 服务健康状态和错误率

本文将手把手教你搭建完整的监控系统,让你对Chandra vLLM服务的运行状况了如指掌。

2. 环境准备与组件安装

2.1 系统要求

在开始之前,请确保你的系统满足以下要求:

  • Ubuntu 18.04+ 或 CentOS 7+
  • Docker 和 Docker Compose 已安装
  • NVIDIA GPU 驱动和 CUDA 工具包
  • 至少 4GB 可用内存(用于监控组件)

2.2 安装Prometheus

首先创建监控专用的目录结构:

mkdir -p chandra-monitoring/{prometheus,grafana}
cd chandra-monitoring

创建Prometheus配置文件 prometheus/prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node-exporter:9100']

  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']

  - job_name: 'nvidia-gpu'
    static_configs:
      - targets: ['nvidia-gpu-exporter:9835']

创建Docker Compose文件 docker-compose.yml

version: '3.8'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus:/etc/prometheus
      - 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.time=200h'
      - '--web.enable-lifecycle'
    restart: unless-stopped

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)'
    restart: unless-stopped

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro
    devices:
      - /dev/kmsg:/dev/kmsg
    restart: unless-stopped

  nvidia-gpu-exporter:
    image: nvidia/dcgm-exporter:latest
    container_name: nvidia-gpu-exporter
    environment:
      - NVIDIA_DISABLE_REMOTE_CLIENT=true
    volumes:
      - /run/nvidia:/run/nvidia:ro
    restart: unless-stopped

volumes:
  prometheus_data:

2.3 安装Grafana

创建Grafana配置文件目录和数据目录:

mkdir -p grafana/{data,provisioning}

docker-compose.yml 中添加Grafana服务:

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - ./grafana/data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin123
      - GF_USERS_ALLOW_SIGN_UP=false
    restart: unless-stopped
    depends_on:
      - prometheus

3. 配置数据采集与指标导出

3.1 启动监控服务

现在启动所有监控组件:

docker-compose up -d

检查服务状态:

docker-compose ps

你应该看到所有服务都处于运行状态。现在可以通过以下地址访问各个服务:

  • Prometheus: http://localhost:9090
  • Grafana: http://localhost:3000 (用户名: admin, 密码: admin123)

3.2 配置Chandra vLLM指标导出

Chandra vLLM服务本身提供了Prometheus指标端点。确保你的vLLM服务启动时启用了指标收集:

# 启动Chandra vLLM服务并启用指标导出
python -m vllm.entrypoints.api_server \
    --model chandra-ocr-model \
    --host 0.0.0.0 \
    --port 8000 \
    --enable-prometheus-metrics

在Prometheus配置中添加vLLM作业,编辑 prometheus/prometheus.yml

scrape_configs:
  # 添加vLLM监控配置
  - job_name: 'vllm'
    static_configs:
      - targets: ['your-vllm-host:8000']  # 替换为实际的vLLM服务地址
    metrics_path: '/metrics'
    scrape_interval: 10s

重新加载Prometheus配置:

curl -X POST http://localhost:9090/-/reload

4. Grafana看板配置

4.1 添加数据源

登录Grafana后,首先添加Prometheus数据源:

  1. 点击左侧菜单的"Configuration" → "Data Sources"
  2. 点击"Add data source"
  3. 选择"Prometheus"
  4. 设置URL为: http://prometheus:9090
  5. 点击"Save & Test"

4.2 导入GPU监控看板

Grafana社区提供了丰富的监控看板模板。我们将使用NVIDIA GPU监控看板:

  1. 点击左侧菜单的"+" → "Import"
  2. 输入看板ID: 15143 (NVIDIA DCGM Exporter Dashboard)
  3. 选择刚才添加的Prometheus数据源
  4. 点击"Import"

4.3 创建自定义Chandra监控看板

除了通用的GPU监控,我们还需要专门针对Chandra vLLM服务的监控看板。创建新的看板:

GPU利用率面板

# GPU利用率
DCGM_FI_DEV_GPU_UTIL{instance=~"$instance"}

# 显存使用率
DCGM_FI_DEV_MEM_COPY_UTIL{instance=~"$instance"}

# 显存使用量
DCGM_FI_DEV_FB_USED{instance=~"$instance"}

vLLM服务指标面板

# 请求吞吐量
rate(vllm_num_requests_completed_total[1m])

# 平均响应时间
rate(vllm_request_latency_seconds_sum[1m]) / rate(vllm_request_latency_seconds_count[1m])

# 当前活跃请求
vllm_num_requests_running

# 错误率
rate(vllm_num_requests_failed_total[1m]) / rate(vllm_num_requests_started_total[1m])

4.4 关键监控指标说明

指标类别 关键指标 正常范围 告警阈值
GPU使用 GPU利用率 40-90% >95% 或 <10%
显存使用 显存使用量 根据模型调整 >90% 总显存
服务性能 请求延迟 <2秒 >5秒
服务健康 错误率 <1% >5%
吞吐量 QPS 根据硬件调整 下降50%

5. 告警配置与通知

5.1 配置Prometheus告警规则

创建告警规则文件 prometheus/alerts.yml

groups:
- name: chandra-alerts
  rules:
  - alert: HighGPUUsage
    expr: avg(rate(DCGM_FI_DEV_GPU_UTIL[5m])) by (instance) > 95
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "高GPU使用率 (实例 {{ $labels.instance }})"
      description: "GPU使用率持续高于95%,当前值: {{ $value }}%"

  - alert: HighMemoryUsage
    expr: (DCGM_FI_DEV_FB_USED / DCGM_FI_DEV_FB_FREE) * 100 > 90
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "高显存使用率 (实例 {{ $labels.instance }})"
      description: "显存使用率高于90%,当前值: {{ $value }}%"

  - alert: HighRequestLatency
    expr: rate(vllm_request_latency_seconds_sum[5m]) / rate(vllm_request_latency_seconds_count[5m]) > 5
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "高请求延迟 (实例 {{ $labels.instance }})"
      description: "平均请求延迟超过5秒,当前值: {{ $value }}秒"

在Prometheus配置中引用告警规则:

rule_files:
  - alerts.yml

5.2 配置告警通知

在Grafana中配置告警通知渠道:

  1. 点击"Alerting" → "Contact points"
  2. 添加邮件、Slack或Webhook通知渠道
  3. 测试通知是否正常工作

6. 实际监控效果展示

完成以上配置后,你将获得一个功能完整的监控看板,包含以下关键信息:

GPU监控区域

  • 实时GPU利用率曲线图
  • 显存使用情况和趋势
  • 温度和功耗监控

服务性能区域

  • 请求吞吐量(QPS)实时显示
  • 平均响应时间监控
  • 并发请求数统计

资源使用区域

  • CPU和内存使用情况
  • 磁盘IO和网络流量
  • 容器资源限制和使用

这样的监控看板让你能够:

  • 实时了解服务运行状态
  • 快速定位性能瓶颈
  • 预测资源需求并进行扩容
  • 及时发现并处理异常情况

7. 总结

通过本文的指导,你已经成功为Chandra vLLM服务搭建了完整的监控系统。这个系统不仅能够监控GPU利用率,还能全面掌握服务的运行状态、性能指标和资源使用情况。

关键收获

  • 学会了使用Prometheus + Grafana搭建监控系统
  • 掌握了GPU和服务指标的采集方法
  • 配置了实用的监控看板和告警规则
  • 建立了完整的服务监控体系

后续优化建议

  • 根据实际业务需求调整监控指标
  • 设置自动化扩容策略基于监控指标
  • 定期review监控数据优化资源配置
  • 建立监控数据的长期存储和分析

现在你可以 confidently 运行Chandra vLLM服务,因为你有了一双"眼睛"时刻监控着系统的健康状况。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐