集群状态 API

编辑

返回集群状态的内部表示形式,用于调试或诊断目的。

请求

编辑

GET /_cluster/state/<metrics>/<target>

先决条件

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

描述

编辑

集群状态 是一个内部数据结构,用于跟踪每个节点所需的大量信息,包括

  • 集群中其他节点的身份和属性
  • 集群范围的设置
  • 索引元数据,包括每个索引的映射和设置
  • 集群中每个分片副本的位置和状态

当选的主节点确保集群中的每个节点都拥有相同集群状态的副本。集群状态 API 允许您检索此内部状态的表示形式,以进行调试或诊断。您可能需要查阅 Elasticsearch 源代码以确定响应的精确含义。

默认情况下,集群状态 API 会将请求路由到当选的主节点,因为此节点是集群状态的权威来源。您还可以通过添加查询参数 ?local=true 来检索处理 API 请求的节点上保存的集群状态。

在较大的集群中,Elasticsearch 可能需要花费大量精力来计算对此 API 的响应,并且响应可能包含大量数据。如果您反复使用此 API,则集群可能会变得不稳定。

响应是内部数据结构的表示形式。它的格式不受与其他更稳定 API 相同的兼容性保证约束,并且可能在不同版本之间发生变化。 不要使用外部监控工具查询此 API。 相反,请使用其他更稳定的 集群 API 获取所需的信息。

路径参数

编辑

集群状态有时可能非常大,并且 Elasticsearch 在计算对此 API 的响应时可能会消耗大量资源。为了减小响应的大小,您可以仅请求您感兴趣的集群状态部分

<metrics>

(可选,字符串) 以下选项的逗号分隔列表

_all
显示所有指标。
blocks
显示响应的 blocks 部分。
master_node
显示响应的 master_node 部分。
metadata
显示响应的 metadata 部分。如果您提供逗号分隔的索引列表,则返回的输出将仅包含这些索引的元数据。
nodes
显示响应的 nodes 部分。
routing_nodes
显示响应的 routing_nodes 部分。
routing_table
显示响应的 routing_table 部分。如果您提供逗号分隔的索引列表,则返回的输出将仅包含这些索引的路由表。
version
显示集群状态版本。
<target>
(可选,字符串) 用于限制请求的数据流、索引和别名的逗号分隔列表。支持通配符 (*)。要定位所有数据流和索引,请省略此参数或使用 *_all

查询参数

编辑
allow_no_indices

(可选,布尔值) 如果为 true,则解析为无具体索引的通配符索引表达式将被忽略。(这包括 _all 字符串或未指定索引时)。

默认为 true

expand_wildcards
(可选,字符串) 是否将通配符表达式扩展到打开、关闭或两者兼有的具体索引。可用选项:openclosednoneall
flat_settings
(可选,布尔值) 如果为 true,则以扁平格式返回设置。默认为 false
ignore_unavailable
(可选,布尔值) 如果为 true,则会忽略不可用的索引(丢失或关闭)。
local
(可选,布尔值) 如果为 true,则请求仅从本地节点检索信息。默认为 false,这意味着信息是从主节点检索的。
master_timeout
(可选,时间单位) 等待主节点的时间段。如果在超时过期之前主节点不可用,则请求失败并返回错误。默认为 30s。也可以设置为 -1 以指示请求永远不会超时。
wait_for_metadata_version
(可选,整数) 等待元数据版本等于或大于指定的元数据版本。
wait_for_timeout
(可选,时间单位) 指定在超时之前等待 wait_for_metadata_version 的最大时间。

示例

编辑

以下示例仅返回 foobar 数据流或索引的 metadatarouting_table 数据

resp = client.cluster.state(
    metric="metadata,routing_table",
    index="foo,bar",
)
print(resp)
response = client.cluster.state(
  metric: 'metadata,routing_table',
  index: 'foo,bar'
)
puts response
const response = await client.cluster.state({
  metric: "metadata,routing_table",
  index: "foo,bar",
});
console.log(response);
GET /_cluster/state/metadata,routing_table/foo,bar

下一个示例返回 foobar 的所有可用元数据

resp = client.cluster.state(
    metric="_all",
    index="foo,bar",
)
print(resp)
response = client.cluster.state(
  metric: '_all',
  index: 'foo,bar'
)
puts response
const response = await client.cluster.state({
  metric: "_all",
  index: "foo,bar",
});
console.log(response);
GET /_cluster/state/_all/foo,bar

此示例仅返回 blocks 元数据

resp = client.cluster.state(
    metric="blocks",
)
print(resp)
response = client.cluster.state(
  metric: 'blocks'
)
puts response
const response = await client.cluster.state({
  metric: "blocks",
});
console.log(response);
GET /_cluster/state/blocks