OpenTelemetry support is real in four of eight engines and absent in the rest; a trace of one request is one span in vLLM and three spans in Triton, and neither is per-token
Fields
gotchas/obs-tracing-status-per-engine-honest-negativesNotes
Disaggregated prefill/decode is where the traces differ most and where they are most worth having. SGLang has a 2-GPU CI test that asserts a request through a load balancer in PD mode emits spans named prefill_transfer_kv_cache, decode_transferred and mooncake_worker_send - so the KV handoff across the wire is traceable, and the same request also feeds `sglang:per_stage_req_latency_seconds{stage=...}` because the metrics and the trace share one stage vocabulary. TensorRT-LLM's OTel guide documents proxy configuration for disaggregated serving, so context does propagate, but the spans are not broken down by phase. vLLM's disaggregated path has no documented per-phase span structure; the KV-transfer wait appears only in metrics (`vllm:num_requests_waiting_by_reason{reason="deferred"}` covers 'KV transfer' among the deferral causes, and `vllm:num_requests_kv_fetch_by_stage` splits async KV load into waiting_to_start / in_progress / completed_waiting) rather than as trace spans. That is the honest state: vLLM can tell you a request is waiting on a KV fetch; SGLang can show you the transfer itself in a timeline.
Cross-references
Affects (16)
- Inference enginesvLLM
- Inference enginesSGLang
- Inference enginesTensorRT-LLM
- Inference enginesText Generation Inference
- Inference enginesTriton Inference Server
- Inference enginesllama.cpp
- Inference enginesLMDeploy (TurboMind)
- Inference enginesOllama
- Inference enginesvLLM (observability surface: Prometheus metrics + OpenTelemetry)
- Inference enginesSGLang (observability surface: Prometheus metrics + OpenTelemetry with per-stage slices)
- Inference enginesTensorRT-LLM (observability surface: Prometheus metrics + OpenTelemetry)
- Inference enginesText Generation Inference (observability surface: no TTFT, no KV cache usage, no tracing spans of its own)
- Inference enginesTriton Inference Server (observability surface: request-shaped core metrics, LLM metrics only if a backend registers them)
- Inference enginesllama.cpp server (observability surface: 14 hand-built Prometheus metrics, off by default, no OTel)
- Inference enginesLMDeploy (observability surface: near-copy of vLLM's metric set, no preemption metric, no OTel)
- Inference enginesOllama (observability surface: none - no /metrics endpoint, no tracing, per-response timing only)