📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

此 API 用于显示集群中所有索引的分片状态和详细统计信息。

API #

GET /_cat/shards
GET /_cat/shards/{index}

API 的作用 #

返回集群中所有分片的状态和统计信息,包括:

  • 分片基本信息:索引名称、分片 ID、主副分片标识、状态
  • 文档统计:分片中的文档数量
  • 存储信息:分片存储大小
  • 节点信息:分片所在节点的 IP 和名称
  • 操作统计:索引、查询、刷新、合并等操作的计数和耗时
  • 缓存统计:查询缓存、字段数据缓存等
  • 段统计:段数量、内存使用等

API 的参数 #

路由参数 #

参数类型是否必需描述
indexstring可选索引名称
支持逗号分隔多个索引
支持通配符 *

查询字符串参数 #

参数类型是否必需默认值描述
bytesstring可选自动字节显示单位
可选值:b, kb, mb, gb, tb, pb
formatstring可选text响应格式
可选值:json, yaml, text
hstring可选默认列指定显示的列,逗号分隔
helpboolean可选false显示帮助信息
localboolean可选false是否从本地节点获取信息
master_timeouttime可选30s等待主节点响应的超时时间
sstring可选-排序列,支持 :asc:desc
sizestring可选原始计数显示单位
可选值:k, m, g, t, p
timestring可选ms时间显示单位
可选值:nanos, micros, ms, s, m, h, d
vboolean可选false详细模式,显示列头

返回的字段信息 #

默认显示字段 #

列名描述
index索引名称
shard分片 ID
prirep主副分片标识(p=primary, r=replica)
state分片状态(STARTED、UNASSIGNED、INITIALIZING、RELOCATING)
docs分片中的文档数量
store分片存储大小
ip分片所在节点的 IP 地址
node分片所在节点的名称

可选显示字段 #

列名描述
sync_id同步 ID
unassigned.reason分片未分配的原因
unassigned.at分片未分配的时间
unassigned.for分片未持续的时长
completion.size完成字段的大小
fielddata.memory_size字段数据缓存内存大小
fielddata.evictions字段数据驱逐次数
query_cache.memory_size查询缓存内存大小
query_cache.evictions查询缓存驱逐次数
flush.total刷新操作总数
flush.total_time刷新操作总耗时
get.current当前 get 操作数
get.timeget 操作耗时
get.totalget 操作总数
get.exists_time成功 get 操作耗时
get.exists_total成功 get 操作总数
get.missing_time失败 get 操作耗时
get.missing_total失败 get 操作总数
indexing.delete_current当前删除操作数
indexing.delete_time删除操作耗时
indexing.delete_total删除操作总数
indexing.index_current当前索引操作数
indexing.index_time索引操作耗时
indexing.index_total索引操作总数
indexing.index_failed索引失败操作数
merges.current当前合并操作数
merges.current_docs当前合并的文档数
merges.current_size当前合并的大小
merges.total合并操作总数
merges.total_time合并操作总耗时
refresh.total刷新操作总数
refresh.time刷新操作耗时
refresh.external_total外部刷新操作总数
refresh.external_time外部刷新操作耗时
refresh.listeners待处理的刷新监听器数
search.fetch_current当前获取阶段操作数
search.fetch_time获取阶段耗时
search.fetch_total获取操作总数
search.open_contexts开放的搜索上下文
search.query_current当前查询阶段操作数
search.query_time查询阶段耗时
search.query_total查询操作总数
search.scroll_current开放的滚动上下文
search.scroll_time滚动上下文保持时间
search.scroll_total完成的滚动上下文数
segments.count段数量
segments.memory段内存使用
segments.index_writer_memory索引写入器内存使用
segments.version_map_memory版本图内存使用
segments.fixed_bitset_memory固定位集内存使用
seq_no.max最大序列号
seq_no.local_checkpoint本地检查点
seq_no.global_checkpoint全局检查点
warmer.current当前预热操作数
warmer.total预热操作总数
warmer.total_time预热操作总耗时
path.data分片数据路径
path.state分片状态路径

