Skip to main content
Version: dev

Router Metrics

Reference for the Prometheus metrics exported by the llm-d Router deployment components: the Endpoint Picker (EPP, llm_d_epp_ prefix), the KV-Cache index and event pool (llm_d_epp_kv_cache_*), the Disaggregation Sidecar (llm_d_disagg_sidecar_ and moriio_dns_ prefixes), and the Coordinator (llm_d_coordinator_ prefix). To scrape them, see Collect Metrics; for ready-to-run queries, see the PromQL Query Reference, and for alerts built on them, see Configure Alerts.

Request and Latency​

MetricWhat it measuresWhy it matters
llm_d_epp_request_totalTotal request count per model, flow ID, and priorityBaseline for calculating error rate and throughput per model
llm_d_epp_request_error_totalError count per model, flow ID, priority, and error codeRising errors signal backend failures. Alert when error rate exceeds 5%
llm_d_epp_request_duration_secondsResponse latency distribution per model, flow ID, and priorityThe primary latency SLO metric. Tracks full round-trip time from request to response; carries trace exemplars
llm_d_epp_request_size_bytesIncoming request size distribution in bytes per model, flow ID, and priorityHelps identify payload size anomalies and exceptionally large incoming prompts
llm_d_epp_response_size_bytesOutgoing response size distribution in bytes per model, flow ID, and priorityTracks outgoing bandwidth usage and response payload size distribution
llm_d_epp_request_input_tokensInput token count distribution per model, flow ID, and priorityHelps identify expensive requests. Long prompts cost more compute
llm_d_epp_request_output_tokensOutput token count distribution per model, flow ID, and priorityCombined with duration, gives normalized cost and generation volume per token
llm_d_epp_request_cached_tokensCached prompt token distribution per model, flow ID, and priorityMeasures prompt tokens served from prefix cache as reported by model servers
llm_d_epp_request_runningActive request count per model, flow ID, and priorityShows real-time in-flight request concurrency across models
llm_d_epp_request_ntpot_secondsNormalized time per output token (NTPOT) distribution per model, flow ID, and priorityKey efficiency metric (lower is better). Compare across pods to find stragglers
llm_d_epp_request_ttft_secondsTime to first token (TTFT) distribution per model, flow ID, priority, and streaming modeDirectly measures user-perceived responsiveness and time to initial output byte
llm_d_epp_request_streaming_tpot_secondsTime per output token (TPOT) distribution per model, flow ID, and priority; applicable to streaming requestsTracks ongoing generation speed excluding initial prompt prefill latency
llm_d_epp_request_streaming_itl_secondsInter-token latency (ITL) distribution per model, flow ID, and priority; applicable to streaming requestsMeasures pacing between consecutive response body chunks; spikes indicate choppy output

Inference Pool​

MetricWhat it measuresWhy it matters
llm_d_epp_ready_endpointsNumber of ready endpoints in the poolIf this drops below expected count, pods are crashing or not scheduling
llm_d_epp_average_kv_cache_utilizationMean KV cache utilization across the poolHigh average utilization signals the pool is nearing memory capacity
llm_d_epp_average_queue_sizeMean queue depth across model serversPrimary signal for pool saturation and autoscaling decisions
llm_d_epp_average_running_requestsMean running requests across model serversTracks concurrency across endpoints
llm_d_epp_std_dev_kv_cache_utilizationSpread of KV cache utilization across endpointsHigh standard deviation indicates uneven cache distribution
llm_d_epp_std_dev_queue_sizeSpread of queue depth across endpointsHigh variance points to routing imbalances
llm_d_epp_std_dev_running_requestsSpread of in-flight requests across endpointsHelps diagnose stragglers or hotspotting
llm_d_epp_per_endpoint_queue_sizePer-endpoint queue depthIdentifies overloaded model-server replicas
llm_d_epp_per_endpoint_nixl_failed_transfers_totalPer-endpoint failed NIXL KV cache transfersSurfaces NIXL KV transfer failures between disaggregated prefill and decode pods
llm_d_epp_per_endpoint_nixl_failed_notifications_totalPer-endpoint failed NIXL KV cache notificationsSurfaces NIXL notification delivery failures between model servers
llm_d_epp_per_endpoint_nixl_kv_expired_requests_totalPer-endpoint requests whose KV cache expired before readIndicates disaggregation pipeline delays where cached KV blocks timed out before decode consumed them

Scheduler, Plugins & Processing Overhead​

