---
title: "Collect telemetry data"
method: GET
path: "/telemetry"
tags: ["Service"]
---

# Collect telemetry data

`GET /telemetry`

Collect telemetry data including app info, system info, collections info, cluster info, configs and statistics

## Query parameters

- `anonymize` boolean
- `details_level` integer
- `per_collection` boolean
- `timeout` integer

## Response `200`

successful operation

- object
  - `usage` union
    - Usage — Usage of the hardware resources, spent to process the request
      - `hardware` union
        - HardwareUsage — Usage of the hardware resources, spent to process the request
          - `cpu` integer, required
          - `payload_io_read` integer, required
          - `payload_io_write` integer, required
          - `payload_index_io_read` integer, required
          - `payload_index_io_write` integer, required
          - `vector_io_read` integer, required
          - `vector_io_write` integer, required
        - unknown
      - `inference` union
        - InferenceUsage
          - `models` object, required
        - unknown
    - unknown
  - `time` number, float — Time spent to process this request
  - `status` string
  - `result` TelemetryData
    - `id` string, required
    - `app` union
      - AppBuildTelemetry
        - `name` string, required
        - `version` string, required
        - `features` union
          - AppFeaturesTelemetry
            - `debug` boolean, required
            - `service_debug_feature` boolean, required
            - `recovery_mode` boolean, required
            - `gpu` boolean, required
            - `rocksdb` boolean, required
            - `staging` boolean, required
          - unknown
        - `runtime_features` union
          - FeatureFlags
            - `all` boolean — Magic feature flag that enables all features. Note that this will only be applied to all flags when passed into [`init_feature_flags`].
            - `incremental_hnsw_building` boolean — Use incremental HNSW building. Enabled by default in Qdrant 1.14.1.
            - `appendable_quantization` boolean — Use appendable quantization in appendable plain segments. Enabled by default in Qdrant 1.16.0.
            - `single_file_mmap_vector_storage` boolean — Use single-file mmap in-ram vector storage (InRamMmap) Enabled by default in Qdrant 1.18.3+
            - `async_payload_storage` boolean — Allow the io_uring-based payload storage implementation. When disabled, io_uring payload storage is *never* used. When enabled, payload storage backend is decided based on `storage.performance.io_uring` option and payload storage type.
            - `write_segment_manifest` boolean — Write a segment manifest (`segments_manifest.json`, next to the `segments/` directory) listing the shard's segments and their state, so out-of-process readers can discover segments without scanning the filesystem.
            - `append_only_mutations` boolean — Build new segments in append-only mode: in-place point mutations become clone-and-tombstone appends instead. Intended for testing the append-only storage path.
            - `compact_bitmask` boolean — Persist write-once bitmasks in the compact `StoredBitmask` format instead of raw dense bitslices. Only gates writing: both formats are always readable.
            - `serverless_compatible` boolean — Serverless-compatible deployment mode. Automatically enables [`Self::write_segment_manifest`], [`Self::append_only_mutations`] and [`Self::compact_bitmask`]. Note that this will only be applied when passed into [`init_feature_flags`].
          - unknown
        - `low_memory_mode` union
          - union — Controls how segments are loaded on startup to reduce memory pressure. Configured via `storage.low_memory_mode` in the configuration file. This setting only affects *loading* — it never modifies the persisted configuration of any segment. The same data directory will behave differently depending on how this mode is set at startup, which makes it safe to toggle for recovery from out-of-memory crash loops.
            - 'disabled' — No special handling. Every component loads as persisted.
            - 'no_resident' — Load RAM-friendly components as their on-disk variants where possible: * Quantization is loaded as if `always_ram = false`. * Payload field indexes are loaded as if `on_disk = true`. * Payload storage is loaded as the mmap variant (lazy populate).
            - 'no_populate' — Same as [`LowMemoryMode::NoResident`], plus mmap page population is skipped on load (for original vectors, HNSW graph and payload storage).
          - unknown
        - `hnsw_global_config` union
          - HnswGlobalConfig
            - `healing_threshold` number, double — Enable HNSW healing if the ratio of missing points is no more than this value. To disable healing completely, set this value to `0.0`.
          - unknown
        - `system` union
          - RunningEnvironmentTelemetry
            - `distribution` string, nullable
            - `distribution_version` string, nullable
            - `is_docker` boolean, required
            - `cores` integer, nullable
            - `cpu_cores_used` number, float, nullable — Average number of CPU cores used by this process over roughly the last two seconds. `None` on unsupported platforms, before two samples are collected, or on transient failures reading process CPU time.
            - `ram_size` integer, nullable — Effective total memory for this process in KiB (cgroup limit or host RAM).
            - `disk_size` integer, nullable — Size in KiB of the filesystem hosting Qdrant's /storage path (if not available, fallback to host disk size)
            - `cpu_flags` string, required
            - `cpu_endian` union
              - …
            - `gpu_devices` GpuDeviceTelemetry[], nullable
              - …
          - unknown
        - `jwt_rbac` boolean, nullable
        - `hide_jwt_dashboard` boolean, nullable
        - `audit` union
          - AuditTelemetry
            - `dir` string, required
            - `rotation` string, required
            - `max_log_files` integer, required
            - `trust_forwarded_headers` boolean, required
            - `log_api` boolean, required
            - `dir_size_bytes` integer, nullable
          - unknown
        - `startup` string, date-time, required
      - unknown
    - `collections` CollectionsTelemetry, required
      - `number_of_collections` integer, required
      - `max_collections` integer, nullable
      - `collections` CollectionTelemetryEnum[], nullable
        - union
          - CollectionTelemetry
            - `id` string, required
            - `init_time_ms` integer, nullable
            - `config` union
              - …
            - `shards` ReplicaSetTelemetry[], nullable
              - …
            - `transfers` ShardTransferInfo[], nullable
              - …
            - `resharding` ReshardingInfo[], nullable
              - …
            - `shard_clean_tasks` object, nullable
          - CollectionsAggregatedTelemetry
            - `vectors` integer, required
            - `optimizers_status` union, required — Current state of the collection
              - …
            - `params` CollectionParams, required
              - …
      - `snapshots` CollectionSnapshotTelemetry[], nullable
        - `id` string, required
        - `running_snapshots` integer, nullable
        - `running_snapshot_recovery` integer, nullable
        - `total_snapshot_creations` integer, nullable
    - `cluster` union
      - ClusterTelemetry
        - `enabled` boolean, required
        - `status` union
          - ClusterStatusTelemetry
            - `number_of_peers` integer, required
            - `term` integer, required
            - `commit` integer, required
            - `pending_operations` integer, required
            - `role` union
              - …
            - `is_voter` boolean, required
            - `peer_id` integer, nullable
            - `consensus_thread_status` union, required — Information about current consensus thread status
              - …
          - unknown
        - `config` union
          - ClusterConfigTelemetry
            - `grpc_timeout_ms` integer, required
            - `p2p` P2pConfigTelemetry, required
              - …
            - `consensus` ConsensusConfigTelemetry, required
              - …
          - unknown
        - `peers` object, nullable
        - `peer_metadata` object, nullable
        - `metadata` object, nullable
        - `resharding_enabled` boolean, nullable
      - unknown
    - `requests` union
      - RequestsTelemetry
        - `rest` WebApiTelemetry, required
          - `responses` object, required
          - `per_collection_responses` object
        - `grpc` GrpcTelemetry, required
          - `responses` object, required
          - `per_collection_responses` object
      - unknown
    - `memory` union
      - MemoryTelemetry
        - `active_bytes` integer, required — Total number of bytes in active pages allocated by the application
        - `allocated_bytes` integer, required — Total number of bytes allocated by the application
        - `metadata_bytes` integer, required — Total number of bytes dedicated to metadata
        - `resident_bytes` integer, required — Maximum number of bytes in physically resident data pages mapped
        - `retained_bytes` integer, required — Total number of bytes in virtual memory mappings
      - unknown
    - `hardware` union
      - HardwareTelemetry
        - `collection_data` object, required
      - unknown
    - `search_pool` union
      - SearchThreadPoolTelemetry — Live snapshot of the adaptive search routing. `mode` is the runtime currently selected by [`SearchMode`]; `high_cpu_threads` and `high_io_threads` are the blocking-thread budgets of the two underlying runtimes that the adaptive handle routes between.
        - `mode` string, required — Currently active mode (`high_cpu` or `high_io`).
        - `high_cpu_threads` integer, required — Blocking-thread count of the high-CPU runtime.
        - `high_io_threads` integer, required — Blocking-thread count of the high-IO runtime.
      - unknown
    - `quota` union — Resource quota this node is enforcing, and whether it is currently over it. The config is whatever this node last persisted, so a peer that missed a consensus update reports what it is actually applying rather than what the cluster agreed on. Absent for a token without global access, which `GET /quotas` requires as well.
      - QuotaTelemetry — What a node reports about the quota it is enforcing. Carries the verdict rather than the raw utilization, because the point of reporting it is to know whether this node is currently refusing writes — which depends on the limits as well as the readings.
        - `config` QuotaConfig, required — Cluster-wide limits on node resources. An unset limit means the corresponding resource is not capped. Limits are only enforced while `enabled` is true.
          - `enabled` boolean — Whether the limits below are enforced.
          - `max_resident_memory_percent` integer, nullable — Reject memory-consuming updates once process resident memory reaches this percentage of total system memory (or of the cgroup limit, if one applies).
          - `max_disk_usage_percent` integer, nullable — Reject disk-consuming updates once the filesystem hosting the storage directory is filled to this percentage of its capacity.
          - `release_margin_percent` integer, nullable — How many percentage points below its limit a resource has to fall before this node starts accepting work again. Without a margin, a resource resting on its limit crosses it in both directions on the noise between two readings, putting the node in and out of service each time — and restarting a shard recovery with it. Raise it where usage is volatile; `0` disables the margin and releases as soon as usage is back under the limit. Unset leaves the built-in default in force, so a config written today does not pin a number that a later release may want to revise.
        - `exceeded` QuotaExceeded, required — Which of the enforced limits a node is currently refusing work over. Reported per resource because they are freed by different actions: disk by deleting or optimizing, memory by unloading. A single flag would not say which one to go and fix. `true` outlasts the reading that caused it: a resource that reaches its limit stays flagged until it has fallen a margin below, so that one resting near the limit does not flip the node in and out of service. Expect to see it set while the reported utilization is already back under the configured limit. A field is `null` when the node is not enforcing that resource — the quota is disabled, no limit is set for it, or it cannot be measured here. That is deliberately distinct from `false`: a resource that can never trip must not be reported as one that is within its limits, or it invites an alert that can never fire.
          - `resident_memory` boolean, nullable
          - `disk_usage` boolean, nullable
      - unknown

## Other responses

- `default` — error
- `4XX` — error

---

[API](https://skmtc.net/qdrant/apis/qdrant-api.md) · [All operations](https://skmtc.net/qdrant/apis/qdrant-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/qdrant/qdrant-api/revisions/d08b1f613f29/schema)
