[[cluster-stats]]
=== Cluster stats API
++++
<titleabbrev>Cluster stats</titleabbrev>
++++

Returns cluster statistics.


[[cluster-stats-api-request]]
==== {api-request-title}

`GET /_cluster/stats` +

`GET /_cluster/stats/nodes/<node_filter>`


[[cluster-stats-api-desc]]
==== {api-description-title}

The Cluster Stats API allows to retrieve statistics from a cluster wide 
perspective. The API returns basic index metrics (shard numbers, store size, 
memory usage) and information about the current nodes that form the cluster 
(number, roles, os, jvm versions, memory usage, cpu and installed plugins).


[[cluster-stats-api-path-params]]
==== {api-path-parms-title}


include::{docdir}/rest-api/common-parms.asciidoc[tag=node-filter]


[[cluster-stats-api-query-params]]
==== {api-query-parms-title}

include::{docdir}/rest-api/common-parms.asciidoc[tag=flat-settings]

include::{docdir}/rest-api/common-parms.asciidoc[tag=timeout]

[[cluster-stats-api-response-body]]
==== {api-response-body-title}

`_nodes.total`::
(integer)
Total number of nodes selected by the request's <<cluster-nodes,node filters>>.

`_nodes.successful`::
(integer)
Number of nodes that responded successfully to the request.

`_nodes.failed`::
(integer)
Number of nodes that rejected the request or failed to respond. If this value
is not `0`, a reason for the rejection or failure is included in the response.

`cluster_name`::
(string)
Name of the cluster, based on the <<cluster.name>> setting.

`cluster_uuid`::
(string)
Unique identifier for the cluster.

`timestamp`::
(integer)
https://en.wikipedia.org/wiki/Unix_time[Unix timestamp], in milliseconds, of
the last time the cluster statistics were refreshed.

`status`::
include::{docdir}/rest-api/common-parms.asciidoc[tag=cluster-health-status]
+
See <<cluster-health>>.

`indices.count`::
(integer)
Total number of indices with shards assigned to selected nodes.

`indices.shards.total`::
(integer)
Total number of shards assigned to selected nodes.

`indices.shards.primaries`::
(integer)
Number of primary shards assigned to selected nodes.

`indices.shards.replication`::
(integer)
Ratio of replica shards to primary shards across all selected nodes.

`indices.shards.index.shards.min`::
(integer)
Minimum number of shards in an index, counting only shards assigned to
selected nodes.

`indices.shards.index.shards.max`::
(integer)
Maximum number of shards in an index, counting only shards assigned to
selected nodes.

`indices.shards.index.shards.avg`::
(integer)
Mean number of shards in an index, counting only shards assigned to
selected nodes.

`indices.shards.index.primaries.min`::
(integer)
Minimum number of primary shards in an index, counting only shards assigned
to selected nodes.

`indices.shards.index.primaries.max`::
(integer)
Maximum number of primary shards in an index, counting only shards assigned
to selected nodes.

`indices.shards.index.primaries.avg`::
(integer)
Mean number of primary shards in an index, counting only shards assigned to
selected nodes.

`indices.shards.index.replication.min`::
(integer)
Minimum replication factor in an index, counting only shards assigned to
selected nodes.

`indices.shards.index.replication.max`::
(integer)
Maximum replication factor in an index, counting only shards assigned to
selected nodes.

`indices.shards.index.replication.avg`::
(integer)
Mean replication factor in an index, counting only shards assigned to selected
nodes.

`indices.docs.count`::
(integer)
Total number of non-deleted documents across all primary shards assigned to
selected nodes.
+
This number is based on documents in Lucene segments and may include documents
from nested fields.

`indices.docs.deleted`::
(integer)
Total number of deleted documents across all primary shards assigned to
selected nodes.
+
This number is based on documents in Lucene segments. {es} reclaims the disk
space of deleted Lucene documents when a segment is merged.

`indices.store.size`::
(<<byte-units, byte units>>)
Total size of all shards assigned to selected nodes.

`indices.store.size_in_bytes`::
(integer)
Total size, in bytes, of all shards assigned to selected nodes.

