[[cluster-stats]]
=== Cluster stats API
++++
Cluster stats
++++
Returns cluster statistics.
[[cluster-stats-api-request]]
==== {api-request-title}
`GET /_cluster/stats` +
`GET /_cluster/stats/nodes/`
[[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 <>.
`_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 <> 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 <>.
[NOTE]
====
The remaining statistics are grouped by section.
====
[[cluster-stats-api-response-body-indices]]
===== `indices` section
[%collapsible]
====
`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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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`::
(<>)
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 <> 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-stats-api-response-body-nodes]]
===== `nodes` section
[%collapsible]
====
`nodes.count.total`::
(integer)
Total number of nodes selected by the request's <>.
`nodes.count.coordinating_only`::
(integer)
Number of selected nodes without a <>. These nodes are
considered <> nodes.
`nodes.count.`::
(integer)
Number of selected nodes with the role. For a list of roles, see
<>.
`nodes.versions`::
(array of strings)
Array of {es} versions used on selected nodes.
`nodes.os.available_processors`::
(integer)
Number of processors available to JVM across all selected nodes.
`nodes.os.allocated_processors`::
(integer)
Number of processors used to calculate thread pool size across all selected
nodes.
+
This number can be set with the `processors` setting of a node and defaults to
the number of processors reported by the OS. In both cases, this number will
never be larger than `32`.
`nodes.os.names`::
(array of objects)
Contains details about operating systems used by one or more selected nodes.
`nodes.os.names.name`:::
(string)
Name of an operating system used by one or more selected nodes.
`nodes.os.names.count`:::
(string)
Number of selected nodes using the operating system.
`nodes.os.pretty_names`::
(array of objects)
Contains details about operating systems used by one or more selected nodes.
`nodes.os.pretty_names.pretty_name`:::
(string)
Human-readable name of an operating system used by one or more selected nodes.
`nodes.os.pretty_names.count`:::
(string)
Number of selected nodes using the operating system.
`nodes.os.mem.total`::
(<>)
Total amount of physical memory across all selected nodes.
`nodes.os.mem.total_in_bytes`::
(integer)
Total amount, in bytes, of physical memory across all selected nodes.
`nodes.os.mem.free`::
(<>)
Amount of free physical memory across all selected nodes.
`nodes.os.mem.free_in_bytes`::
(integer)
Amount, in bytes, of free physical memory across all selected nodes.
`nodes.os.mem.used`::
(<>)
Amount of physical memory in use across all selected nodes.
`nodes.os.mem.used_in_bytes`::
(integer)
Amount, in bytes, of physical memory in use across all selected nodes.
`nodes.os.mem.free_percent`::
(integer)
Percentage of free physical memory across all selected nodes.
`nodes.os.mem.used_percent`::
(integer)
Percentage of physical memory in use across all selected nodes.
`nodes.process.cpu.percent`::
(integer)
Percentage of CPU used across all selected nodes. Returns `-1` if
not supported.
`nodes.process.open_file_descriptors.min`::
(integer)
Minimum number of concurrently open file descriptors across all selected nodes.
Returns `-1` if not supported.
`nodes.process.open_file_descriptors.max`::
(integer)
Maximum number of concurrently open file descriptors allowed across all selected
nodes. Returns `-1` if not supported.
`nodes.process.open_file_descriptors.avg`::
(integer)
Average number of concurrently open file descriptors. Returns `-1` if not
supported.
`nodes.jvm.max_uptime`::
(<>)
Uptime duration since JVM last started.
`nodes.jvm.max_uptime_in_millis`::
(integer)
Uptime duration, in milliseconds, since JVM last started.
`nodes.jvm.versions`::
(array of objects)
Contains details about the JVM versions used by selected
nodes.
`nodes.jvm.versions.version`:::
(string)
Version of JVM used by one or more selected nodes.
`nodes.jvm.versions.vm_name`:::
(string)
Name of the JVM.
`nodes.jvm.versions.vm_version`:::
(string)
Full version number of JVM.
+
The full version number includes a plus sign (`+`) followed by the build number.
`nodes.jvm.versions.vm_vendor`:::
(string)
Vendor of the JVM.
`nodes.jvm.versions.bundled_jdk`:::
(boolean)
If `true`, the JVM includes a bundled Java Development Kit (JDK).
`nodes.jvm.versions.using_bundled_jdk`:::
(boolean)
If `true`, a bundled JDK is in use by JVM.
`nodes.jvm.versions.count`:::
(integer)
Total number of selected nodes using JVM.
`nodes.jvm.mem.heap_used`::
(<>)
Memory currently in use by the heap across all selected nodes.
`nodes.jvm.mem.heap_used_in_bytes`::
(integer)
Memory, in bytes, currently in use by the heap across all selected nodes.
`nodes.jvm.mem.heap_max`::
(<>)
Maximum amount of memory, in bytes, available for use by the heap across all
selected nodes.
`nodes.jvm.mem.heap_max_in_bytes`::
(integer)
Maximum amount of memory, in bytes, available for use by the heap across all
selected nodes.
`nodes.jvm.threads`::
(integer)
Number of active threads in use by JVM across all selected nodes.
`nodes.fs.total`::
(<>)
Total size of all file stores across all selected nodes.
`nodes.fs.total_in_bytes`::
(integer)
Total size, in bytes, of all file stores across all seleced nodes.
`nodes.fs.free`::
(<>)
Amount of unallocated disk space in file stores across all selected nodes.
`nodes.fs.free_in_bytes`::
(integer)
Total number of unallocated bytes in file stores across all selected nodes.
`nodes.fs.available`::
(<>)
Total amount of disk space available to JVM in file
stores across all selected nodes.
+
Depending on OS or process-level restrictions, this amount may be less than
`nodes.fs.free`. This is the actual amount of free disk space the selected {es}
nodes can use.
`nodes.fs.available_in_bytes`::
(integer)
Total number of bytes available to JVM in file stores
across all selected nodes.
+
Depending on OS or process-level restrictions, this number may be less than
`nodes.fs.free_in_byes`. This is the actual amount of free disk space the
selected {es} nodes can use.
`nodes.plugins`::
(array of objects)
Contains details about installed plugins and modules across all selected nodes.
+
If no plugins or modules are installed, this array is empty.
`nodes.plugins.name`:::
(string)
Name of the {es} plugin.
`nodes.plugins.version`:::
(string)
{es} version for which the plugin was built.
`nodes.plugins.elasticsearch_version`:::
(string)
{es} version for which the plugin was built.
`node.plugins.java_version`:::
(string)
Java version for which the plugin was built.
`nodes.plugins.description`:::
(string)
Short description of the plugin.
`nodes.plugins.classname`:::
(string)
Class name used as the plugin's entry point.
`nodes.plugins.extended_plugins`:::
(array of strings)
An array of other plugins extended by this plugin through the Java Service
Provider Interface (SPI).
+
If this plugin extends no other plugins, this array is empty.
`nodes.plugins.has_native_controller`:::
(boolean)
If `true`, the plugin has a native controller process.
`nodes.network_types.transport_types.`::
(integer)
Number of selected nodes using the transport type.
`nodes.network_types.http_types.`::
(integer)
Number of selected nodes using the HTTP type.
`nodes.discovery_types.`::
(integer)
Number of selected nodes using the <> to find other nodes.
`nodes.packaging_types`::
(array of objects)
Contains details about {es} distributions installed on selected nodes.
`nodes.packaging_types.flavor`:::
(string)
Type of {es} distribution, such as `default` or `OSS`, used by one or more
selected nodes.
`nodes.packaging_types.type`:::
(string)
File type, such as `tar` or `zip`, used for the distribution package.
`nodes.packaging_types.count`:::
(integer)
Number of selected nodes using the distribution flavor and file type.
====
[[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": {}
},
"mappings": {
"field_types": []
},
"analysis": {
"char_filter_types": [],
"tokenizer_types": [],
"filter_types": [],
"analyzer_types": [],
"built_in_char_filters": [],
"built_in_tokenizers": [],
"built_in_filters": [],
"built_in_analyzers": []
}
},
"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/"field_types": \[[^\]]*\]/"field_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 <>:
[source,console]
--------------------------------------------------
GET /_cluster/stats/nodes/node1,node*,master:false
--------------------------------------------------