---
type: api
title: Get follower stats
description: Get cross-cluster replication follower stats.
url: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-ccr-follow-stats
resource: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-ccr-follow-stats
products:
  - Elasticsearch
---

# Get follower stats

Availability: 6.5+

## Paths

- `GET` `/{index}/_ccr/stats`

- [Api key auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#apikeyauth)
- [Basic auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#basicauth)
- [Bearer auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#bearerauth)

#### Path Parameters

- `index` (union IndexName | [] IndexName)
  A comma-delimited list of index patterns.

## Description

Get cross-cluster replication follower stats.
The API returns shard-level stats about the "following tasks" associated with each shard for the specified indices.

## Required authorization

* Cluster privileges: `monitor`

[About cross-cluster replication](https://www.elastic.co/docs/deploy-manage/tools/cross-cluster-replication)

## Query String Parameters

- `timeout` (string Duration · default: 30s)
  The period to wait for a response.
If no response is received before the timeout expires, the request fails and returns an error.

## Response

`application/json`

- `indices` ([] FollowIndexStats)
  An array of follower index statistics.
  - `index` (string IndexName)
    The name of the follower index.
  - `shards` ([] ShardStats)
    An array of shard-level following task statistics.
    - `bytes_read` (number)
      The total of transferred bytes read from the leader.
This is only an estimate and does not account for compression if enabled.
    - `failed_read_requests` (number)
      The number of failed reads.
    - `failed_write_requests` (number)
      The number of failed bulk write requests on the follower.
    - `fatal_exception` ({} ErrorCause)
      - `type` (string)
        The type of error
      - `reason` (union string) — nullable
        A human-readable explanation of the error, in English.
        One of: `string`
      - `stack_trace` (string)
        The server stack trace. Present only if the `error_trace=true` parameter was sent with the request.
      - `caused_by` ({} ErrorCause) — recursive
        Same fields as `fatal_exception` in `shards`
      - `root_cause` ([] ErrorCause) — recursive
        Same fields as `fatal_exception` in `shards`
      - `suppressed` ([] ErrorCause) — recursive
        Same fields as `fatal_exception` in `shards`
    - `follower_aliases_version` (number VersionNumber)
      The index aliases version the follower is synced up to.
    - `follower_global_checkpoint` (number)
      The current global checkpoint on the follower.
The difference between the `leader_global_checkpoint` and the `follower_global_checkpoint` is an indication of how much the follower is lagging the leader.
    - `follower_index` (string)
      The name of the follower index.
    - `follower_mapping_version` (number VersionNumber)
      The mapping version the follower is synced up to.
    - `follower_max_seq_no` (number SequenceNumber)
      The current maximum sequence number on the follower.
    - `follower_settings_version` (number VersionNumber)
      The index settings version the follower is synced up to.
    - `last_requested_seq_no` (number SequenceNumber)
      The starting sequence number of the last batch of operations requested from the leader.
    - `leader_global_checkpoint` (number)
      The current global checkpoint on the leader known to the follower task.
    - `leader_index` (string)
      The name of the index in the leader cluster being followed.
    - `leader_max_seq_no` (number SequenceNumber)
      The current maximum sequence number on the leader known to the follower task.
    - `operations_read` (number)
      The total number of operations read from the leader.
    - `operations_written` (number)
      The number of operations written on the follower.
    - `outstanding_read_requests` (number)
      The number of active read requests from the follower.
    - `outstanding_write_requests` (number)
      The number of active bulk write requests on the follower.
    - `read_exceptions` ([] ReadException)
      An array of objects representing failed reads.
      - `exception` ({} ErrorCause)
        The exception that caused the read to fail.
        - `type` (string)
          The type of error
        - `reason` (union string) — nullable
          A human-readable explanation of the error, in English.
          One of: `string`
        - `stack_trace` (string)
          The server stack trace. Present only if the `error_trace=true` parameter was sent with the request.
        - `caused_by` ({} ErrorCause) — recursive
          Same fields as `exception` in `read_exceptions`
        - `root_cause` ([] ErrorCause) — recursive
          Same fields as `exception` in `read_exceptions`
        - `suppressed` ([] ErrorCause) — recursive
          Same fields as `exception` in `read_exceptions`
      - `from_seq_no` (number SequenceNumber)
        The starting sequence number of the batch requested from the leader.
      - `retries` (number)
        The number of times the batch has been retried.
    - `remote_cluster` (string)
      The remote cluster containing the leader index.
    - `shard_id` (number)
      The numerical shard ID, with values from 0 to one less than the number of replicas.
    - `successful_read_requests` (number)
      The number of successful fetches.
    - `successful_write_requests` (number)
      The number of bulk write requests run on the follower.
    - `time_since_last_read` (string Duration)
    - `time_since_last_read_millis` (DurationValueUnitMillis)
      The number of milliseconds since a read request was sent to the leader.
When the follower is caught up to the leader, this number will increase up to the configured `read_poll_timeout` at which point another read request will be sent to the leader.
    - `total_read_remote_exec_time` (string Duration)
    - `total_read_remote_exec_time_millis` (DurationValueUnitMillis)
      The total time reads spent running on the remote cluster.
    - `total_read_time` (string Duration)
    - `total_read_time_millis` (DurationValueUnitMillis)
      The total time reads were outstanding, measured from the time a read was sent to the leader to the time a reply was returned to the follower.
    - `total_write_time` (string Duration)
    - `total_write_time_millis` (DurationValueUnitMillis)
      The total time spent writing on the follower.
    - `write_buffer_operation_count` (number)
      The number of write operations queued on the follower.
    - `write_buffer_size_in_bytes` (number | string ByteSize)
      The total number of bytes of operations currently queued for writing.
## Code Examples

#### Console

```console
GET /follower_index/_ccr/stats
```

#### JavaScript

```javascript
const response = await client.ccr.followStats({
  index: "follower_index",
});
```

#### Python

```python
resp = client.ccr.follow_stats(
    index="follower_index",
)
```

#### curl

```curl
curl -X GET "$ELASTICSEARCH_URL/follower_index/_ccr/stats" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY"
```

#### Java

```java
client.ccr().followStats(f -> f
    .index("follower_index")
);
```

#### C#

```c#
var response = await client.CrossClusterReplication.FollowStatsAsync(indices: new[] { "follower_index" });
```

#### PHP

```php
$resp = $client->ccr()->followStats([
    "index" => "follower_index",
]);
```

#### Ruby

```ruby
response = client.ccr.follow_stats(
  index: "follower_index"
)
```

## Response Examples

#### Follow index stats response example1

A successful response from `GET /follower_index/_ccr/stats`, which retrieves follower stats.

```json
{
  "indices" : [
    {
      "index" : "follower_index",
      "total_global_checkpoint_lag" : 256,
      "shards" : [
        {
          "remote_cluster" : "remote_cluster",
          "leader_index" : "leader_index",
          "follower_index" : "follower_index",
          "shard_id" : 0,
          "leader_global_checkpoint" : 1024,
          "leader_max_seq_no" : 1536,
          "follower_global_checkpoint" : 768,
          "follower_max_seq_no" : 896,
          "last_requested_seq_no" : 897,
          "outstanding_read_requests" : 8,
          "outstanding_write_requests" : 2,
          "write_buffer_operation_count" : 64,
          "follower_mapping_version" : 4,
          "follower_settings_version" : 2,
          "follower_aliases_version" : 8,
          "total_read_time_millis" : 32768,
          "total_read_remote_exec_time_millis" : 16384,
          "successful_read_requests" : 32,
          "failed_read_requests" : 0,
          "operations_read" : 896,
          "bytes_read" : 32768,
          "total_write_time_millis" : 16384,
          "write_buffer_size_in_bytes" : 1536,
          "successful_write_requests" : 16,
          "failed_write_requests" : 0,
          "operations_written" : 832,
          "read_exceptions" : [ ],
          "time_since_last_read_millis" : 8
        }
      ]
    }
  ]
}
```

