inference/research
verifiedhigh · 0.94updated 2026-10-04

SGLang time-to-first-token histogram (is_streaming split)

sglang · histogram

Fields

id
metric-exposures/w3m-sglang-sglang-time-to-first-token-seconds
Metric name
sglang:time_to_first_token_seconds
Metric type
histogram
Unit
seconds
Exposure
prometheus
Endpoint
:30000/metrics
Histogram buckets
0.10.20.40.60.8124681020406080100200400
Labels
model_nameengine_typetp_rankpp_rankmoe_ep_rankis_streaming
Enabled by default
no
Phase scoped
yes
notes
SGLang main, python/sglang/srt/observability/metrics_collector.py, read 2026-10-04. NOT ON BY DEFAULT: nothing is exported unless --enable-metrics (ServerArgs default False), which is also the only thing that mounts /metrics on the server port. Label keys are model_name, engine_type, tp_rank, pp_rank, moe_ep_rank (plus dp_rank under data parallelism, priority under priority scheduling, and anything in extra_metric_labels). Bucket ladders are overridable per histogram via get_histogram_conf_from_env. Carries an is_streaming label that vLLM has no equivalent of. The source comment explains the name: 'stream' is a reserved thrift keyword, so downstream storage columns cannot carry it. Definition from the docs: time from request creation in the API server to the first token, and for streaming requests it ends when the first output arrives AFTER detokenization - so a detokenizer stall lands inside TTFT.

Notes

SGLang main, python/sglang/srt/observability/metrics_collector.py, read 2026-10-04. NOT ON BY DEFAULT: nothing is exported unless --enable-metrics (ServerArgs default False), which is also the only thing that mounts /metrics on the server port. Label keys are model_name, engine_type, tp_rank, pp_rank, moe_ep_rank (plus dp_rank under data parallelism, priority under priority scheduling, and anything in extra_metric_labels). Bucket ladders are overridable per histogram via get_histogram_conf_from_env. Carries an is_streaming label that vLLM has no equivalent of. The source comment explains the name: 'stream' is a reserved thrift keyword, so downstream storage columns cannot carry it. Definition from the docs: time from request creation in the API server to the first token, and for streaming requests it ends when the first output arrives AFTER detokenization - so a detokenizer stall lands inside TTFT.

Cross-references