MetricWhat it measuresWhy it matters
llm_d_epp_scheduler_attempts_totalScheduling attempt counts by status, target model, endpoint, namespace, and portTrack failed scheduling attempts. High failure rate indicates filter/scorer misconfiguration
llm_d_epp_scheduler_e2e_duration_secondsEnd-to-end scheduling latency distributionTracks latency spent within the EPP scheduling cycle
llm_d_epp_plugin_duration_secondsPer-plugin processing latency distribution by extension point, plugin type, and nameIdentifies slow or bottlenecked scheduling plugins
llm_d_epp_plugin_data_scope_violations_totalTotal endpoint attribute accesses rejected due to undeclared DataKeysNon-zero value indicates plugin implementation drift from declaration
llm_d_epp_request_processing_duration_secondsTime from request receipt until request body has been handledMeasures EPP request ingest and admission overhead
llm_d_epp_response_processing_duration_secondsEPP response processing latencyMeasures response streaming handler overhead
llm_d_epp_infoBuild information (commit, build_ref)Verifies running binary release and build details
llm_d_epp_model_rewrite_decisions_totalTotal model rewrite decisions by rule name, source model, and target modelTracks request rewrites across configured rewrite rules

In-Flight Load​

MetricWhat it measuresWhy it matters
llm_d_epp_inflight_requestsRequests currently in flight on each endpoint by namespace, producer, flow ID, and priorityPer-replica queue depth for load-aware routing and capacity analysis
llm_d_epp_inflight_tokensTokens currently in flight on each endpoint by namespace, producer, flow ID, and priorityPer-replica token pressure, a finer load signal than request count

Disaggregation & Rollout​

MetricWhat it measuresWhy it matters
llm_d_epp_disagg_decision_totalRouting decisions across disaggregation stages (decode-only, prefill-decode, encode-decode, encode-prefill-decode)Tracks breakdown of requests processed per disaggregation mode
llm_d_epp_disaggregatedset_strict_revision_no_match_totalStrict revision selections that matched no endpointSurfaces requests arriving with a revision header that has no Ready endpoint
llm_d_epp_disaggregatedset_revision_gating_shareCurrent weighted revision gating share (0 to 1) per revision and modeMonitors canary and rolling deployment shares across disaggregated revisions

Flow Control​

When flow control is enabled (flowControl feature gate), these additional metrics are exposed:

MetricWhat it measuresWhy it matters
llm_d_epp_flow_control_queue_sizeQueued request count per flow ID, priority, pool, and modelGrowing queue means the pool cannot keep up. Consider scaling or adjusting priority bands
llm_d_epp_flow_control_queue_bytesQueued payload size in bytes per flow ID, priority, pool, and modelLarge queued payloads can exhaust EPP memory. Monitor alongside maxBytes config
llm_d_epp_flow_control_request_queue_duration_secondsQueuing duration distribution per flow ID, priority, outcome, pool, and modelDirectly impacts user-perceived latency. High values mean flow control is holding requests too long
llm_d_epp_flow_control_dispatch_cycle_duration_secondsInternal dispatch cycle duration distributionTracks execution speed and overhead of the flow control scheduler loop
llm_d_epp_flow_control_request_enqueue_duration_secondsRequest enqueue duration distribution per flow ID, priority, and outcomeMeasures admission overhead entering the flow control queue
llm_d_epp_flow_control_pool_saturationPool saturation level (0.0 to 1.0+) by pool and stage (prefill, decode, effective)Above 1.0 means demand exceeds capacity and flow control is actively throttling. Scale up or shed load
llm_d_epp_flow_control_stale_endpointsNumber of candidate endpoints with missing or stale telemetry by detector and stageNon-zero value indicates telemetry scraping issues rather than genuine overload
llm_d_epp_flow_control_detector_saturationSaturation reported by each child detector of a max-saturation-detectorIdentifies which specific detector (e.g., concurrency vs utilization) is driving pool saturation
llm_d_epp_flow_control_capacity_utilization_requestsFraction of a priority band's effective request capacity currently occupied (0.0–1.0)Alert on priority band saturation before requests are rejected (RejectedCapacity)
llm_d_epp_flow_control_capacity_utilization_bytesFraction of a priority band's effective byte capacity currently occupied (0.0–1.0)Monitors memory pressure per priority band to avoid hitting byte limits
llm_d_epp_flow_control_global_capacity_utilization_requestsFraction of global request capacity currently occupied across all priority bands (0.0–1.0)Tracks cluster-wide request saturation against the global capacity ceiling
llm_d_epp_flow_control_global_capacity_utilization_bytesFraction of global byte capacity currently occupied across all priority bands (0.0–1.0)Tracks cluster-wide memory pressure against the global byte capacity ceiling
llm_d_epp_flow_control_requests_totalTotal requests processed by flow control by outcomeDirect signal for rejection (outcome="RejectedCapacity") and eviction rates
llm_d_epp_flow_control_revocations_issued_totalTotal in-flight eviction revocations issued by priority and poolTracks preemptive capacity reclamation events under contention
llm_d_epp_flow_control_revocations_totalTotal in-flight eviction revocations by outcome (confirmed, timed_out)Confirms stream cancellation success vs timeout
llm_d_epp_flow_control_reclaim_targetLast computed reclamation deficitMeasures capacity deficit driving revocations
llm_d_epp_flow_control_pending_reclaimOutstanding and cooling pending-reclaim debitsTracks in-flight reclamation debits before confirmation
llm_d_epp_flow_control_revocation_confirmation_secondsRevocation issue to confirmed termination durationLatency signal for in-flight eviction completion
llm_d_epp_program_aware_jains_fairness_indexJain's fairness index across active programsQuantifies fairness balance across competing programs
llm_d_epp_program_aware_avg_wait_time_millisecondsMean queue wait time per program in msMonitors per-program queuing delays
llm_d_epp_program_aware_attained_service_tokensTime-decayed attained service per programTracks historical consumption used for Least Attained Service (LAS) scheduling

