集群健康 API

编辑

返回集群的健康状态。

请求

编辑

GET /_cluster/health/<目标>

先决条件

编辑
  • 如果启用了 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

路径参数

编辑
<目标>

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

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

查询参数

编辑
level
(可选,字符串) 可以是 clusterindicesshards 之一。控制返回的健康信息的详细级别。默认为 cluster
local
(可选,布尔值) 如果为 true,则请求仅从本地节点检索信息。默认为 false,这意味着信息是从主节点检索的。
master_timeout
(可选,时间单位) 等待主节点的时间段。如果主节点在超时过期之前不可用,则请求失败并返回错误。默认为 30s。也可以设置为 -1 以表示请求永不超时。
timeout
(可选,时间单位) 在更新集群元数据后,等待来自集群中所有相关节点的响应的时间段。如果在超时过期之前没有收到响应,则集群元数据更新仍然适用,但响应将指示它未完全确认。默认为 30s。也可以设置为 -1 以表示请求永不超时。
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
(整数) 未分配的分片数。
unassigned_primary_shards
(整数) 未分配的主分片数量。 注意:如果您的集群包含运行低于 8.16 版本的节点,则此数字可能低于真实值。为了在这种情况下获得更准确的计数,请使用集群健康 API
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,
  "unassigned_primary_shards" : 0,
  "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
const response = await client.cluster.health({
  index: "my-index-000001",
  level: "shards",
});
console.log(response);
GET /_cluster/health/my-index-000001?level=shards