10 分钟跑通 SGLang 监控:从空面板到 3 条告警规则
10 分钟跑通 SGLang 监控从空面板到 3 条告警规则【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang凌晨 2 点值班群里没人说话你盯着 Grafana 面板一片空白曲线一根都没有。服务其实一直在跑是 SGLang 监控的链路没接通。10 分钟之后你应该能拿到一个有数据的面板、3 条能触发真告警的规则以及一套照着敲就能排空面板的排查顺序。先说链路怎么走后面每一步都能对上号1. 先把指标点亮让 :30000/metrics 有东西吐结论不带--enable-metrics启动的 SGLang 服务没有/metrics端点Prometheus 抓到的永远是 404。在跑服务的机器上启动服务python -m sglang.launch_server \ --model-path meta-llama/Meta-Llama-3.1-8B-Instruct \ --port 30000 \ --enable-metrics跑一下试试验证指标端点已生效curl -s http://localhost:30000/metrics | head -5预期输出前几行长这样# HELP sglang:prompt_tokens_total Number of prefill tokens processed. # TYPE sglang:prompt_tokens_total counter sglang:prompt_tokens_total{model_namemeta-llama/Meta-Llama-3.1-8B-Instruct} 0.0把 Prometheus 和 Grafana 拉起来仓库里 examples/monitoring/ 给了现成的编排文件直接起cd examples/monitoring docker compose up -d确认方式浏览器打开http://localhost:3000Grafana和http://localhost:9090Prometheus。这个编排有两个省心的细节两个容器都用network_mode: hostGrafana 配了匿名 Viewer 登录——不用输 admin/admin打开就是面板入口在 SGLang Monitoring 文件夹。起不来先看端口lsof -i :9090 lsof -i :3000有输出说明端口被占docker stop container_id掉冲突容器再起。空面板第一查在 Prometheus 控制台对指标名先打几个请求把指标喂出时序再打开 Prometheus 首页的 Explore 标签输入下面这条sglang_num_running_reqs没数据先别怀疑面板去 curl 对比名字curl -s http://localhost:30000/metrics | grep e2e_request_latency/metrics 里吐出来的名字带sglang:前缀和你查询里写的名字面板模板里是sglang_下划线形式差一个字符都查不出来。以 /metrics 的实际输出为准拼查询这是空面板的第一嫌疑比检查网络、数据源都快。对上了面板 1~2 个采集周期内就会出线。2. 给延迟画条警戒线3 条规则不是越多越好用 P99不用平均结论平均延迟会把长尾抹平用户投诉的永远是那个卡了 30 秒的请求。仓库自带面板examples/monitoring/grafana/dashboards/json/sglang-dashboard.json里 99/90/50 三个分位已经画好你的警戒线应该跟着 99 分位走。查询长这样histogram_quantile(0.99, sum by (le) (rate(sglang_e2e_request_latency_seconds_bucket[5m])))判断标准99 分位稳定在 10 秒以内、50 分位在 1 秒以内8B 模型在正常负载下就该是这个量级99 分位突然翻倍再去看队列和缓存别直接扩卡。只留 3 条会叫的规则告警配多了等于没有告警。下面这套阈值可以直接抄级别按你们自己的值班习惯调规则表达式触发条件级别P99 端到端延迟上面那条histogram_quantile 10 秒持续 5 分钟P2队列堆积sglang_num_queue_reqs 100 个请求持续 2 分钟P1KV 缓存打满sglang_token_usage取值 0~1 0.9持续 1 分钟P2前缀缓存失效sglang_cache_hit_rate 0.5持续 10 分钟P3队列那条最值得重视请求先排队、后计算sglang_num_queue_reqs涨起来通常比用户感知到延迟更早是这套 SGLang 监控里最好的前置信号。在 Grafana 里 Alerting → New alert rule表达式、持续时长照表格填通知渠道按你现有的接邮件、Slack 都行。这套编排栈里没有自带 Alertmanager通知出口要你自己配这是它开箱范围的边界先知道。5 秒采集间隔别乱改prometheus.yaml 里scrape_interval: 5s。队列尖峰往往只持续几十秒采集周期拉到 30 秒以上尖峰就被平滑掉了告警永远追不上。反过来也别设 1 秒——8B 模型单机场景 5 秒已经能分辨出趋势。3. 空面板、端口打架按这张表排排障顺序就是先对指标名再看端口最后才怀疑网络。现象先查这里验证命令Grafana 整板空白Explore 里sglang_num_running_reqs是否出数curl -s localhost:30000/metrics \| grep running端口冲突起不来9090 / 3000 被谁占了lsof -i :9090多实例抓不到Prometheus targets 是否含该实例的 30000 端口http://localhost:9090/targets面板有、告警无规则表达式里的指标名是否与 /metrics 一致把规则表达式贴进 Explore 试跑几个容易踩的点容器访问宿主机这套 compose 是 host 网络模式Prometheus 直接抓127.0.0.1:30000不用host.docker.internal多实例时在 prometheus.yaml 的 targets 里追加宿主机 IP 即可。数据保留Prometheus 默认只留 15 天。要留 30 天给 docker-compose.yaml 里 prometheus 服务加一个启动参数--storage.tsdb.retention.time30d改的是你自己本地的编排文件不是仓库。只读限制Grafana 现在是匿名 Viewer能看图不能改规则。要落地告警需要把GF_AUTH_BASIC_ENABLEDfalse关掉并启用账号登录改的同样是本地 compose 文件。继续往下走想深入按这个顺序看完整指标表在 docs/docs/references/production_metrics.mdx每条指标的 HELP 说明都能直接抄进告警文案观测体系总览含 OpenTelemetry 追踪接入在 docs/docs/advanced_features/observability.mdx指标注册和分位数桶的定义源码在 python/sglang/srt/observability/metrics_collector.py想确认某个指标什么时候被更新直接搜Gauge(和Histogram(就能定位。【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考