SuperAPI AI 工具集

elasticsearch-cluster-health

部署与运维

查看项目

更新于 10-15 14:34

技能介绍

用途

该技能用于对非绿色(yellow 或 red)状态的 Elasticsearch 集群进行只读诊断。目标是定位问题、分类分配决策器,并报告最可能的单一原因及修复建议。技能本身不修改集群状态,只呈现发现结果,由运维人员执行修复操作。

主要能力

  • 读取集群整体健康状态,判断 green、yellow、red 三种状态的含义。
  • 将问题定位到单个索引,优先处理 red 索引、未分配分片最多的索引以及系统索引(如 .security、.kibana*、.fleet-*)。
  • 使用 allocation explain 区分触发事件(unassigned_info.reason)与根本原因(node_allocation_decisions 中的决策器)。
  • 分类分配决策器,包括磁盘水位(disk_threshold)、分配过滤或区域感知(filter/awareness)、恢复限流(throttling)、无有效分片副本(no_valid_shard_copy)等。
  • 根据颜色和分片角色(主分片或副本分片)给出对应的修复建议与紧急程度。

使用方式

该技能通过 elastic CLI 执行 Elasticsearch 操作。若未安装 elastic CLI,需告知用户其用途,不得猜测凭据、直接调用 HTTP API 或尝试其他变通方法。文档中的 HTTP 简写形式(如 GET /_cluster/health)均映射到对应的 elastic CLI 命令,应始终使用 CLI 而非直接调用 HTTP API。

诊断流程:

  1. 读取整体状态:调用 GET /_cluster/health,查看 status、unassigned_shards、initializing_shards、relocating_shards。仅当状态为 yellow 或 red 时继续。
  2. 定位到单个索引:调用 GET /_cluster/health?level=indices,选择驱动集群状态的索引。
  3. 区分触发与根因:调用 POST /_cluster/allocation/explain,按顺序读取 primary、can_allocate、unassigned_info.reason、allocate_explanation、node_allocation_decisions[].deciders[]。
  4. 分类决策器:将阻塞信号映射到原因类别,优先采用 decision: "NO" 的决策器而非 unassigned_info.reason。
  5. 给出修复建议:报告最可能的原因(决策器类别 + 原文 allocate_explanation)和一条主要修复路径,紧急程度与颜色和分片角色匹配。

适用场景

  • 运维人员报告集群 yellow 或 red 状态,需要快速定位原因。
  • 节点离开后副本无法分配,需要判断是磁盘水位、过滤还是其他原因。
  • 主分片未分配且无有效副本,需要评估数据丢失风险并给出恢复路径。
  • 集群正在自愈(恢复限流或对等恢复进行中),需要确认进度并决定是否升级处理。

限制

  • 只读诊断:仅使用 GET/POST explain API 进行分诊,修复建议由运维人员执行,技能不执行 reroute、快照恢复或设置更改。
  • 需要 elastic CLI:未安装时不得猜测凭据或直接调用 HTTP API。
  • 触发事件不等于根本原因:unassigned_info.reason 仅说明分片为何变为未分配,node_allocation_decisions 中的决策器才说明为何分配仍然失败。
  • 副本与主分片区分:yellow + primary: false 表示冗余缺口而非数据丢失;red + primary: true 表示该分片数据缺失。
  • 聚焦一个索引、一个原因:选择影响最大的索引和最强的 NO 决策器,避免罗列所有分片。
  • 对于 no_valid_shard_copy 场景,allocate_empty_primary 仅作为最后手段,且必须明确说明数据丢失。