OpenLLM资源监控面板:Grafana Dashboard配置指南
【免费下载链接】OpenLLM Operating LLMs in production 项目地址: https://gitcode.com/gh_mirrors/op/OpenLLM
痛点直击:LLM生产环境的监控困境
你是否曾在生产环境中遇到这些问题:Llama3服务突然无响应却找不到根源?GPU内存占用率飙升导致推理延迟?Qwen2.5的token生成速度骤降却无法定位瓶颈?作为LLMOps工程师,缺乏专业监控工具就像在迷雾中驾驶——你永远不知道何时会偏离航线。
本文将手把手教你构建OpenLLM专属Grafana监控面板,通过Prometheus+Node Exporter+自定义指标三管齐下,实现从硬件层到应用层的全栈可观测性。读完本文你将获得:
- 5分钟部署的监控基础设施
- 12个核心指标的实时可视化
- 8个预制告警规则模板
- 多模型对比分析能力
- 性能瓶颈自动诊断流程
监控架构总览
OpenLLM监控系统采用经典的"采集-存储-展示"三层架构,结合LLM推理特性进行深度优化:
核心组件说明:
- Node Exporter:采集CPU/内存/GPU等硬件指标
- vLLM内置指标:通过
--enable-prometheus暴露推理性能数据 - BentoML Stats:提供API调用量、延迟等服务指标
- 自定义Exporter:扩展token吞吐量、上下文窗口利用率等LLM特有指标
环境准备与部署
前置条件检查
确保你的OpenLLM环境满足以下要求:
- Python 3.8+
- OpenLLM v0.4.23+
- Docker 20.10+
- NVIDIA驱动525.60.13+(GPU环境)
通过以下命令验证OpenLLM版本:
openllm --version
# 应输出 openllm, version 0.4.23+
监控组件一键部署
使用Docker Compose快速搭建完整监控栈:
# docker-compose.monitor.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:v2.45.0
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- "9090:9090"
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.retention=15d'
node-exporter:
image: prom/node-exporter:v1.6.1
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
ports:
- "9100:9100"
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
grafana:
image: grafana/grafana:10.1.5
volumes:
- grafana-data:/var/lib/grafana
- ./grafana-provisioning:/etc/grafana/provisioning
environment:
- GF_SECURITY_ADMIN_PASSWORD=openllm-monitor
ports:
- "3000:3000"
depends_on:
- prometheus
volumes:
prometheus-data:
grafana-data:
启动监控栈:
# 后台启动所有组件
docker-compose -f docker-compose.monitor.yml up -d
# 检查服务状态
docker-compose -f docker-compose.monitor.yml ps
OpenLLM指标暴露配置
基础指标启用
修改OpenLLM启动命令,添加监控相关参数:
openllm serve llama3.2:1b \
--env PROMETHEUS_ENABLED=true \
--env PROMETHEUS_PORT=8000 \
--env METRICS_PATH=/metrics \
--engine-config enable-prometheus=true
参数说明:
PROMETHEUS_ENABLED:开启BentoML内置指标PROMETHEUS_PORT:指标暴露端口(默认8000)enable-prometheus:启用vLLM推理引擎指标
Prometheus配置
创建prometheus.yml文件,添加以下采集配置:
global:
scrape_interval: 5s # LLM场景建议5秒间隔
evaluation_interval: 5s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'openllm'
metrics_path: '/metrics'
static_configs:
- targets: ['host.docker.internal:8000'] # 宿主机OpenLLM服务
- job_name: 'gpu'
static_configs:
- targets: ['nvml-exporter:9400'] # GPU专用 exporter
Grafana仪表盘配置
初始设置
- 访问Grafana界面:http://localhost:3000
- 登录默认账号(admin/openllm-monitor)
- 添加Prometheus数据源:
- 名称:OpenLLM-Prometheus
- URL:http://prometheus:9090
- 保存并测试连接
导入仪表盘模板
通过ID导入3个核心仪表盘:
- Node Exporter Full(ID: 1860)- 系统监控
- GPU Monitoring(ID: 12006)- GPU监控
- LLM Inference Dashboard(下文提供)
自定义OpenLLM仪表盘
创建专用仪表盘,包含以下关键指标面板:
1. 服务健康概览
{
"panels": [
{
"title": "服务状态",
"type": "stat",
"targets": [
{
"expr": "up{job='openllm'}",
"legendFormat": "服务状态",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"mappings": [
{
"value": "1",
"op": "=",
"text": "运行中"
},
{
"value": "0",
"op": "=",
"text": "已停止"
}
],
"thresholds": {
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 0.5
}
]
}
}
}
}
]
}
2. 推理性能面板
核心指标查询语句:
| 指标名称 | PromQL查询 | 单位 | 告警阈值 |
|---|---|---|---|
| 吞吐量 | rate(vllm_tokens_generated_total[5m]) | token/s | <10 |
| 延迟 | histogram_quantile(0.95, sum(rate(bentoml_request_duration_seconds_bucket[5m])) by (le)) | 秒 | >2 |
| GPU利用率 | avg(gpu_utilization_percentage) by (instance) | % | >90 |
| 内存占用 | sum(gpu_memory_used_bytes) / sum(gpu_memory_total_bytes) * 100 | % | >85 |
3. 多模型对比面板
{
"title": "模型性能对比",
"type": "graph",
"targets": [
{
"expr": "rate(vllm_tokens_generated_total{model=~\"llama3.2.*\"}[5m])",
"legendFormat": "{{model}}",
"refId": "A"
},
{
"expr": "rate(vllm_tokens_generated_total{model=~\"qwen2.5.*\"}[5m])",
"legendFormat": "{{model}}",
"refId": "B"
}
],
"fieldConfig": {
"defaults": {
"unit": "token/s",
"min": 0
}
}
}
关键指标详解与告警设置
硬件层指标
| 指标名称 | 说明 | 合理范围 | 告警阈值 |
|---|---|---|---|
| node_cpu_seconds_total | CPU使用率 | <70% | >85% |
| node_memory_used_percent | 内存使用率 | <60% | >80% |
| gpu_utilization_percentage | GPU利用率 | 40-70% | >90%持续5分钟 |
| gpu_memory_used_bytes | GPU内存占用 | <75% | >85% |
| node_network_transmit_bytes_total | 网络发送速率 | - | >100MB/s |
推理层指标
vLLM提供的核心指标:
# 推理吞吐量
vllm_tokens_generated_total{model="llama3.2:1b"}
vllm_tokens_processed_total{model="llama3.2:1b"}
# 缓存效率
vllm_cache_hit_rate{model="llama3.2:1b"}
# 请求队列
vllm_pending_requests{model="llama3.2:1b"}
vllm_running_requests{model="llama3.2:1b"}
应用层指标
BentoML暴露的服务指标:
# 请求统计
bentoml_service_requests_total{service_name="openllm", status="success"}
bentoml_service_requests_duration_seconds_bucket{service_name="openllm"}
# 并发量
bentoml_service_concurrent_requests{service_name="openllm"}
告警规则配置
在Grafana中创建以下告警:
-
GPU内存溢出预警
- 表达式:
gpu_memory_used_percent > 85 - 持续时间:2分钟
- 通知级别:警告
- 表达式:
-
推理延迟增加
- 表达式:
increase(bentoml_service_requests_duration_seconds_sum[5m])/increase(bentoml_service_requests_duration_seconds_count[5m]) > 2 - 持续时间:1分钟
- 通知级别:严重
- 表达式:
-
缓存命中率下降
- 表达式:
vllm_cache_hit_rate < 0.7 - 持续时间:5分钟
- 通知级别:信息
- 表达式:
高级监控特性
性能瓶颈诊断
使用Grafana Explore功能,运行以下诊断查询:
# 找出最慢的10%请求
histogram_quantile(0.9, sum(rate(bentoml_service_requests_duration_seconds_bucket[5m])) by (le))
# 定位GPU等待时间过长的请求
sum(rate(vllm_request_wait_time_seconds_sum[5m])) by (model)
自定义业务指标
通过OpenLLM的analytic.py扩展业务指标:
from bentoml._internal.utils.analytics import track
# 添加自定义指标
def track_token_usage(model_name, input_tokens, output_tokens):
track({
"name": "token_usage",
"model": model_name,
"input_tokens": input_tokens,
"output_tokens": output_tokens,
"timestamp": time.time()
})
最佳实践与优化建议
监控频率调整
根据模型规模调整采集间隔:
- 7B以下模型:5秒间隔
- 13B-70B模型:10秒间隔
- 70B以上模型:15秒间隔
存储优化
Prometheus数据保留策略:
storage:
tsdb:
retention: 7d # 保留7天数据
retention_size: 50GB # 限制存储容量
可视化优化
- 使用热图展示GPU利用率时间分布
- 为不同模型创建独立变量组
- 设置自动刷新(建议10秒)
- 关键指标使用Big Value面板突出显示
故障排除指南
常见问题解决
-
指标采集失败:
# 检查OpenLLM指标端点 curl http://localhost:8000/metrics # 检查容器网络连通性 docker exec -it prometheus curl http://host.docker.internal:8000/metrics -
GPU指标缺失:
- 确保nvidia-docker已安装
- 检查nvml-exporter日志:
docker logs nvml-exporter
-
仪表盘空白:
- 验证Prometheus targets状态
- 检查时间范围设置(默认Last 6 hours)
总结与后续计划
本文详细介绍了OpenLLM监控系统的部署、配置和使用,涵盖从硬件到应用的全栈可观测性方案。通过这套监控体系,你可以:
- 实时掌握LLM服务健康状态
- 快速定位性能瓶颈
- 预测资源需求增长
- 优化模型部署策略
下期预告:《LLM性能调优实战:从P99延迟到GPU利用率提升300%》
🔔 行动指南:立即部署监控系统,将本文收藏以备后续优化,并关注项目更新获取最新仪表盘模板!
附录:完整Grafana仪表盘JSON可在OpenLLM官方仓库的docs/monitoring目录获取,或通过ID 19876导入社区版仪表盘。
【免费下载链接】OpenLLM Operating LLMs in production 项目地址: https://gitcode.com/gh_mirrors/op/OpenLLM
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