Prefix & Multimodal Cache​

MetricWhat it measuresWhy it matters
llm_d_epp_prefix_indexer_sizeEntries in the approximate prefix index by pluginTracks approximate prefix index memory footprint
llm_d_epp_prefix_indexer_hit_ratioPrefix-match hit ratio distribution by pluginHigh hit ratio indicates effective approximate prefix caching
llm_d_epp_prefix_indexer_hit_bytesBytes matched per prefix lookup by pluginQuantifies data reused from approximate prefix cache
llm_d_epp_prefix_predicted_cached_tokensPrompt tokens predicted to hit the chosen endpoint's prefix cacheCompares predicted cache reuse against delivered tokens to evaluate routing accuracy
llm_d_epp_prefix_best_predicted_cached_tokensHighest prefix prediction among endpoints the scheduler selected fromLocates shortfall in scoring and picking against reachable reuse
llm_d_epp_prefix_best_available_cached_tokensHighest prefix prediction among candidate endpoints before filteringIdentifies cache reuse lost due to load shedding or filtering
llm_d_epp_prefix_prompt_tokensPrompt tokens the prefix predictions were measured againstNormalizes prefix cache predictions to compute predicted hit ratios
llm_d_epp_prefix_mm_predicted_cached_tokensMultimodal prompt tokens predicted to hit the chosen endpoint's prefix cacheEvaluates multimodal prefix cache prediction efficiency
llm_d_epp_prefix_mm_prompt_tokensMultimodal prompt tokens the multimodal prediction was measured againstNormalizes multimodal prefix cache predictions to compute multimodal hit ratios
llm_d_epp_token_producer_render_duration_secondsDuration of token-producer render calls by backend and resultTracks latency of prompt tokenization and rendering via vLLM backend
llm_d_epp_token_producer_render_failures_totalTotal failed token-producer render calls by backend and reasonSurfaces render timeouts, connection errors, and decoding failures
llm_d_epp_encoder_cache_queries_totalTotal multimodal encoder-cache lookups by plugin and modalityVolume of multimodal items queried against cache
llm_d_epp_encoder_cache_hits_totalEncoder-cache hits per pod and modalityTracks multimodal embedding cache reuse
llm_d_epp_encoder_cache_hit_ratioHit ratio distribution for encoder-cache lookupsSurfaces uneven multimodal cache locality across pods
llm_d_epp_prefix_cache_affinity_filter_decisions_totalPrefix cache affinity filter decisions by outcomeSurfaces whether scheduling decisions were guided by cache affinity or overridden by load gates

KV-Cache Index & Events (Precise Prefix Cache)​

These metrics belong to the precise-prefix-cache pipeline (enabled via indexerConfig.kvBlockIndexConfig.enableMetrics):