`indices.fielddata.memory_size`::
(<<byte-units, byte units>>)
Total amount of memory used for the field data cache across all shards
assigned to selected nodes.

`indices.fielddata.memory_size_in_bytes`::
(integer)
Total amount, in bytes, of memory used for the field data cache across all
shards assigned to selected nodes.

`indices.fielddata.evictions`::
(integer)
Total number of evictions from the field data cache across all shards assigned
to selected nodes.

`indices.query_cache.memory_size`::
(<<byte-units, byte units>>)
Total amount of memory used for the query cache across all shards assigned to
selected nodes.

`indices.query_cache.memory_size_in_bytes`::
(integer)
Total amount, in bytes, of memory used for the query cache across all shards
assigned to selected nodes.

`indices.query_cache.total_count`::
(integer)
Total count of hits and misses in the query cache across all shards assigned to
selected nodes.

`indices.query_cache.hit_count`::
(integer)
Total count of query cache hits across all shards assigned to selected nodes.

`indices.query_cache.miss_count`::
(integer)
Total count of query cache misses across all shards assigned to selected nodes.

`indices.query_cache.cache_size`::
(integer)
Total number of entries currently in the query cache across all shards assigned
to selected nodes.

`indices.query_cache.cache_count`::
(integer)
Total number of entries added to the query cache across all shards assigned
to selected nodes. This number includes current and evicted entries.

`indices.query_cache.evictions`::
(integer)
Total number of query cache evictions across all shards assigned to selected
nodes.

`indices.completion.size`::
(<<byte-units, byte units>>)
Total amount of memory used for completion across all shards assigned to
selected nodes.

`indices.completion.size_in_bytes`::
(integer)
Total amount, in bytes, of memory used for completion across all shards assigned
to selected nodes.

`indices.segments.count`::
(integer)
Total number of segments across all shards assigned to selected nodes.

`indices.segments.memory`::
(<<byte-units, byte units>>)
Total amount of memory used for segments across all shards assigned to selected
nodes.

`indices.segments.memory_in_bytes`::
(integer)
Total amount, in bytes, of memory used for segments across all shards assigned to
selected nodes.

`indices.segments.terms_memory`::
(<<byte-units, byte units>>)
Total amount of memory used for terms across all shards assigned to selected
nodes.

`indices.segments.terms_memory_in_bytes`::
(integer)
Total amount, in bytes, of memory used for terms across all shards assigned to
selected nodes.

`indices.segments.stored_fields_memory`::
(<<byte-units, byte units>>)
Total amount of memory used for stored fields across all shards assigned to
selected nodes.

`indices.segments.stored_fields_memory_in_bytes`::
(integer)
Total amount, in bytes, of memory used for stored fields across all shards
assigned to selected nodes.

`indices.segments.term_vectors_memory`::
(<<byte-units, byte units>>)
Total amount of memory used for term vectors across all shards assigned to
selected nodes.

`indices.segments.term_vectors_memory_in_bytes`::
(integer)
Total amount, in bytes, of memory used for term vectors across all shards
assigned to selected nodes.

`indices.segments.norms_memory`::
(<<byte-units, byte units>>)
Total amount of memory used for normalization factors across all shards assigned
to selected nodes.

`indices.segments.norms_memory_in_bytes`::
(integer)
Total amount, in bytes, of memory used for normalization factors across all
shards assigned to selected nodes.

`indices.segments.points_memory`::
(<<byte-units, byte units>>)
Total amount of memory used for points across all shards assigned to selected
nodes.

`indices.segments.points_memory_in_bytes`::
(integer)
Total amount, in bytes, of memory used for points across all shards assigned to
selected nodes.

`indices.segments.doc_values_memory`::
(<<byte-units, byte units>>)
Total amount of memory used for doc values across all shards assigned to
selected nodes.

`indices.segments.doc_values_memory_in_bytes`::
(integer)
Total amount, in bytes, of memory used for doc values across all shards assigned
to selected nodes.

`indices.segments.index_writer_memory`::
(<<byte-units, byte units>>)
Total amount of memory used by all index writers across all shards assigned to
selected nodes.

