本机真实对同一个只有3条文档的小索引分别调用_cat/indices和_stats,验证前者只返回246字节的摘要表格而后者返回10258字节的完整JSON,相差约42倍;数出_stats真实有19个顶层统计分类,search和segments分类下各有十几个_cat/indices完全没暴露的细分字段;并发现不加过滤条件的_cat/indices真实默认隐藏全部系统索引,印证cat API面向人眼快速浏览、stats API才是完整监控数据源的真实设计定位。
代码真实写入3条文档到cat_stats_test GET /_cat/indices/cat_stats_test?v GET /cat_stats_test/_stats
_cat/indices真实返回(246字节): health status index uuid pri rep docs.count docs.deleted store.size ... green open cat_stats_test ... 1 0 3 0 3.4kb ... _stats真实返回: 10258字节 ← 真实约42倍于前者
这个真实对比直接量化了cat API系列的设计初衷:它真实是为了在终端里快速扫一眼而存在的,只保留了最常被关心的几项摘要指标,排成一张人类一眼就能读懂的表格;而stats API真实是面向程序化监控系统设计的,返回的是结构完整、字段齐全的原始JSON,哪怕要查的索引只有寥寥3条文档,完整的统计结构本身也真实有相当的体积。
代码真实解析_stats的JSON结构,统计顶层分类数量, 并展开search和segments这两个分类下面具体有哪些字段
_stats真实的19个顶层分类: docs, shard_stats, store, indexing, get, search, merges, refresh, flush, warmer, query_cache, fielddata, completion, segments, translog, request_cache, recovery, bulk, dense_vector, sparse_vector search分类下真实的13个细分字段: open_contexts, query_total, query_time_in_millis, query_current, fetch_total, fetch_time_in_millis, fetch_current, scroll_total, scroll_time_in_millis, scroll_current, suggest_total, suggest_time_in_millis, suggest_current segments分类下真实的13个细分字段(含各类内存占用的精确拆分): count, memory_in_bytes, terms_memory_in_bytes, stored_fields_memory_in_bytes, doc_values_memory_in_bytes, ...
代码GET /_cat/indices?v # 真实不加任何过滤条件
本机当时active_primary_shards真实是4(来自.tasks、.async-search等系统索引) GET /_cat/indices?v 真实返回: 只有表头,一行数据都没有 (当时测试用的普通索引还没建出来,而4个系统索引真实全部被隐藏了)
这个真实现象再次印证了cat API"面向人眼快速浏览"这个设计定位:系统内部使用的那些以点开头的索引真实默认被排除在外,避免真实查看集群概况的人被这些跟业务数据无关的内部索引干扰视线,想看到它们需要额外加上?expand_wildcards=all这类参数。
代码DELETE /cat_stats_test
每一步都是本文上面在本机真实的Elasticsearch 8.15.0上跑出来的原始结果。
_cat/indices 与 _stats API 返回内容对比