elasticsearch索引列表排除系统索引(.xxx)

排除以.开头的索引(通常是系统索引、隐藏索引如.kibana.security.monitoring-*等),最简单直接的方式是利用_cat/indices API 支持的索引模式(index pattern),使用排除语法 *, -.*

推荐写法

1
GET /_cat/indices/*,-.*?v&s=index
  • * → 包含所有索引
  • ,-.* → 排除所有以.开头的索引
  • ?v → 显示表头(verbose,可读性更好)
  • &s=index → 按索引名称排序(可选,但推荐,便于查看)

等价写法(效果完全相同):

1
2
GET /_cat/indices/*,-.*?v
GET /_cat/indices/*,-.kibana*,-.security*,-.monitoring*?v # 更精细排除(如果只想排除特定几类)

在Kibana Dev Tools示例

1
GET _cat/indices/*,-.*?v&h=health,status,index,pri,rep,docs.count,store.size,pri.store.size&s=index
  • 加了 &h=... 可以自定义只显示你关心的列(健康状态、分片、主/副本、文档数、占用空间等)
  • 常见列:health status index pri rep docs.count store.size pri.store.size

为什么用 *, -.* 而不是其他方式?

  • Elasticsearch 的索引模式支持 +(强制包含)和 -(强制排除),*,-.* 是社区公认、最简洁的排除“点开头索引”的写法。
  • 直接 GET _cat/indices 默认行为在较新版本(7.10+ / 8.x)可能会显示部分隐藏/系统索引(取决于 index.hidden 设置和数据流),所以显式排除更可靠。

一行命令统计用户索引数量

1
curl -X GET "http://your-es-endpoint:9200/_cat/indices/*,-.*?v" | grep -v "^$" | wc -l