`indices.segments.index_writer_memory_in_bytes`::
(integer)
Total amount, in bytes, of memory used by all index writers across all shards
assigned to selected nodes.

`indices.segments.version_map_memory`::
(<<byte-units, byte units>>)
Total amount of memory used by all version maps across all shards assigned to
selected nodes.

`indices.segments.version_map_memory_in_bytes`::
(integer)
Total amount, in bytes, of memory used by all version maps across all shards
assigned to selected nodes.

`indices.segments.fixed_bit_set_memory`::
(<<byte-units, byte units>>)
Total amount of memory used by fixed bit sets across all shards assigned to
selected nodes.
+
Fixed bit sets are used for nested object field types and
type filters for <<parent-join,join>> fields.

`indices.segments.fixed_bit_set_memory_in_bytes`::
(integer)
Total amount of memory, in bytes, used by fixed bit sets across all shards
assigned to selected nodes.

`indices.segments.max_unsafe_auto_id_timestamp`::
(integer)
https://en.wikipedia.org/wiki/Unix_time[Unix timestamp], in milliseconds, of
the most recently retried indexing request.

`indices.segments.file_sizes`::
(object)
This object is not populated by the cluster stats API.
+
To get information on segment files, use the <<cluster-nodes-stats,node stats
API>>.


[[cluster-stats-api-example]]
==== {api-examples-title}

[source,console]
--------------------------------------------------
GET /_cluster/stats?human&pretty
--------------------------------------------------
// TEST[setup:twitter]

The API returns the following response:

