一、集群健康状态 API (_cluster/health
)
获取集群的总体健康状况,是监控的首要指标。
GET http://192.168.130.61:9200/_cluster/health
响应字段解析
curl http://192.168.130.61:9200/_cluster/health 2>/dev/null |jq
{"cluster_name": "Elasticsearch", // 集群名称"status": "green", // 集群状态: green/yellow/red"timed_out": false, // 请求是否超时"number_of_nodes": 3, // 集群总节点数"number_of_data_nodes": 3, // 数据节点数"active_primary_shards": 20, // 活跃主分片数"active_shards": 31, // 活跃总分片数 (主+副本)"relocating_shards": 0, // 正在迁移的分片数"initializing_shards": 0, // 正在初始化的分片数"unassigned_shards": 0, // 未分配的分片数 (需重点关注)"delayed_unassigned_shards": 0, // 延迟未分配的分片数"number_of_pending_tasks": 0, // 待处理的集群任务数"active_shards_percent_as_number": 100.0 // 活跃分片百分比
}
响应关键字段说明:
-
status
: 集群状态,green
(所有分片正常)、yellow
(主分片正常,副本分片缺失)、red
(有主分片缺失)。 -
number_of_nodes
: 集群中的节点数。 -
number_of_data_nodes
: 数据节点数。 -
active_primary_shards
: 活跃的主分片数。 -
active_shards
: 活跃的总分片数(主+副本)。 -
unassigned_shards
: 未分配的分片数(需重点关注)。 -
用途:快速判断集群是否健康,是否存在分片未分配、节点丢失等问题。
-
参考链接:Elasticsearch 8.2 - cluster health
二、集群状态 API (_cluster/state
)
_cluster/state
是集群的元数据核心,包含集群运行所需的所有关键信息:
- 集群中所有节点的身份与属性
- 集群范围的设置(
settings
) - 所有索引的元数据(映射
mappings
、设置settings
) - 每个分片副本的位置与状态(路由表
routing_table
)
常用调用方式
# (1) 获取完整的集群状态 (信息量大,谨慎调用)
GET http://192.168.130.61:9200/_cluster/state# (2) 仅获取节点信息
GET http://192.168.130.61:9200/_cluster/state/nodes# (3) 获取指定元数据 (nodes, version, routing_table) 和指定索引 (oldboyedu* 开头) 的状态
GET http://192.168.130.61:9200/_cluster/state/nodes,version,routing_table/oldboyedu*
- 用途:深度诊断元数据问题、理解集群内部结构。生产环境避免频繁调用完整状态。
- 参考链接:Elasticsearch 8.2 - cluster state
三、集群统计 API (_cluster/stats
)
从集群层面汇总所有节点的统计信息,提供资源使用概览。
GET http://192.168.130.61:9200/_cluster/stats
返回信息包含
-
基本索引指标:分片总数、文档总数、存储使用总量。
-
节点信息:节点数量、角色分布。
-
系统资源:
- 操作系统:CPU 使用率、内存、负载。
- JVM:版本、堆内存使用、GC 情况。
- 进程:打开文件描述符数。
-
已安装插件。
-
用途:全面了解集群整体资源消耗与负载,辅助容量规划。
-
参考链接:Elasticsearch 8.2 - cluster stats
四、集群分片分配诊断 API (_cluster/allocation/explain
)
当分片未分配或未按预期重平衡时,此 API 提供根本原因分析。
诊断未分配分片原因
GET http://192.168.130.61:9200/_cluster/allocation/explain
{"index": "teacher", // 目标索引"shard": 0, // 分片编号"primary": true // 是否为主分片
}
- 输出:详细解释为何该主分片
0
未能分配(如磁盘不足、节点排斥规则、版本不兼容等)。
解释已分配分片为何未移动
-
即使分片已分配,此 API 也会解释为何它没有被移动到其他节点(例如,由于
allocation
设置、分片平衡策略或成本考量)。 -
用途:精准定位分片分配问题,是解决
UNASSIGNED
分片的首选工具。 -
参考链接:Elasticsearch 8.2 - cluster allocation explain
五、集群分片重路由 API (_cluster/reroute
)
手动干预分片分配,允许移动、取消或分配分片。生产环境务必谨慎使用!
(1) 移动分片
将分片从一个节点显式移动到另一个节点。
POST http://192.168.130.61:9200/_cluster/reroute
{"commands": [{"move": {"index": "webdata-logs-v1", // 索引名"shard": 0, // 分片号"from_node": "es-node-01", // 源节点"to_node": "es-node-02" // 目标节点}}]
}
(2) 取消分片分配
取消一个已分配的副本分片,触发其重新初始化和再分配。
POST http://192.168.130.61:9200/_cluster/reroute
{"commands": [{"cancel": {"index": "oldboyedu-linux85-student-jiaoshi07", // 索引名"shard": 0, // 分片号"node": "elk103.oldboyedu.com" // 要取消的节点// "allow_primary": true // (危险!) 允许取消主分片,需显式声明}}]
}
- 用途:强制负载均衡、在节点维护前迁移数据、解决特定分配阻塞问题。
- 警告:
move
和cancel
操作会触发数据复制,消耗网络和磁盘 I/O。切勿随意取消主分片 (allow_primary
)。 - 参考链接:Elasticsearch 8.2 - cluster reroute
六、补充:其他关键运维 API (强烈推荐)
1. 节点信息 (_cat/nodes
)
GET http://192.168.130.61:9200/_cat/nodes?v&h=ip,name,heap.percent,ram.percent,cpu,load_1m,roles,disk.avail,disk.used_percentcurl http://192.168.130.61:9200/_cat/nodes?v
curl http://192.168.130.61:9200/_cat/nodes
- 用途:查看每个节点的实时状态,如 CPU、内存、堆内存、磁盘使用率、角色(master, data, ingest 等)和负载。
_cat/nodes
的输出更简洁,适合快速查看。
2. 索引信息 (_cat/indices
)
GET http://192.168.130.61:9200/_cat/indices?v&s=store.size:desc
- 用途:监控索引大小、文档数、健康状态,识别大索引或问题索引。
3. 挂起任务 (_cat/tasks
)
GET http://192.168.130.61:9200/_cat/tasks?v
- 用途:查看正在运行的长时间任务(reindex, delete-by-query 等),排查阻塞。
4. 待处理任务 (_cluster/pending_tasks
)
GET http://192.168.130.61:9200/_cluster/pending_tasks
- 用途:检查集群任务队列,队列过长可能预示 Master 节点压力大。