_cat/indices 是什么
_cat/indices 用表格列出集群内的索引:健康色、主分片与副本数、文档数、删除文档数与存储占用。它支持选择列、排序与通配符过滤,是日常巡检与容量核对最快的入口。_cat 系列默认返回纯文本表格,追加 format=json 可得到结构化结果,便于脚本解析入库。
基本信息
| 接口 | GET /_cat/indices 或 /_cat/indices/<模式> |
|---|---|
| 常用参数 | v 显示表头、h= 选择列、s= 排序、expand_wildcards |
| 格式参数 | format=json 返回结构化结果 |
| 健康色 | green 全部正常、yellow 副本未分配、red 主分片缺失 |
| 常用列 | index、health、pri、rep、docs.count、store.size |
| 适用版本 | Elasticsearch 7.x / 8.x |
典型使用场景
- 快速盘点集群有哪些索引,确认命名是否符合规范
- 按存储占用降序找出体积最大的索引,评估是否需要 ILM
- 核对文档数与存储量,判断是否需要加节点或扩磁盘
- 定位健康色不为绿的索引,缩小排查范围
- 确认某个索引的主分片与副本数是否符合预期
- 定期导出表格做容量趋势记录
示例
示例
GET /_cat/indices?v # 全部索引
GET /_cat/indices?v&s=store.size:desc # 按存储降序
GET /_cat/indices/logs-*?v&h=index,health,pri,rep,docs.count,store.size # 只看日志索引
GET /_cat/indices?v&h=index,health&format=json # JSON 便于解析
GET /_cat/indices?v&health=red # 只列不健康的
GET /_cat/indices?v&s=docs.count:desc&h=index,docs.count # 按文档数排序输出逐列读法
| 列名 | 含义 | 正常/异常 |
|---|---|---|
| index | 索引名称 | 命名应体现业务与日期 |
| health | 健康色 | 非 green 需进一步排查 |
| pri / rep | 主分片数与每主分片副本数 | rep 为 0 表示无冗余 |
| docs.count | 文档总数 | 与业务写入量对齐 |
| docs.deleted | 已删除但未清理的文档数 | 长期偏大说明段未合并 |
| store.size | 主分片加副本总占用 | 容量告警的主要指标 |
| pri.store.size | 主分片占用 | 估算原始数据量用它 |
容量巡检要点
- 先看 store.size 排名,再结合写入量判断是否需要滚动索引
- pri.store.size 才能反映真实数据规模,store.size 含副本会翻倍
- docs.deleted 长期偏高说明段合并不足,可考虑 force merge
- health 为 yellow 时确认是副本未分配而不是节点掉线
- 索引数量过多会推高集群状态体积,建议按时间滚动并清理旧索引
- 把巡检结果定期落库,便于观察容量增长趋势
追加 ?format=json 返回结构化结果便于脚本解析;不指定时是纯文本表格,列宽会随内容变化,按固定位置截取容易出错。
h= 与 s= 的列名必须写完整列名,例如排序要写 s=store.size:desc,写成 s=size 不会生效。
yellow 不一定是故障:单节点集群副本无处分配,把 number_of_replicas 调为 0 即可转绿;但调之前必须确认没有节点意外掉线。
列表过长时用通配符或 _cat/indices/logs-* 限定范围,配合 expand_wildcards=open 只列出已打开索引。
与其他巡检接口的分工
- 先看集群健康色确认整体状态,再下钻到索引粒度
- _cat/indices 看每个索引的体积与文档数,定位容量热点
- _cat/shards 看分片落在哪些节点,排查分布倾斜
- _cat/nodes 看节点堆内存与磁盘水位,确认资源瓶颈
- _cat/allocation 看每个节点的分片数与占用,评估均衡性
- GET _cluster/allocation/explain 给出未分配分片的直接原因
巡检顺序建议固定为:集群健康 → 索引列表 → 分片分布 → 节点资源 → 未分配原因,这样每次都能覆盖容量与健康两条主线。
常见异常与处置
- health 为 red:先看 _cat/shards 里哪些主分片未分配,再做分配诊断
- health 为 yellow:确认是副本未分配还是节点掉线,单节点集群属预期
- docs.deleted 长期偏高:说明段未合并,评估 force merge 的时间与 IO 代价
- store.size 突然翻倍:多半是副本数被调大或新增字段占用了索引空间
- 索引数量暴涨:检查按日期滚动的索引是否缺少清理或 ILM 策略
- pri.store.size 与写入量不匹配:可能数据重复写入或同一份数据建了多个索引