MetricWhat it measuresWhy it matters
llm_d_epp_kv_cache_index_admissions_totalBlocks admitted to the KV-cache indexTracks index ingestion volume of new KV blocks
llm_d_epp_kv_cache_index_evictions_totalBlocks evicted from the KV-cache indexMonitors index turnover and capacity pressure
llm_d_epp_kv_cache_index_lookup_requests_totalTotal KV-cache index lookups performedTracks query throughput into the precise prefix cache index
llm_d_epp_kv_cache_index_lookup_hits_totalContiguous prefix blocks matched by the best pod per lookupQuantifies cache block reuse across routing decisions
llm_d_epp_kv_cache_index_max_pod_hit_count_totalLongest contiguous per-pod prefix chain observed per lookupIdentifies maximum prefix match depth available in the cluster
llm_d_epp_kv_cache_index_lookup_latency_secondsKV-cache index lookup and walk latency distributionMeasures latency overhead of prefix tree lookups during request scheduling
llm_d_epp_kv_cache_events_dedup_removed_hashes_suppressed_totalBlock removal hashes suppressed by deduplicationVerifies dedup filter efficiency in suppressing redundant eviction events
llm_d_epp_kv_cache_events_dedup_removed_hashes_forwarded_totalBlock removal hashes forwarded for evictionTracks actual eviction event volume processed by the index
llm_d_epp_kv_cache_events_stores_skipped_totalKV-cache store events skipped before prefix indexing by cache kind and reasonSurfaces skipped store events by cache kind and reason
llm_d_epp_kv_cache_events_removals_skipped_totalKV-cache removal events skipped before prefix indexing by cache kind and reasonSurfaces skipped removal events for untracked cache groups
llm_d_epp_kv_cache_events_active_subscribersNumber of ZeroMQ subscribers currently managedConfirms EPP connection health to model-server KV event streams
llm_d_epp_kv_cache_events_subscriber_reconnections_totalZeroMQ subscriber reconnection attempts per podHigh count indicates network instability or crashing model-server pods
llm_d_epp_kv_cache_events_messages_received_totalMessages received from ZeroMQ subscribers per podMeasures KV event message volume streamed from each model server
llm_d_epp_kv_cache_events_zmq_errors_totalZeroMQ subscriber errors by pod and operationAlerts on communication failures with model-server event publishers
llm_d_epp_kv_cache_events_pool_queue_depthTotal messages queued across all event worker shardsHigh queue depth indicates event processing backlog in the EPP
llm_d_epp_kv_cache_events_pool_capacityNumber of worker shards in the event processing poolConfirms event worker pool sizing and concurrency

ThunderAgent Session Affinity​

These metrics belong to the thunderagent session affinity plugin:

MetricWhat it measuresWhy it matters
llm_d_epp_thunder_agent_sessionsTracked agent sessions by state (running, idle)Monitors active and idle session concurrency under session affinity routing
llm_d_epp_thunder_agent_endpoint_working_set_tokensSession KV working set per endpoint in tokensCompare with engine KV cache utilization: high working set over low utilization reveals KV cache thrashing
llm_d_epp_thunder_agent_endpoint_capacity_tokensTotal KV token capacity per endpointBaselines session capacity limits per backend replica

Predicted Latency & SLO​

MetricWhat it measuresWhy it matters
llm_d_epp_request_predicted_ttft_secondsPredicted TTFT distributionUsed by latency-based scheduling to evaluate candidates
llm_d_epp_request_ttft_prediction_duration_secondsTime spent computing TTFT predictionsMeasures overhead of the predictor sidecar
llm_d_epp_request_predicted_tpot_secondsPredicted TPOT distributionEvaluates token generation latency across backends
llm_d_epp_request_tpot_prediction_duration_secondsTime spent computing TPOT predictionsMeasures TPOT predictor execution latency
llm_d_epp_request_slo_violation_totalCount of requests violating configured latency SLOsPrimary alert signal for SLO degradation
llm_d_epp_inference_request_metricConsolidated gauge for observed request metrics and SLO statesFlexible single-series export of TTFT, TPOT, and SLO metrics
llm_d_epp_request_prediction_failures_totalFailed latency prediction attempts by reasonSurfaces predictor sidecar communication and inference failures

ext_proc Streams & Data Layer Errors​

MetricWhat it measuresWhy it matters
llm_d_epp_extproc_streams_inflightNumber of open ext_proc gRPC streams (opt-in)Monitors Envoy↔EPP gRPC stream connections
llm_d_epp_extproc_stream_duration_secondsDuration ext_proc gRPC streams stay openSudden short durations indicate stream reconnect churn
llm_d_epp_extproc_streams_totalCompleted ext_proc gRPC streams by status codeSurfaces abnormal stream disconnects and errors
llm_d_epp_datalayer_poll_errors_totalData-source poll failures per source typeSignals failing telemetry scrapes from model servers
llm_d_epp_datalayer_extract_errors_totalExtractor failures per source/extractor typeSignals parsing failures on scraped telemetry payloads

