前言
前面很多文章都是介绍采用数据流结合索引生命周期管理ILM机制管理索引数据,确实非常方便。
但是采用数据流有个很大的弊端是不能直接向数据流发起更新和删除请求,需要采用update_by_query或delete_by_query的API方式进行更新和删除请求,或者直接向数据流中的后备索引发起更新和删除请求。
那么,我们能否不借助数据流,直接管理索引的生命周期呢?
答案是肯定的。我们可以使用索引别名来管理包含时间序列数据的索引,并定期转移到新的索引。
一、具体步骤
为了使用索引别名实现自动滚动和时序数据的生命周期管理,需要这么做:
官方文档:Manage time series data without data streamsedit
二、创建生命周期策略
说明:该步骤主要是声明索引各生命周期的生存时长和行为,和之前使用数据流时没有区别。
PUT _ilm/policy/timeseries_policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_primary_shard_size": "50GB", "max_age": "30d" } } }, "delete": { "min_age": "90d", "actions": { "delete": {} } } } } }
三、创建索引模板
PUT _index_template/timeseries_template { "index_patterns": ["timeseries-*"], "template": { "settings": { "number_of_shards": 1, "number_of_replicas": 1, "index.lifecycle.name": "timeseries_policy", "index.lifecycle.rollover_alias": "timeseries" } } }
说明:
相比数据流时的索引模板定义,少了data_stream属性,多了滚动索引别名index.lifecycle.rollover_alias的属性。
四、使用写索引别名初始化时序索引
要启动工作,需要引导初始索引并将其指定为索引模板中指定的翻转别名的写索引。此索引的名称必须与模板的索引模式匹配,并以数字结尾。在滚动时,该值将递增,以生成新索引的名称。
PUT timeseries-000001 { "aliases": { "timeseries": { "is_write_index": true } } }
说明:
创建索引timeseries-000001,由于索引名称与索引模板timeseries_template中的索引模式index_patterns相匹配,
所以索引模板timeseries_template中的属性运用到索引timeseries-000001上。
声明索引别名为timeseries,需要和索引模板中index.lifecycle.rollover_alias的值保持一致。
通过is_write_index=true声明该索引别名可以执行写操作。
五、检查索引的生命周期
GET timeseries-*/_ilm/explain
总结
本文主要介绍如何采用索引别名来管理时序数据的生命周期。