LLM inference looks simple from the outside: prompt in, response out. But underneath, there’s a GPU memory allocator managing KV cache blocks, a routing layer scoring pods by prefix match quality, and a token generation pipeline sensitive to batch sizes, queue depths, and thermal throttling.
When latency spikes from 200ms to 4 seconds, you need to know which layer is the bottleneck -- not just that something is slow. That’s what llm-d monitoring gives you.
The Endpoint Picker Policy exposes metrics on port 9090 via a ServiceMonitor. These tell you how routing decisions are being made:
Each vLLM replica exposes metrics on port 8000 via a PodMonitor. These show what’s happening inside the inference engine:
NVIDIA’s Data Center GPU Manager provides hardware-level telemetry via the GPU Operator:
llm-d monitoring runs on OpenShift’s built-in monitoring stack -- Prometheus and Grafana, no external tools needed.
# Enable user workload monitoring
oc apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: user-workload-monitoring-config
namespace: openshift-user-workload-monitoring
data:
config.yaml: |
prometheus:
retention: 24h
resources:
requests:
cpu: 200m
memory: 1Gi
EOF
Then deploy the ServiceMonitor for EPP metrics and PodMonitor for vLLM metrics. The companion web app includes the full YAML configs and a real dashboard.json you can import directly into Grafana.
Prefix cache hit rate drops below 50%. TTFT spikes as every request does full prefill. Cause: traffic pattern changed, or KV cache is too small for the working set.
A pod restarts and loses its KV cache. Hit rate dips temporarily as the cache warms back up. Watch for: cascading restarts that keep the cache cold.
Pool saturation exceeds 1.0. EPP throttles incoming requests. Queue depth grows. Action: scale replicas or shed lower-priority traffic.
Utilization exceeds 92%. LRU eviction starts dropping cached prefixes. Hit rate degrades. Action: increase KV cache allocation or reduce max sequence length.
Temperature exceeds 85°C. GPU clock speed drops. Throughput decreases 15–30%. Action: check cooling, reduce batch size, or redistribute load.
The interactive monitoring simulator lets you explore all five failure scenarios without a cluster. Switch between healthy and degraded states, watch metrics respond in real time, and copy the PromQL queries and alert rules for your own deployment.
The dashboard.json ships in the GitHub repo -- import it into Grafana and you’re monitoring llm-d in production.