一、集群健康状态 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 是集群的元数据核心,包含集群运行所需的所有关键信息:

  1. 集群中所有节点的身份与属性
  2. 集群范围的设置(settings
  3. 所有索引的元数据(映射 mappings、设置 settings
  4. 每个分片副本的位置与状态(路由表 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*

三、集群统计 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                        // (危险!) 允许取消主分片,需显式声明
      }
    }
  ]
}
  • 用途:强制负载均衡、在节点维护前迁移数据、解决特定分配阻塞问题。
  • 警告movecancel 操作会触发数据复制,消耗网络和磁盘 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_percent


curl 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 节点压力大。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