/metrics endpoint. These are the primary signals for inference health and performance. Use this page to find the signals you care about and to point your own monitoring stack at the right endpoint.
This page is for operators running a self-hosted deployment. The metrics live in the poolside-models namespace.
The deployment does not bundle a metrics stack. No Prometheus, Grafana, or OpenTelemetry collector runs by default, and no
ServiceMonitor or PodMonitor CRDs are installed. The endpoints below are exposed, but nothing scrapes them until you wire up your own monitoring. See Collect the metrics.Model server metrics
The vLLM model server exposes native vLLM metrics on:8080/metrics, under the vllm:*, http_*, and python_* prefixes. There is one Kubernetes Deployment per model, with pods named inference-\<uuid\>. The examples below resolve the target pod by Helm label at runtime, so they keep working as pods are renamed on redeploy. Core vLLM metrics are present on an idle pod, with counters and histograms starting at 0.
What to watch
Latency and throughput
The user-facing performance signals. They are histograms, so alert on high percentiles rather than averages.Load and queue
How saturated the engine is. The first place to look when latency climbs or when deciding whether to scale.KV cache and prefix caching
KV-cache pressure and prefix-cache hit rate largely determine throughput and latency under load.Token counts
Use these for cost tracking, capacity planning, and understanding workload shape.Speculative decoding
Present only when speculative decoding is enabled. Accepted over draft tokens is the acceptance rate; a low rate means speculation is wasting compute.Model FLOPs utilization
Use these to estimate model FLOPs utilization (MFU) and tell whether a workload is compute-bound or memory-bound.Runtime and miscellaneous
This list reflects the metrics exposed by the deployed model server. The metric surface can change between releases, so confirm the exact set against a live scrape of your deployment using the commands in Scrape the endpoint.
Collect the metrics
The deployment does not ship a monitoring stack, so the metrics listed earlier are exposed but unscraped until you set up collection:- No
prometheus.io/scrapeannotations are present, and noServiceMonitororPodMonitorCRDs are installed. - The deployment does not bundle Prometheus, Grafana, VictoriaMetrics, Thanos, or an OpenTelemetry collector.
ServiceMonitor or PodMonitor resources if you run the Prometheus Operator. For one-off checks, use the port-forward commands in the next section.
Scrape the endpoint
Run these commands from a host withkubectl access to the deployment’s cluster. Resolve the target pod by its Helm label, port-forward it, curl the local port, then stop the forward. Resolving by label keeps the command working as pods are renamed on redeploy.
In one terminal, resolve the vLLM model server pod by its Helm label and port-forward its metrics port. Leave this running:
grep '^# HELP' | sort. When you are done, stop the port-forward with Ctrl+C in the first terminal.
The endpoint details are:
When more than one model is deployed, the
component=inference selector matches every model’s pods and jsonpath picks the first. To target a specific model, append its model label, for example app.kubernetes.io/component=inference,app.kubernetes.io/model=<model>.
Counters that have not been incremented yet report
0 rather than being absent, so an idle pod still exposes the full set of metrics described above. If a scrape returns nothing, check the port-forward terminal for connection errors.