分片状态说明 #

状态描述
STARTED分片已启动并正常运行
UNASSIGNED分片未分配到任何节点
INITIALIZING分片正在初始化
RELOCATING分片正在迁移到其他节点

请求示例 #

# 查询所有分片
GET /_cat/shards

# 显示列头
GET /_cat/shards?v

# 查询指定索引的分片
GET /_cat/shards/my-index

# 查询多个索引的分片
GET /_cat/shards/index1,index2

# 使用通配符查询
GET /_cat/shards/logs-*

# 使用 JSON 格式
GET /_cat/shards?format=json

# 只显示特定列
GET /_cat/shards?h=index,shard,prirep,state,store,node

# 按存储大小降序排列
GET /_cat/shards?s=store:desc

# 显示未分配的分片
GET /_cat/shards?h=index,shard,prirep,state,unassigned.reason

# 显示索引操作统计
GET /_cat/shards?h=index,indexing.index_current,indexing.index_total

# 显示段统计信息
GET /_cat/shards?h=index,segments.count,segments.memory

响应示例 #

文本格式(默认) #

index shard prirep state      docs store ip        node
logs  0     p      STARTED  1000  5mb  10.0.1.1   data-node-1
logs  0     r      STARTED  1000  5mb  10.0.1.2   data-node-2
logs  1     p      STARTED  1200  6mb  10.0.1.2   data-node-2
logs  1     r      STARTED  1200  6mb  10.0.1.3   data-node-3

JSON 格式 #

[
  {
    "index": "logs",
    "shard": "0",
    "prirep": "p",
    "state": "STARTED",
    "docs": "1000",
    "store": "5mb",
    "ip": "10.0.1.1",
    "node": "data-node-1"
  },
  {
    "index": "logs",
    "shard": "0",
    "prirep": "r",
    "state": "STARTED",
    "docs": "1000",
    "store": "5mb",
    "ip": "10.0.1.2",
    "node": "data-node-2"
  }
]

未分配分片示例 #

index       shard prirep state        docs store ip   node
test-index  0     p      UNASSIGNED   -    -    -    -
test-index  0     r      STARTED      100  1mb  ...  data-node-1

使用场景 #

  1. 分片状态监控:检查所有分片是否正常分配
  2. 负载均衡检查:确认主副分片分布是否合理
  3. 性能分析:查看索引、查询等操作的统计信息
  4. 存储管理:监控各分片的存储大小
  5. 问题排查:诊断未分配分片的原因

排查未分配分片 #

# 查看未分配分片及原因
GET /_cat/shards?h=index,shard,prirep,state,unassigned.reason,unassigned.details

常见的未分配原因:

  • INDEX_CREATED:索引创建后分片尚未分配
  • CLUSTER_RECOVERED:集群恢复后的分片
  • NODE_LEFT:节点离开导致分片未分配
  • ALLOCATION_FAILED:分片分配失败

性能监控示例 #

# 查看索引操作统计
GET /_cat/shards?h=index,indexing.index_current,indexing.index_total,indexing.index_failed

# 查看搜索操作统计
GET /_cat/shards?h=index,search.query_current,search.fetch_current

# 查看合并操作
GET /_cat/shards?h=index,merges.current,merges.total,merges.total_time

# 查看段统计
GET /_cat/shards?h=index,segments.count,segments.memory,segments.index_writer_memory

注意事项 #

  1. local=true 时可能返回过时信息,但响应更快
  2. 通配符 * 可以匹配多个索引
  3. 分片状态变化频繁,建议实时监控
  4. 大量分片时响应时间可能较长
  5. 某些字段(如 docs)可能显示 - 表示不可用

最佳实践 #

  1. 定期检查:定期检查未分配分片,及时处理
  2. 均衡分布:确保主副分片分布在不同节点
  3. 监控性能:关注索引和查询操作的统计信息
  4. 段管理:监控段数量,定期执行 force_merge
  5. 告警设置:对未分配分片设置告警

相关文档 #