如何用Elasticsearch cat API查看集群信息?

来源:AI视频音频作者:关中王头衔:草根站长
导读:本期聚焦于关中王创作的《如何用Elasticsearch cat API查看集群信息?》,敬请观看详情。排查Elasticsearch集群时,完整JSON响应往往信息过载,几行命令难以快速定位问题。cat API把健康状态、节点角色、索引分片、磁盘水位等核心指标压缩成对齐文本,默认输出适合终端阅读。本文从快速上手开始,介绍health、nodes、indices、shards等端点,说明v、h、s、format参数如何控制表头、列选择、排序与输出格式,并给出生产环境巡检中常见的命令组合。掌握这些命令后,你可以不依赖可视化工具在几秒内完成集群健康判断与资源排查。

当 Elasticsearch 集群出现写入延迟升高、节点离线或分片未分配时,第一时间需要获取的信息通常很简单:集群现在是绿色还是红色、哪些节点压力大、哪些索引分片异常。REST 接口返回的完整 JSON 虽然信息全面,但在终端里逐层解析会很吃力。Elasticsearch 提供的 cat API 正是为这种场景设计,它把集群元数据压缩成单行文本或表格,配合少量查询参数就能快速定位问题。本文将围绕 cat API 中与集群信息密切相关的端点展开,介绍常用命令、参数控制以及生产环境巡检技巧。

如何用Elasticsearch cat API查看集群信息?

一、cat API 的设计目标与基本用法

cat API 的设计目标是让人和脚本都能轻松读懂输出。与标准 REST 接口返回的 JSON 结构不同,cat API 默认输出对齐文本,每一行代表一个对象,列之间用空格分隔。例如查看集群健康状态时,一条命令就能得到节点总数、数据节点数、分片数量、未分配分片等核心字段。这种输出格式非常适合在终端中快速浏览,也便于通过 awk、cut 等命令行工具做二次处理。

所有 cat API 都挂在 _cat 路径下,使用 GET 请求访问特定的端点。最常见的入门操作是给命令加上 ?v 参数来显示表头。例如执行下面的命令可以查看集群健康状态,其中 v 表示 verbose,也就是输出列名。不加 ?v 时只有数据行,加了之后第一行会变成字段名,方便理解每一列的含义。

curl -XGET 'http://127.0.0.1:9200/_cat/health?v'

输出结果大致如下:

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1615471234 10:00:34  my_cluster    green           3         2     18   9    0    0        0             0                  -                100.0%

可以看到第一行是字段名,第二行是对应的值。status 字段为 green 表示所有主分片和副本分片都已分配,yellow 表示主分片已分配但部分副本未分配,red 则表示有主分片未分配,需要立即处理。通过这一条命令,你就能快速判断集群是否处于健康状态,而不需要解析多层 JSON。

二、核心集群信息端点详解

除了 _cat/health 之外,cat API 还提供了多个专门用于查看集群不同维度信息的端点。其中 _cat/nodes 用于查看每个节点的资源使用情况,_cat/indices 用于查看索引级别的状态和存储占用,_cat/shards 则展示分片分配细节。合理搭配这些端点,可以快速定位是节点资源瓶颈还是索引分片不平衡导致的问题。

查看节点信息时,最常用的是 _cat/nodes 端点。默认输出包含节点名、IP、角色、负载、堆内存使用率等列。如果只想关注某几个关键指标,可以通过 h 参数指定列。下面的命令只输出节点名、IP、堆内存百分比、内存百分比、CPU、1分钟负载、节点角色和主节点标识。

curl -XGET 'http://127.0.0.1:9200/_cat/nodes?v&h=name,ip,heap.percent,ram.percent,cpu,load_1m,node.role,master'

输出会按指定列顺序排列,每一行对应一个节点。通过观察 heap.percent 和 ram.percent 可以判断节点是否存在内存压力,cpu 和 load_1m 则反映计算资源使用情况。如果发现某个节点的 heap.percent 长期接近 100%,很可能需要进行 JVM 参数调整或减少该节点上的分片数量。

索引层级的信息主要通过 _cat/indices 获取。它能列出所有索引的健康状态、文档数、主分片和副本分片数量、存储大小等。在排查磁盘水位问题时,通常先按照存储大小排序,找出占用空间最多的索引。下面这条命令使用 s 参数按 store.size 字段降序排序。

curl -XGET 'http://127.0.0.1:9200/_cat/indices?v&s=store.size:desc'

输出结果中会先显示存储量最大的索引。对于存储占用异常偏高的索引,可以进一步检查其映射设置、段合并情况或者是否有大量删除文档未被回收。如果只关注单个索引,可以在路径后面跟上索引名称,比如 _cat/indices/my_index 只显示该索引的信息。

分片维度的排查则需要使用 _cat/shards。它能展示每个分片的主副状态、所在节点、文档数以及未分配原因。当集群状态为 yellow 或 red 时,执行 _cat/shards?v 并重点关注 state 为 UNASSIGNED 的行,就能看到哪些分片未能分配以及原因。常见原因包括节点磁盘水位过高、分片分配过滤规则限制、索引重建过程中人为关闭分配等。

三、输出格式控制与实战技巧

cat API 最大优势在于输出格式可以灵活切换。除了默认的对齐文本,还可以通过 format 参数指定为 JSON 或 YAML。JSON 格式对于脚本处理非常友好,很多自动化巡检工具会先以 JSON 格式获取数据,再通过 jq 等命令做过滤。例如把健康状态输出为 JSON:

curl -XGET 'http://127.0.0.1:9200/_cat/health?format=json&pretty'

返回的 JSON 是一个数组,每个元素包含一个对象,键名与文本输出的列名一致。这样在 shell 脚本中就可以利用 jq 提取特定字段。下面这段脚本演示了如何获取集群状态并判断是否需要告警:

status=$(curl -s 'http://127.0.0.1:9200/_cat/health?format=json&h=status' | jq -r '.[0].status')
if [ "$status" != "green" ]; then
  echo "Cluster status is $status"
fi

使用 h 参数配合 JSON 格式时,返回的 JSON 对象只包含指定字段,能够减少传输数据量。需要注意的是,如果同时指定多个字段,字段名之间用逗号分隔,不能有多余空格。例如 h=status,node.total,active_shards_percent 是合法的,而 h=status, node.total 可能会被解析成包含空格的列名。

在生产环境中频繁执行 _cat/indices_cat/shards 可能会给集群带来一定开销,尤其是在索引数量很多、分片数量上千的场景下。建议将这些命令放在监控脚本中定时执行,而不是在循环中无节制调用。同时可以利用 s 参数排序和 h 参数裁剪字段,减少返回的数据量。对于需要实时展示的场景,可以结合 watch 命令周期性刷新,但间隔不宜过短,一般 10 秒到 30 秒即可满足大多数巡检需求。

cat API 的另一个实用技巧是通过 help 参数查看某个端点支持的所有列名。例如执行 _cat/nodes?help 会列出全部可选字段及其含义。当你需要按某个特殊指标排查问题,但不确定列名时,这个帮助信息非常有用。它还能帮你发现一些不太常用但很有价值的字段,比如 disk.availsegments.countsuggest.total 等。

Elasticsearchcat API集群信息修改时间:2026-08-20 01:13:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。