vLLM Monitoring and Observability with OpenTelemetry SigNoz published a guide for monitoring self-hosted vLLM inference servers by sending Prometheus metrics and OpenTelemetry request traces to SigNoz. The guide has operators scrape vLLM's /metrics endpoint on port 8000 every 30 seconds via an OpenTelemetry Collector, dropping the '_created' timestamp series that account for 111 of the 405 exposed series and roughly a quarter of ingested data. Traces are exported directly from vLLM to SigNoz using the OTEL_SERVICE_NAME and OTEL_EXPORT environment variables, bypassing the Collector. Overview vLLM is an inference server that you run yourself. It serves models over an OpenAI-compatible API. It reports its own health in two ways: Prometheus metrics on an HTTP endpoint, and OpenTelemetry traces for each request. This guide sends both to SigNoz. The metrics answer questions that only the server can answer. How many tokens per second is the GPU producing? How full is the key-value cache, the memory pool that holds attention state for active requests? How many requests wait in the queue? Prerequisites - A vLLM server that you can restart - An OpenTelemetry Collector that can reach the vLLM host. See Install the OpenTelemetry Collector https://signoz.io/docs/opentelemetry-collection-agents/get-started/ - An instance of SigNoz Cloud https://signoz.io/teams/ or Self-Hosted https://signoz.io/docs/install/self-host/ Send vLLM metrics to SigNoz Step 1: Confirm the metrics endpoint vLLM serves Prometheus metrics at /metrics on the same port as the API, and it needs no flag to turn them on. Confirm the endpoint responds: curl -s http://localhost:8000/metrics | head If you changed the port, use that port instead of 8000 . Step 2: Add a scrape job to the Collector Append this scrape job to your existing otel-collector-config.yaml . Do not replace the whole file. otel-collector-config.yaml receivers: prometheus: config: scrape configs: - job name: vllm scrape interval: 30s static configs: - targets: '