Disaggregation Sidecar & MoRI-IO DNS​

These metrics are emitted by the disaggregation sidecar proxy and MoRI-IO peer resolver:

MetricWhat it measuresWhy it matters
llm_d_disagg_sidecar_requests_totalTotal intercepted inference API requests by API typeMonitors request traffic entering the disaggregation sidecar proxy
llm_d_disagg_sidecar_disagg_requests_totalTotal requests routed through disaggregation by disaggregation typeTracks disaggregation execution volume through the sidecar
llm_d_disagg_sidecar_encode_duration_secondsEncode stage latency distribution in secondsMeasures latency spent in multimodal encoding
llm_d_disagg_sidecar_prefill_duration_secondsPrefill stage latency distribution in secondsMeasures time spent in the disaggregated prefill stage
llm_d_disagg_sidecar_decode_duration_secondsDecode stage latency distribution in secondsMeasures generation latency in the disaggregated decode stage
llm_d_disagg_sidecar_request_errors_totalDisaggregation stage errors by stage (encode, prefill, decode)Identifies stage-specific failures in disaggregated request pipelines
moriio_dns_reresolve_totalSuccessful request-path re-resolutions of peer DNS namesConfirms MoRI-IO peer address re-resolution activity
moriio_dns_ip_changed_totalRe-resolutions where a peer resolved to a new IPIndicates peer pod restarts or IP reassignments
moriio_dns_lookup_failures_totalFailed peer DNS lookups on the request pathAlerts on DNS resolution failures where sidecar falls back to last-known-good IP

Coordinator Metrics​

These metrics are emitted by the llm-d Coordinator (llm_d_coordinator_ prefix) at entry and across pipeline execution:

MetricWhat it measuresWhy it matters
llm_d_coordinator_request_totalTotal inbound client requests accepted by the coordinator by modelBaseline throughput for client-facing inference requests including malformed bodies
llm_d_coordinator_request_error_totalFailed client requests by model and error codePrimary failure signal for the coordinator pipeline
llm_d_coordinator_request_duration_secondsEnd-to-end request latency distribution by modelFull round-trip time from client request to final response byte
llm_d_coordinator_request_size_bytesIncoming request body size distribution in bytesTracks inbound payload sizes before pipeline fan-out
llm_d_coordinator_response_size_bytesTotal bytes written to the client per request by stream modeTracks egress data volume including partial writes on client disconnect
llm_d_coordinator_request_input_tokensPrompt token count distribution measured after renderingMeasures input prompt size distribution across client requests
llm_d_coordinator_request_runningActive client requests currently being processed by the coordinatorTracks real-time coordinator concurrency
llm_d_coordinator_step_duration_secondsPer-step wall-time latency distribution across pipeline stagesPinpoints which pipeline stage dominates request duration
llm_d_coordinator_step_errors_totalTotal pipeline-step failures by step and error codeIdentifies which internal stage failed during request execution
llm_d_coordinator_step_runningRequests currently executing each pipeline stepTracks concurrency per pipeline stage (decode reflects active streaming responses)
llm_d_coordinator_upstream_request_totalOutbound calls to upstream services by upstream targetMeasures external call volume and fan-out (e.g. concurrent encode subrequests)
llm_d_coordinator_upstream_request_duration_secondsLatency distribution of individual outbound calls to upstream servicesMeasures per-call latency of upstream services independent of batch fan-out
llm_d_coordinator_execution_path_totalClient requests by executed disaggregation pathTracks real-world execution path distribution across workloads
llm_d_coordinator_conditional_decode_probes_totalConditional-decode probes by outcome (served, deferred, error, transport_error)Evaluates cache hit rate and early-exit efficiency of conditional decode
llm_d_coordinator_encode_subrequestsNumber of encode subrequests generated per client requestQuantifies multimodal fan-out across images
llm_d_coordinator_orchestration_overhead_secondsCoordinator wall time outside parsing and step executionMeasures internal coordination overhead of the pipeline executor
llm_d_coordinator_media_itemsMedia items found per client request by media type (image, other)Measures multimodal input richness per request
llm_d_coordinator_media_download_duration_secondsDuration of outbound media download attempts by resultMeasures latency and reliability of external media asset downloads