[[cat-health]]
=== cat health API
++++
cat health
++++
Returns the health status of a cluster, similar to the <> API.
[[cat-health-api-request]]
==== {api-request-title}
`GET /_cat/health`
[[cat-health-api-desc]]
==== {api-description-title}
You can use the cat health API to get the health status of a cluster.
[[timestamp]]
This API is often used to check malfunctioning clusters. To help you
track cluster health alongside log files and alerting systems, the API returns
timestamps in two formats:
* `HH:MM:SS`, which is human-readable but includes no date information.
* https://en.wikipedia.org/wiki/Unix_time[Unix `epoch` time], which is
machine-sortable and includes date information. This is useful for cluster
recoveries that take multiple days.
You can use the cat health API to verify cluster health across multiple nodes.
See <>.
You also can use the API to track the recovery of a large cluster
over a longer period of time. See <>.
[[cat-health-api-query-params]]
==== {api-query-parms-title}
include::{docdir}/rest-api/common-parms.asciidoc[tag=http-format]
include::{docdir}/rest-api/common-parms.asciidoc[tag=cat-h]
include::{docdir}/rest-api/common-parms.asciidoc[tag=help]
include::{docdir}/rest-api/common-parms.asciidoc[tag=local]
include::{docdir}/rest-api/common-parms.asciidoc[tag=master-timeout]
include::{docdir}/rest-api/common-parms.asciidoc[tag=cat-s]
`ts` (timestamps)::
(Optional, boolean) If `true`, returns `HH:MM:SS` and
https://en.wikipedia.org/wiki/Unix_time[Unix `epoch`] timestamps. Defaults to
`true`.
include::{docdir}/rest-api/common-parms.asciidoc[tag=cat-v]
[[cat-health-api-example]]
==== {api-examples-title}
[[cat-health-api-example-timestamp]]
===== Example with a timestamp
By default, the cat health API returns `HH:MM:SS` and
https://en.wikipedia.org/wiki/Unix_time[Unix `epoch`] timestamps. For example:
[source,console]
--------------------------------------------------
GET /_cat/health?v
--------------------------------------------------
// TEST[s/^/PUT twitter\n{"settings":{"number_of_replicas": 0}}\n/]
The API returns the following response:
[source,txt]
--------------------------------------------------
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1475871424 16:17:04 elasticsearch green 1 1 1 1 0 0 0 0 - 100.0%
--------------------------------------------------
// TESTRESPONSE[s/1475871424 16:17:04/\\d+ \\d+:\\d+:\\d+/]
// TESTRESPONSE[s/elasticsearch/[^ ]+/ s/0 -/\\d+ (-|\\d+(\\.\\d+)?[ms]+)/ non_json]
[[cat-health-api-example-no-timestamp]]
===== Example without a timestamp
You can use the `ts` (timestamps) parameter to disable timestamps. For example:
[source,console]
--------------------------------------------------
GET /_cat/health?v&ts=false
--------------------------------------------------
// TEST[s/^/PUT twitter\n{"settings":{"number_of_replicas": 0}}\n/]
The API returns the following response:
[source,txt]
--------------------------------------------------
cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
elasticsearch green 1 1 1 1 0 0 0 0 - 100.0%
--------------------------------------------------
// TESTRESPONSE[s/elasticsearch/[^ ]+/ s/0 -/\\d+ (-|\\d+(\\.\\d+)?[ms]+)/ non_json]
[[cat-health-api-example-across-nodes]]
===== Example across nodes
You can use the cat health API to verify the health of a cluster across nodes.
For example:
[source,sh]
--------------------------------------------------
% pssh -i -h list.of.cluster.hosts curl -s localhost:9200/_cat/health
[1] 20:20:52 [SUCCESS] es3.vm
1384309218 18:20:18 foo green 3 3 3 3 0 0 0 0
[2] 20:20:52 [SUCCESS] es1.vm
1384309218 18:20:18 foo green 3 3 3 3 0 0 0 0
[3] 20:20:52 [SUCCESS] es2.vm
1384309218 18:20:18 foo green 3 3 3 3 0 0 0 0
--------------------------------------------------
// NOTCONSOLE
[[cat-health-api-example-large-cluster]]
===== Example with a large cluster
You can use the cat health API to track the recovery of a large cluster over a
longer period of time. You can do this by including the cat health API request
in a delayed loop. For example:
[source,sh]
--------------------------------------------------
% while true; do curl localhost:9200/_cat/health; sleep 120; done
1384309446 18:24:06 foo red 3 3 20 20 0 0 1812 0
1384309566 18:26:06 foo yellow 3 3 950 916 0 12 870 0
1384309686 18:28:06 foo yellow 3 3 1328 916 0 12 492 0
1384309806 18:30:06 foo green 3 3 1832 916 4 0 0
^C
--------------------------------------------------
// NOTCONSOLE
In this example, the recovery took roughly six minutes, from `18:24:06` to
`18:30:06`. If this recovery took hours, you could continue to monitor the
number of `UNASSIGNED` shards, which should drop. If the number of `UNASSIGNED`
shards remains static, it would indicate an issue with the cluster recovery.