Elasticsearch Index Monitoring(索引监控)之Index Stats API详解
本文将详细介绍Elasticsearch Index Monitoring监控命令之Index Stats API。
索引状态统计。默认情况下,该API会返回所有类型的统计信息,Indices Stats返回如下类型的统计信息。
docs
文档总数量(包含已删除的文档),调用文档删除API后并不会立即将文档物理删除,会保留一段时间,受refreshing the index的影响。其返回示例如下:
1"docs" : {
2 "count" : 1286,
3 "deleted" : 0
4 }
store
索引存储的总大小,其返回示例如下:
1"store" : {
2 "size_in_bytes" : 459254
3}
其返回字段说明如下:
size_in_bytes
索引大小,单位为字节。
indexing
新增、更新、删除索引操作的统计信息,其返回示例如下:
1"indexing" : {
2 "index_total" : 0,
3 "index_time_in_millis" : 0,
4 "index_current" : 0,
5 "index_failed" : 0,
6 "delete_total" : 0,
7 "delete_time_in_millis" : 0,
8 "delete_current" : 0,
9 "noop_update_total" : 0,
10 "is_throttled" : false,
11 "throttle_time_in_millis" : 0
12 }
其返回字段说明如下:
index_total
索引操作总次数。index_time_in_millis
索引操作总耗时。index_current
当前正在执行索引操作的个数。index_failed
失败的索引操作次数。delete_total
执行删除索引操作的次数。delete_time_in_millis
删除索引操作总耗时。delete_current
当前正在执行删除索引操作的个数。noop_update_total
空更新总次数(检测到空更新的次数)。is_throttled
索引是否处在merge throttling control(合并节流控制状态)。throttle_time_in_millis
索引处在merge throttling control(合并节流状态)的时间开销。
get
get api 统计信息,其返回示例如下:
1"get" : {
2 "total" : 0,
3 "time_in_millis" : 0,
4 "exists_total" : 0,
5 "exists_time_in_millis" : 0,
6 "missing_total" : 0,
7 "missing_time_in_millis" : 0,
8 "current" : 0
9}
其返回字段说明如下:
total
get api总调用次数。time_in_millis
get api总耗时。exists_total
命中的次数。exists_time_in_millis
命中的操作总耗时。missing_total
未命中的总次数。missing_time_in_millis
未命中的操作的总耗时。current
当前正在执行的个数。
search
查询API的统计信息,其返回示例如下:
1 "search" : {
2 "open_contexts" : 0,
3 "query_total" : 0,
4 "query_time_in_millis" : 0,
5 "query_current" : 0,
6 "fetch_total" : 0,
7 "fetch_time_in_millis" : 0,
8 "fetch_current" : 0,
9 "scroll_total" : 0,
10 "scroll_time_in_millis" : 0,
11 "scroll_current" : 0,
12 "suggest_total" : 0,
13 "suggest_time_in_millis" : 0,
14 "suggest_current" : 0
15 },
其返回字段说明如下:
open_contexts
正在打开的查询上下文个数。query_total
查询出来的总数据条数。query_time_in_millis
查询阶段所耗费的时间。query_current
当前正在查询个数。fetch_total
Fetch操作的次数。fetch_time_in_millis
Fetch阶段总耗时时间。fetch_current
正在fetch的次数。scroll_total
通过scroll api查询数据总条数。scroll_time_in_millis
通过scroll api总耗时时间。scroll_current
当前滚动API调用次数。suggest_total
通过suggest api获取的推荐总数量。suggest_time_in_millis
suggest总耗费时间。suggest_current
正在执行suggest api的个数。
merges
合并相关的统计信息,其输出示例如下:
1 "merges" : {
2 "current" : 0,
3 "current_docs" : 0,
4 "current_size_in_bytes" : 0,
5 "total" : 0,
6 "total_time_in_millis" : 0,
7 "total_docs" : 0,
8 "total_size_in_bytes" : 0,
9 "total_stopped_time_in_millis" : 0,
10 "total_throttled_time_in_millis" : 0,
11 "total_auto_throttle_in_bytes" : 104857600
12 }
其返回字段说明如下:
current
总发生的合并次数。current_docs
当前正在发生合并的文档数。current_size_in_bytes
当前合并参与的文档总大小,单位字节。total
总发生的合并次数。total_time_in_millis
合并的总耗时(单位毫秒)。total_docs
merge(合并)时总处理的文档个数。total_size_in_bytes
merge(合并)时总处理的文档总大小(字节)。total_stopped_time_in_millis
merge(合并)时总停止时间(吞吐率为0)。total_throttled_time_in_millis
超过指定吞吐率而暂停的时间(节流)。total_auto_throttle_in_bytes
自动进行流控的阔值,默认速率20m/s。
refresh
刷新索引相关的统计。
1 "refresh" : {
2 "total" : 15,
3 "total_time_in_millis" : 0,
4 "listeners" : 0
5 }
其返回字段说明如下:
total
执行刷新的总次数。total_time_in_millis
执行刷新总耗时。listeners
等待刷新侦听器的数量。
flush
刷盘的统计信息。
1"flush" : {
2 "total" : 5,
3 "periodic" : 0,
4 "total_time_in_millis" : 0
5 }
其返回字段说明如下:
total
执行刷盘操作的次数。periodic
当translog超过刷新阈值时周期性触发的刷新次数。total_time_in_millis
刷盘操作总耗时时间。
warmer
索引分片(shard)预热统计信息,分片预热是指为索引创建一个分片节点时,是否对该索引预热(为索引创建一bitSet位图)。其统计示例如下:
1"warmer" : {
2 "current" : 0,
3 "total" : 5,
4 "total_time_in_millis" : 0
5 }
其返回字段说明如下:
current
当前正在预热的个数。total
总共发生的预热次数。total_time_in_millis
分片预热总耗时。
query_cache
查询缓存统计信息,其示例如下:
1"query_cache" : {
2 "memory_size_in_bytes" : 0,
3 "total_count" : 0,
4 "hit_count" : 0,
5 "miss_count" : 0,
6 "cache_size" : 0,
7 "cache_count" : 0,
8 "evictions" : 0
9 }
其返回字段说明如下:
memory_size_in_bytes
查询缓存占用的内存空间,单位为字节。total_count
缓存中查询的总次数,等于hit_count + miss_count。hit_count
查询缓存命中的次数。miss_count
查询缓存未命中的次数。cache_size
当前查询缓存中缓存文档的个数。cache_count
查询缓存总缓存文档个数(包含已经被换出evictions的文档个数)。evictions
查询缓存被逐出的总数。
fielddata
fielddata统计信息,fielddata主要用加快text字段排序与聚合的性能,存储词根与文档的映射关系存储在在内存,在内存中进行排序与聚合。
1"fielddata" : {
2 "memory_size_in_bytes" : 0,
3 "evictions" : 0
4 }
其返回字段说明如下:
memory_size_in_bytes
当前占用内存的大小。evictions
被逐出词根的个数。
completion
completion(自动填充)相关统计,其输出示例为:
1"completion" : {
2 "size_in_bytes" : 0
3 },
其返回字段说明如下:
size_in_bytes
自动提示占用字节数。
segments
检索打开段的内存使用情况。可选地,设置include_segment_file_size=true(默认为false),将输出每个Lucene索引文件的聚合磁盘使用情况,其返回示例如下:
1"segments" : {
2 "count" : 32,
3 "memory_in_bytes" : 38078,
4 "terms_memory_in_bytes" : 23838,
5 "stored_fields_memory_in_bytes" : 9984,
6 "term_vectors_memory_in_bytes" : 0,
7 "norms_memory_in_bytes" : 2048,
8 "points_memory_in_bytes" : 32,
9 "doc_values_memory_in_bytes" : 2176,
10 "index_writer_memory_in_bytes" : 0,
11 "version_map_memory_in_bytes" : 0,
12 "fixed_bit_set_memory_in_bytes" : 0,
13 "max_unsafe_auto_id_timestamp" : -1,
14 "file_sizes" : { }
15 },
其返回字段说明如下:
count
该索引目前拥有的总段数。memory_in_bytes
该索引缓存在内存中字节数。terms_memory_in_bytes
倒排索引(term)缓存在内中所占字节数。stored_fields_memory_in_bytes
该索引定义为stored_fields字段在内存中缓存的字节数。term_vectors_memory_in_bytes
该索引term_vectors(词向量)在内存中所占字节数量。norms_memory_in_bytes
该索引存储对应norms=true的字段当前在内存中缓存字节数。points_memory_in_bytes
与地理位置相关的缓存数据。doc_values_memory_in_bytes
设置为doc_values缓存在内存中的字节数(doc_values,列式存储)。index_writer_memory_in_bytes
用于优化索引写的缓存(减少写磁盘的频率)。version_map_memory_in_bytes
关于文档的版本映射所占内存大小。fixed_bit_set_memory_in_bytes
fixed_bit_set内存,专门用来做nested查询的。max_unsafe_auto_id_timestamp
es内部当前的自增ID。file_sizes
其中如果设置为true,则file_sizes主要包含如下统计信息:
translog
translog统计信息(有点类似于Innodb的redo日志),其输出示例如下:
1"translog" : {
2 "operations" : 0,
3 "size_in_bytes" : 1100,
4 "uncommitted_operations" : 0,
5 "uncommitted_size_in_bytes" : 1100,
6 "earliest_last_modified_age" : 0
7 }
其返回字段说明如下:
operations
写translog的次数(索引文档、更新文档、删除文档的总操作数量)。size_in_bytes
translog实例管理的translog文件总大小。(一个索引引擎(InternalEngine)示例包含一个Translog实例)。uncommitted_operations
当前还未提交到lucene中的操作次数(索引文档、更新文档、删除文档的操作数量)。uncommitted_size_in_bytes
translog中未提交到Lucene中的字节数。earliest_last_modified_age
以秒为单位返回translog文件中最老条目的年龄。
request_cache
请求缓存的统计信息,其输出示例如下:
1"request_cache" : {
2 "memory_size_in_bytes" : 0,
3 "evictions" : 0,
4 "hit_count" : 0,
5 "miss_count" : 0
6},
其返回字段说明如下:
memory_size_in_bytes
请求缓存占用内存总大小。evictions
请求缓存被剔除出次数。hit_count
请求缓存被命中次数。miss_count
请求缓存未命中次数。
recovery
recovery(恢复)相关的统计信息,其输出示例:
1"recovery" : {
2 "current_as_source" : 0,
3 "current_as_target" : 0,
4 "throttle_time_in_millis" : 0
5}
其返回字段说明如下:
current_as_source
作为源分片,正在执行恢复的分片数量 。current_as_target
作为目标分片,正在执行恢复的分片数量。throttle_time_in_millis
恢复过程总等待时间。
Indices Stats返回的结果是在索引级别的聚合,包含三个维度:primaries(所有主节点进行聚合)、total(所有主节点、副本节点进行聚合)、indices(索引级别)。
下面给出在JAVA中使用Index Stats示例来结束本篇的讲解。
ElasticSearch Index Stats JAVA示例如下:(当前elasticsearch6.4.0 High Rest Client未提供对应API的封装)
1public static final void test_Indices_StatsIndex() {
2 TransportClient client = EsClient.getTransportClient();
3 try {
4 IndicesStatsRequest request = new IndicesStatsRequest();
5// request.indices("aggregations_index02");
6// request.indices("logs_write");
7// request.includeSegmentFileSizes(true);
8 ActionFuture<IndicesStatsResponse> responseFuture = client.admin().indices().stats(request);
9 IndicesStatsResponse response = responseFuture.get();
10 System.out.println(response);
11// System.out.println(result);
12 } catch (Throwable e) {
13 e.printStackTrace();
14 } finally {
15 EsClient.close(client);
16 }
17 }
其返回的结果:
1{
2 "_shards" : {
3 "total" : 172,
4 "successful" : 86,
5 "failed" : 0
6 },
7 "_all" : {
8 "primaries" : {
9 "docs" : {
10 "count" : 4166,
11 "deleted" : 0
12 },
13 "store" : {
14 "size_in_bytes" : 929840
15 },
16 // ... 省略部分选项
17 },
18 "total" : {
19 "docs" : {
20 "count" : 4166,
21 "deleted" : 0
22 },
23 "store" : {
24 "size_in_bytes" : 929840
25 },
26 // ... 省略部分选项
27 }
28 },
29 "indices" : {
30 "aggregations_index04" : {
31 "uuid" : "2_6WutahTHa6iK52E7CwZQ",
32 "primaries" : {
33 // ... 省略部分选项
34 },
35 "total" : {
36 // ... 省略部分选项
37 }
38 },
39 "alias_demo" : {
40 "uuid" : "EltFD6Y6TA-lpfntx00naw",
41 "primaries" : {
42
43 },
44 "total" : {
45
46 }
47
48 } // 省略其他索引
49 }
50}
本文详细介绍了Index Stats API的使用,特别在结合源码的基础上给出该API响应结果中各个字段含义的解读,包含docs、store、indexing、get、search、merges、refresh、flush、warmer、query_cache、fielddata、completion、segments、translog、request_cache、recovery。
更多文章请关注微信公众号:
一波广告来袭:本文作者新书《RocketMQ技术内幕》已出版上市。
《RocketMQ技术内幕》已出版上市,目前可在主流购物平台(京东、天猫等)购买,本书从源码角度深度分析了RocketMQ NameServer、消息发送、消息存储、消息消费、消息过滤、主从同步HA、事务消息;在实战篇重点介绍了RocketMQ运维管理界面与当前支持的39个运维命令;并在附录部分罗列了RocketMQ几乎所有的配置参数。本书得到了RocketMQ创始人、阿里巴巴Messaging开源技术负责人、Linux OpenMessaging 主席的高度认可并作序推荐。目前是国内第一本成体系剖析RocketMQ的书籍。