做成一套“Prometheus + Grafana”的可视化监控页,把 vLLM 自带指标、GPU(VRAM) 指标、容器/主机 CPU&内存 全收集到同一个看板里。

方案总览

数据源(exporters)
1. vLLM 自带 /metrics(Prometheus 格式,含运行中/排队请求数、KV-Cache/GPU 显存占用等)。
2. NVIDIA 显卡:DCGM Exporter 暴露 VRAM/利用率/温度/功耗 等到 /metrics。
• 如果是华为 Ascend,可用 npu-smi 做巡检;Prometheus 侧常用 node_exporter 的 textfile collector 或脚本导出器把 npu-smi 结果转成指标(工程做法)。
3. 容器/宿主机:cAdvisor(容器 CPU/内存/网络/重启次数等)。

采集与展示
• Prometheus 抓取所有 /metrics;Grafana 做“单页看板”。
• 云上也可以直接用 Google Cloud Managed Prometheus + 现成 vLLM Dashboard。
• 如需看“每个请求的阶段耗时/链路”,加 OpenTelemetry + Jaeger(vLLM 已提供 OTel 示例)。

一键部署(Docker Compose 示例)

把下面两个文件放到同一目录:

  1. docker-compose.yml
version: "3.8"
services:
  # 你的 vLLM(也可以是外部已有实例;这里仅示例)
  vllm:
    image: <your_vllm_image>
    command: ["python3","-m","vllm.entrypoints.openai.api_server","--model","/models/qwen3"]
    ports: ["8000:8000"]
    # 如果跑在别处,把 job 里 targets 指到实际地址即可

  # Prometheus(抓取 vLLM /metrics、DCGM、cAdvisor)
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    ports: ["9090:9090"]

  # Grafana(做监控页面)
  grafana:
    image: grafana/grafana
    ports: ["3000:3000"]
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin

  # NVIDIA GPU 指标(DCGM Exporter)
  dcgm:
    image: nvidia/dcgm-exporter:latest
    runtime: nvidia
    privileged: true
    ports: ["9400:9400"]   # /metrics

  # 容器指标(cAdvisor)
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    privileged: true
    ports: ["8080:8080"]
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
  1. prometheus.yml
global:
  scrape_interval: 2s
scrape_configs:
  - job_name: 'vllm'
    metrics_path: /metrics
    static_configs:
      - targets: ['vllm:8000']      # 改成你的 vLLM 地址:端口

  - job_name: 'dcgm'
    static_configs:
      - targets: ['dcgm:9400']      # NVIDIA GPU 指标

  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']  # 容器/系统指标

启动:

docker compose up -d
# 访问 Grafana: http://localhost:3000  (admin / admin)
# 访问 Prometheus: http://localhost:9090

DCGM Exporter 会暴露诸如 DCGM_FI_DEV_FB_USED(显存已用 MiB)、DCGM_FI_DEV_GPU_UTIL(GPU 利用率 %)等指标;Prometheus 会自动抓取。

Grafana 看板怎么做(关键图表 + PromQL)

注:vLLM 指标在不同打包里命名略有差异(上游常见 vllm_running_requests / vllm_waiting_requests;有的发行版写成 vllm_num_requests_running / vllm_num_requests_waiting)。下面给出两套写法,有哪个用哪个。 

A. vLLM 负载 & 排队
• 正在运行请求数(Gauge)
• max(vllm_running_requests) 或 max(vllm_num_requests_running)
• 排队等待请求数(Gauge)
• max(vllm_waiting_requests) 或 max(vllm_num_requests_waiting)

B. vLLM 显存 / KV-Cache(若你的版本暴露了该指标)
• GPU 显存使用(字节 → GiB)
• max(vllm_gpu_memory_usage_bytes) / 1024 / 1024 / 1024 (可做单值 + 阈值配色)

C. GPU(NVIDIA / DCGM)
• 显存使用(MiB)
• DCGM_FI_DEV_FB_USED
• GPU 利用率(%)
• DCGM_FI_DEV_GPU_UTIL
• 温度/功耗(可选)
• DCGM_FI_DEV_GPU_TEMP、DCGM_FI_DEV_POWER_USAGE 等(视驱动/机型)。 

D. 容器/主机(cAdvisor)
• vLLM 容器内存使用
• container_memory_working_set_bytes{container=“vllm”}
• vLLM 容器 CPU 使用率(近 1m)
• rate(container_cpu_usage_seconds_total{container=“vllm”}[1m])

现成模板
• 你也可以直接导入 cAdvisor/Grafana 官方 Docker 容器看板,再加上 vLLM 图表:ID 19908 / 15798(Grafana.com 导入)。 
• 在 GKE 上可直接启用 vLLM 托管看板(Managed Prometheus 提供)。 

告警(Prometheus rules 示例)

新建 alerts.yml 并在 prometheus.yml 里 rule_files: [“alerts.yml”] 引用:

groups:
- name: vllm-alerts
  rules:
  - alert: VLLMWaitingQueueHigh
    expr: (max(vllm_waiting_requests) OR max(vllm_num_requests_waiting)) > 5
    for: 2m
    labels: {severity: warning}
    annotations:
      summary: "vLLM 等待队列偏高"
      description: "等待请求数持续 > 5,可能需要扩批/加副本或限流。"

  - alert: GPUMemoryHigh
    expr: DCGM_FI_DEV_FB_USED / (DCGM_FI_DEV_FB_USED + DCGM_FI_DEV_FB_FREE) > 0.90
    for: 5m
    labels: {severity: warning}
    annotations:
      summary: "GPU 显存使用 > 90%"
      description: "显存紧张,可能影响并发与稳定性。"

  - alert: VLLMNoRequestsButHighMem
    expr: (max(vllm_running_requests) OR max(vllm_num_requests_running)) == 0
          and DCGM_FI_DEV_FB_USED > 2000
    for: 10m
    labels: {severity: info}
    annotations:
      summary: "无请求但显存占用较高"
      description: "检查是否有残留 KV-Cache 或进程泄漏。"

进阶:分布式追踪(可选)

如果你想在页面里看到“一次调用从进入到首 Token/解码完成”的时间线:
• 给 vLLM 开 OpenTelemetry,跑个 Jaeger 或接你已有 OTel Collector;Grafana 也可接 Trace 数据源。vLLM 官方有 OTel 示例与生产栈教程。 

小结(你将获得的“单页监控”)
• vLLM 引擎健康度:运行/等待请求数、(可选)TTFT/吞吐趋势
• 模型资源:KV-Cache/GPU 显存使用(vLLM 暴露) + GPU 真实 VRAM/利用率/温度/功耗(DCGM)
• 容器/系统资源:CPU、内存、网络、重启
• 告警:排队过高、显存吃紧、异常空跑
• (可选)调用链:OTel + Jaeger

上述组件与指标均来自 vLLM 官方/文档与主流 GPU 监控方案(DCGM、cAdvisor),生产上已被广泛采用。

Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