> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://api.qdrant.tech/v-1-17-x/api-reference/distributed/cluster-telemetry/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api.qdrant.tech/_mcp/server. # Collect cluster telemetry data GET http://localhost:6333/cluster/telemetry Get telemetry data, from the point of view of the cluster. This includes peers info, collections info, shard transfers, and resharding status Reference: https://api.qdrant.tech/api-reference/distributed/cluster-telemetry ## Authentication - `api-key` header (required) — API Key authentication via header ## Servers - `http://localhost:6333` (http, default) - `https://localhost:6333` (https) ## Request ### Query parameters - `details_level` (integer, optional) — The level of detail to include in the response - `timeout` (integer, optional, default: 60) — Timeout for this request ## Response ### 200 successful operation - `usage` (ClusterTelemetryGetResponsesContentApplicationJsonSchemaUsage, optional) - `time` (double, optional) — Time spent to process this request - `status` (string, optional) - `result` (DistributedTelemetryData, optional) ## Types ### ClusterTelemetryGetResponsesContentApplicationJsonSchemaUsage ### DistributedTelemetryData - `collections` (map from string to DistributedCollectionTelemetry, required) - `cluster` (DistributedTelemetryDataCluster, optional) ### Usage Usage of the hardware resources, spent to process the request - `hardware` (UsageHardware, optional) - `inference` (UsageInference, optional) ### DistributedCollectionTelemetry - `id` (string, required) — Collection name - `shards` (list of DistributedShardTelemetry, optional, nullable) — Shards topology - `reshardings` (list of ReshardingInfo, optional, nullable) — Ongoing resharding operations - `shard_transfers` (list of ShardTransferInfo, optional, nullable) — Ongoing shard transfers ### DistributedTelemetryDataCluster ### UsageHardware ### UsageInference ### DistributedShardTelemetry - `id` (uint, required) — Shard ID - `replicas` (list of DistributedReplicaTelemetry, required) — Replica information - `key` (DistributedShardTelemetryKey, optional) — Optional shard key ### ReshardingInfo - `direction` (enum, required) — Resharding direction, scale up or down in number of shards - `up` - Scale up, add a new shard - `down` - Scale down, remove a shard - Allowed values: `up`, `down` - `shard_id` (uint, required) - `peer_id` (uint64, required) - `shard_key` (ReshardingInfoShardKey, optional) ### ShardTransferInfo - `shard_id` (uint, required) - `from` (uint64, required) — Source peer id - `to` (uint64, required) — Destination peer id - `sync` (boolean, required) — If `true` transfer is a synchronization of a replicas If `false` transfer is a moving of a shard from one peer to another - `to_shard_id` (uint, optional, nullable) — Target shard ID if different than source shard ID Used exclusively with `ReshardingStreamRecords` transfer method. - `method` (ShardTransferInfoMethod, optional) - `comment` (string, optional, nullable) — A human-readable report of the transfer progress. Available only on the source peer. ### DistributedClusterTelemetry - `enabled` (boolean, required) - `peers` (map from string to DistributedPeerInfo, required) - `number_of_peers` (uint64, optional, nullable) ### 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) ### InferenceUsage - `models` (map from string to ModelUsage, required) ### DistributedReplicaTelemetry - `peer_id` (uint64, required) — Peer ID hosting this replica - `state` (enum, required) — State of the single shard within a replica set. - Allowed values: `Active`, `Dead`, `Partial`, `Initializing`, `Listener`, `PartialSnapshot`, `Recovery`, `Resharding`, `ReshardingScaleDown`, `ActiveRead`, `ManualRecovery` - `status` (DistributedReplicaTelemetryStatus, optional) — Shard status - `total_optimized_points` (integer, optional, nullable) — Total optimized points - `vectors_size_bytes` (integer, optional, nullable) — Estimated vectors size in bytes - `payloads_size_bytes` (integer, optional, nullable) — Estimated payloads size in bytes - `num_points` (integer, optional, nullable) — Approximate number of points - `num_vectors` (integer, optional, nullable) — Approximate number of vectors - `num_vectors_by_name` (map from string to integer, optional, nullable) — Approximate number of vectors by name - `shard_cleaning_status` (DistributedReplicaTelemetryShardCleaningStatus, optional) — Shard cleaning task status. After a resharding, a cleanup task is performed to remove outdated points from this shard. - `partial_snapshot` (DistributedReplicaTelemetryPartialSnapshot, optional) — Partial snapshot telemetry ### DistributedShardTelemetryKey Optional shard key ### ReshardingInfoShardKey ### ShardTransferInfoMethod ### DistributedPeerInfo - `uri` (string, required) — URI of the peer - `responsive` (boolean, required) — Whether this peer responded for this request - `details` (DistributedPeerInfoDetails, optional) — If responsive, these details should be available ### ModelUsage - `tokens` (uint64, required) ### DistributedReplicaTelemetryStatus Shard status ### DistributedReplicaTelemetryShardCleaningStatus Shard cleaning task status. After a resharding, a cleanup task is performed to remove outdated points from this shard. ### DistributedReplicaTelemetryPartialSnapshot Partial snapshot telemetry ### DistributedPeerInfoDetails If responsive, these details should be available ### PartialSnapshotTelemetry - `ongoing_create_snapshot_requests` (integer, required) - `is_recovering` (boolean, required) - `recovery_timestamp` (uint64, required) ### DistributedPeerDetails - `version` (string, required) — Qdrant version - `is_voter` (boolean, required) — Whether it can participate in leader elections - `term` (uint64, required) — Election term - `commit` (uint64, required) — Latest accepted commit - `num_pending_operations` (uint64, required) — Number of operations pending for being applied - `consensus_thread_status` (ConsensusThreadStatus, required) — Information about current consensus thread status - `role` (DistributedPeerDetailsRole, optional) — Consensus role for the peer ### ConsensusThreadStatus Information about current consensus thread status ### DistributedPeerDetailsRole Consensus role for the peer ### ConsensusThreadStatus0 - `consensus_thread_status` (enum, required) - Allowed values: `working` - `last_update` (string, required) ### ConsensusThreadStatus1 - `consensus_thread_status` (enum, required) - Allowed values: `stopped` ### ConsensusThreadStatus2 - `consensus_thread_status` (enum, required) - Allowed values: `stopped_with_err` - `err` (string, required) ## Examples **Response** ```json { "usage": { "hardware": { "cpu": 1, "payload_io_read": 1, "payload_io_write": 1, "payload_index_io_read": 1, "payload_index_io_write": 1, "vector_io_read": 1, "vector_io_write": 1 }, "inference": { "models": {} } }, "time": 0.002, "status": "ok", "result": { "collections": {}, "cluster": { "enabled": true, "number_of_peers": 1, "peers": {} } } } ``` **SDK Code** ```python import requests url = "http://localhost:6333/cluster/telemetry" headers = {"api-key": ""} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript const url = 'http://localhost:6333/cluster/telemetry'; const options = {method: 'GET', headers: {'api-key': ''}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "net/http" "io" ) func main() { url := "http://localhost:6333/cluster/telemetry" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("api-key", "") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("http://localhost:6333/cluster/telemetry") http = Net::HTTP.new(url.host, url.port) request = Net::HTTP::Get.new(url) request["api-key"] = '' response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("http://localhost:6333/cluster/telemetry") .header("api-key", "") .asString(); ``` ```php request('GET', 'http://localhost:6333/cluster/telemetry', [ 'headers' => [ 'api-key' => '', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("http://localhost:6333/cluster/telemetry"); var request = new RestRequest(Method.GET); request.AddHeader("api-key", ""); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = ["api-key": ""] let request = NSMutableURLRequest(url: NSURL(string: "http://localhost:6333/cluster/telemetry")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```