集群运行状况 API编辑

返回集群的运行状况状态。

请求编辑

GET /_cluster/health/<target>

先决条件编辑

  • 如果启用了 Elasticsearch 安全功能,则您必须拥有 monitormanage 集群权限 才能使用此 API。

描述编辑

集群运行状况 API 返回集群运行状况的简单状态。您还可以使用该 API 获取仅指定数据流和索引的运行状况状态。对于数据流,API 检索流的后台索引的运行状况状态。

集群运行状况状态为:greenyellowred。在分片级别,red 状态表示特定分片未分配到集群中,yellow 表示已分配主分片但未分配副本,green 表示已分配所有分片。索引级别状态由最差分片状态控制。集群状态由最差索引状态控制。

该 API 的主要优点之一是能够等到集群达到某个高水位运行状况级别。例如,以下代码将等待 50 秒,直到集群达到 yellow 级别(如果它在 50 秒内达到 greenyellow 状态,它将返回该点)

$response = $client->cluster()->health();
resp = client.cluster.health(
    wait_for_status="yellow",
    timeout="50s",
)
print(resp)
response = client.cluster.health(
  wait_for_status: 'yellow',
  timeout: '50s'
)
puts response
res, err := es.Cluster.Health(
	es.Cluster.Health.WithTimeout(time.Duration(50000000000)),
	es.Cluster.Health.WithWaitForStatus("yellow"),
)
fmt.Println(res, err)
const response = await client.cluster.health({
  wait_for_status: 'yellow',
  timeout: '50s'
})
console.log(response)
GET /_cluster/health?wait_for_status=yellow&timeout=50s

路径参数编辑

<target>

(可选,字符串)用于限制请求的数据流、索引和索引别名的逗号分隔列表。支持通配符表达式 (*)。

要定位集群中的所有数据流和索引,请省略此参数或使用 _all*

查询参数编辑

level
(可选,字符串)可以是 clusterindicesshards 之一。控制返回的运行状况信息的详细级别。默认为 cluster
local
(可选,布尔值)如果为 true,则请求仅从本地节点检索信息。默认为 false,这意味着从主节点检索信息。
master_timeout
(可选,时间单位)等待主节点的时间段。如果在超时到期之前主节点不可用,则请求失败并返回错误。默认为 30s。也可以设置为 -1 以指示请求永远不会超时。
timeout
(可选,时间单位)等待响应的时间段。如果在超时到期之前未收到响应,则请求失败并返回错误。默认为 30s
wait_for_active_shards
(可选,字符串)一个数字,控制要等待多少个活动分片,all 等待集群中的所有分片都处于活动状态,或 0 表示不等待。默认为 0
wait_for_events
(可选,字符串)可以是 immediateurgenthighnormallowlanguid 之一。等到所有当前排队的具有给定优先级的事件都被处理。
wait_for_no_initializing_shards
(可选,布尔值)一个布尔值,控制是否等待(直到提供的超时)集群没有分片初始化。默认为 false,这意味着它不会等待初始化分片。
wait_for_no_relocating_shards
(可选,布尔值)一个布尔值,控制是否等待(直到提供的超时)集群没有分片迁移。默认为 false,这意味着它不会等待迁移分片。
wait_for_nodes
(可选,字符串)请求等待,直到指定数量的节点 N 可用。它也接受 >=N<=N>N<N。或者,可以使用 ge(N)le(N)gt(N)lt(N) 表示法。
wait_for_status
(可选,字符串)greenyellowred 之一。将等待(直到提供的超时),直到集群的状态更改为提供的状态或更好状态,即 green > yellow > red。默认情况下,不会等待任何状态。

响应正文编辑

cluster_name
(字符串)集群的名称。
status

(字符串)集群的运行状况状态,基于其主分片和副本分片的状体。状态为

  • green:所有分片均已分配。
  • yellow:所有主分片均已分配,但一个或多个副本分片未分配。如果集群中的节点发生故障,则在修复该节点之前,某些数据可能不可用。
  • red:一个或多个主分片未分配,因此某些数据不可用。在集群启动期间,当分配主分片时,可能会短暂出现这种情况。
timed_out
(布尔值)如果为 false,则在 timeout 参数(默认为 30s)指定的时间段内返回响应。
number_of_nodes
(整数)集群中的节点数。
number_of_data_nodes
(整数)专用数据节点的数量。
active_primary_shards
(整数)活动主分片的数量。
active_shards
(整数)活动主分片和副本分片的总数。
relocating_shards
(整数)正在迁移的分片的数量。
initializing_shards
(整数)正在初始化的分片的数量。
unassigned_shards
(整数)未分配的分片的数量。
delayed_unassigned_shards
(整数)分配因超时设置而延迟的分片的数量。
number_of_pending_tasks
(整数)尚未执行的集群级更改的数量。
number_of_in_flight_fetch
(整数)未完成的获取的数量。
task_max_waiting_in_queue_millis
(整数)以毫秒表示的时间,自最早启动的任务等待执行以来。
active_shards_percent_as_number
(浮点数)集群中活动分片的比率,以百分比表示。

示例编辑

$response = $client->cluster()->health();
resp = client.cluster.health()
print(resp)
response = client.cluster.health
puts response
res, err := es.Cluster.Health()
fmt.Println(res, err)
const response = await client.cluster.health()
console.log(response)
GET _cluster/health

对于具有一个分片和一个副本的单个索引的静默单节点集群,API 返回以下响应

{
  "cluster_name" : "testcluster",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 1,
  "active_shards" : 1,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 1,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 50.0
}

以下是在 shards 级别获取集群运行状况的示例

resp = client.cluster.health(
    index="my-index-000001",
    level="shards",
)
print(resp)
response = client.cluster.health(
  index: 'my-index-000001',
  level: 'shards'
)
puts response
GET /_cluster/health/my-index-000001?level=shards