Per-collection vectors, shard health, search latency, cluster state —
all the data Qdrant's native /metrics leaves out.
One container. Zero config. Pre-built Grafana dashboard included.
/metrics doesn't expose
Qdrant's built-in endpoint gives you Go runtime stats and basic request counts.
The rich per-collection data lives in /telemetry and /cluster —
but is never surfaced as Prometheus metrics for self-hosted deployments.
This exporter bridges that gap.
/metrics → This exporterAll metrics are prefixed with qdrant_exporter_ to avoid collision with native qdrant_ metrics.
/collections, /telemetryPer-collection and per-shard vector counts, storage bytes, health status, and optimizer state.
/clusterNode topology, Raft consensus health, shard distribution, transfer progress, and resharding state.
/telemetrySearch latency by type, optimizer throughput, indexing ratio, and per-collection RAM/disk usage.
Three ways to run the exporter — pick whatever fits your setup.
# Docker Hub docker run -d \ --name qdrant-exporter \ -p 9153:9153 \ -e QDRANT_EXPORTER_QDRANT__NODES='[{"url":"http://host.docker.internal:6333"}]' \ --add-host host.docker.internal:host-gateway \ baselhusam/qdrant-exporter # GHCR docker run -d \ --name qdrant-exporter \ -p 9153:9153 \ -e QDRANT_EXPORTER_QDRANT__NODES='[{"url":"http://host.docker.internal:6333"}]' \ --add-host host.docker.internal:host-gateway \ ghcr.io/baselhusam/qdrant-exporter
Prometheus scrape target: http://<host>:9153/metrics — add to your existing Prometheus config.
services: qdrant-exporter: image: baselhusam/qdrant-exporter restart: unless-stopped ports: ["9153:9153"] environment: QDRANT_EXPORTER_QDRANT__NODES: '[{"url":"http://host.docker.internal:6333"}]' extra_hosts: ["host.docker.internal:host-gateway"] prometheus: image: prom/prometheus:latest restart: unless-stopped ports: ["9090:9090"] volumes: - ./deploy/prometheus.yml:/etc/prometheus/prometheus.yml:ro extra_hosts: ["host.docker.internal:host-gateway"] grafana: image: grafana/grafana:latest restart: unless-stopped ports: ["3000:3000"] environment: GF_SECURITY_ADMIN_USER: admin GF_SECURITY_ADMIN_PASSWORD: admin volumes: - ./deploy/grafana/provisioning:/etc/grafana/provisioning:ro - ./dashboards:/etc/grafana/provisioning/dashboards:ro
Open Grafana at http://localhost:3000 (admin / admin). Dashboard auto-provisioned.
git clone https://github.com/baselhusam/qdrant_exporter cd qdrant_exporter # Spin up Qdrant + exporter + Prometheus + Grafana docker compose --profile fullstack up -d # Or attach to an existing Qdrant on localhost:6333 docker compose --profile monitoring up -d
localhost:3000
localhost:9090
localhost:9153/metrics
localhost:6333
pip install qdrant-exporter # Start with a config file qdrant-exporter --config qdrant-exporter.yaml # Or point at Qdrant via env var QDRANT_EXPORTER_QDRANT__NODES='[{"url":"http://localhost:6333"}]' \ qdrant-exporter
Requires Python 3.11+. Prometheus scrape target: http://localhost:9153/metrics
Configure via YAML file or environment variables. All fields are optional — defaults work out of the box.
qdrant: nodes: - url: http://localhost:6333 api_key: your-key-here # omit if no auth scrape_interval: 15 # seconds telemetry_details_level: 3 # required on Qdrant 1.16+ exporter: port: 9153 log_level: info # debug|info|warning|error metric_prefix: qdrant_exporter
# Prefix: QDRANT_EXPORTER_ # Nested delimiter: __ QDRANT_EXPORTER_QDRANT__NODES=\ '[{"url":"http://localhost:6333", "api_key":"secret"}]' QDRANT_EXPORTER_EXPORTER__PORT=9153 QDRANT_EXPORTER_EXPORTER__LOG_LEVEL=debug
Note on telemetry_details_level
Required for per-collection shard and storage metrics on Qdrant 1.16+.
Defaults to 3. Override via
QDRANT_EXPORTER_QDRANT__TELEMETRY_DETAILS_LEVEL if needed.
The exporter is pull-based — it queries Qdrant on every Prometheus scrape, not on a timer.
Ships with a pre-built dashboard that auto-loads when you use the Docker Compose setup.
Import manually from dashboards/qdrant-overview.json into any Grafana instance.
The exporter performs a version check at startup and prints a compatibility assessment.