["source","js",subs="attributes,callouts"]
--------------------------------------------------
{
   "_nodes" : {
      "total" : 1,
      "successful" : 1,
      "failed" : 0
   },
   "cluster_uuid": "YjAvIhsCQ9CbjWZb2qJw3Q",
   "cluster_name": "elasticsearch",
   "timestamp": 1459427693515,
   "status": "green",
   "indices": {
      "count": 1,
      "shards": {
         "total": 5,
         "primaries": 5,
         "replication": 0,
         "index": {
            "shards": {
               "min": 5,
               "max": 5,
               "avg": 5
            },
            "primaries": {
               "min": 5,
               "max": 5,
               "avg": 5
            },
            "replication": {
               "min": 0,
               "max": 0,
               "avg": 0
            }
         }
      },
      "docs": {
         "count": 10,
         "deleted": 0
      },
      "store": {
         "size": "16.2kb",
         "size_in_bytes": 16684
      },
      "fielddata": {
         "memory_size": "0b",
         "memory_size_in_bytes": 0,
         "evictions": 0
      },
      "query_cache": {
         "memory_size": "0b",
         "memory_size_in_bytes": 0,
         "total_count": 0,
         "hit_count": 0,
         "miss_count": 0,
         "cache_size": 0,
         "cache_count": 0,
         "evictions": 0
      },
      "completion": {
         "size": "0b",
         "size_in_bytes": 0
      },
      "segments": {
         "count": 4,
         "memory": "8.6kb",
         "memory_in_bytes": 8898,
         "terms_memory": "6.3kb",
         "terms_memory_in_bytes": 6522,
         "stored_fields_memory": "1.2kb",
         "stored_fields_memory_in_bytes": 1248,
         "term_vectors_memory": "0b",
         "term_vectors_memory_in_bytes": 0,
         "norms_memory": "384b",
         "norms_memory_in_bytes": 384,
         "points_memory" : "0b",
         "points_memory_in_bytes" : 0,
         "doc_values_memory": "744b",
         "doc_values_memory_in_bytes": 744,
         "index_writer_memory": "0b",
         "index_writer_memory_in_bytes": 0,
         "version_map_memory": "0b",
         "version_map_memory_in_bytes": 0,
         "fixed_bit_set": "0b",
         "fixed_bit_set_memory_in_bytes": 0,
         "max_unsafe_auto_id_timestamp" : -9223372036854775808,
         "file_sizes": {}
      }
   },
   "nodes": {
      "count": {
         "total": 1,
         "data": 1,
         "coordinating_only": 0,
         "master": 1,
         "ingest": 1,
         "voting_only": 0
      },
      "versions": [
         "{version}"
      ],
      "os": {
         "available_processors": 8,
         "allocated_processors": 8,
         "names": [
            {
               "name": "Mac OS X",
               "count": 1
            }
         ],
         "pretty_names": [
            {
               "pretty_name": "Mac OS X",
               "count": 1
            }
         ],
         "mem" : {
            "total" : "16gb",
            "total_in_bytes" : 17179869184,
            "free" : "78.1mb",
            "free_in_bytes" : 81960960,
            "used" : "15.9gb",
            "used_in_bytes" : 17097908224,
            "free_percent" : 0,
            "used_percent" : 100
         }
      },
      "process": {
         "cpu": {
            "percent": 9
         },
         "open_file_descriptors": {
            "min": 268,
            "max": 268,
            "avg": 268
         }
      },
      "jvm": {
         "max_uptime": "13.7s",
         "max_uptime_in_millis": 13737,
         "versions": [
            {
               "version": "12",
               "vm_name": "OpenJDK 64-Bit Server VM",
               "vm_version": "12+33",
               "vm_vendor": "Oracle Corporation",
               "bundled_jdk": true,
               "using_bundled_jdk": true,
               "count": 1
            }
         ],
         "mem": {
            "heap_used": "57.5mb",
            "heap_used_in_bytes": 60312664,
            "heap_max": "989.8mb",
            "heap_max_in_bytes": 1037959168
         },
         "threads": 90
      },
      "fs": {
         "total": "200.6gb",
         "total_in_bytes": 215429193728,
         "free": "32.6gb",
         "free_in_bytes": 35064553472,
         "available": "32.4gb",
         "available_in_bytes": 34802409472
      },
      "plugins": [
        {
          "name": "analysis-icu",
          "version": "{version}",
          "description": "The ICU Analysis plugin integrates Lucene ICU module into elasticsearch, adding ICU relates analysis components.",
          "classname": "org.elasticsearch.plugin.analysis.icu.AnalysisICUPlugin",
          "has_native_controller": false
        },
        ...
      ],
      "ingest": {
        "number_of_pipelines" : 1,
        "processor_stats": {
          ...
        }
      },
      "network_types": {
        ...
      },
      "discovery_types": {
        ...
      },
      "packaging_types": [
        {
          ...
        }
      ]
   }
}
--------------------------------------------------
// TESTRESPONSE[s/"plugins": \[[^\]]*\]/"plugins": $body.$_path/]
// TESTRESPONSE[s/"network_types": \{[^\}]*\}/"network_types": $body.$_path/]
// TESTRESPONSE[s/"discovery_types": \{[^\}]*\}/"discovery_types": $body.$_path/]
// TESTRESPONSE[s/"processor_stats": \{[^\}]*\}/"processor_stats": $body.$_path/]
// TESTRESPONSE[s/"count": \{[^\}]*\}/"count": $body.$_path/]
// TESTRESPONSE[s/"packaging_types": \[[^\]]*\]/"packaging_types": $body.$_path/]
// TESTRESPONSE[s/: true|false/: $body.$_path/]
// TESTRESPONSE[s/: (\-)?[0-9]+/: $body.$_path/]
// TESTRESPONSE[s/: "[^"]*"/: $body.$_path/]
// These replacements do a few things:
// 1. Ignore the contents of the `plugins` object because we don't know all of
//    the plugins that will be in it. And because we figure folks don't need to
//    see an exhaustive list anyway.
// 2. Similarly, ignore the contents of `network_types`, `discovery_types`, and
//    `packaging_types`.
// 3. Ignore the contents of the (nodes) count object, as what's shown here
//    depends on the license. Voting-only nodes are e.g. only shown when this
//    test runs with a basic license.
// 4. All of the numbers and strings on the right hand side of *every* field in
//    the response are ignored. So we're really only asserting things about the
//    the shape of this response, not the values in it.

This API can be restricted to a subset of the nodes using <<cluster-nodes,node
filters>>:

[source,console]
--------------------------------------------------
GET /_cluster/stats/nodes/node1,node*,master:false
--------------------------------------------------
