网站建设的目标客户分析,wordpress抽奖主题,拱墅区建设局网站,金华公司建站模板基于如何 定时删除ES索引过期数据 而引发的一系列关于ES索引生命周期管理ILM(Index Lifecycle Management)的学习
快速上手 #xff1a;定时删除ES索引中的过期数据
1. ILM解决什么问题#xff1f;
ES从6.7版本引入ILM#xff0c;通过ILM可以解决哪些问题呢?
自动新建…基于如何 定时删除ES索引过期数据 而引发的一系列关于ES索引生命周期管理ILM(Index Lifecycle Management)的学习
快速上手 定时删除ES索引中的过期数据
1. ILM解决什么问题
ES从6.7版本引入ILM通过ILM可以解决哪些问题呢?
自动新建索引当索引大小达到阈值时自动创建新索引过期数据清理索引每天新增的数据过大需要定时删除旧的索引数据。索引数据备份一些旧的数据不需要再进行修改和查询但是需要保留一定的时长降低资源消耗一些需要查询但是极低频的数据可以存放在性能差一点的机器上 …
2. ILM是如何运作的?
通过配置生命周期策略将其关联到索引上通过索引别名往索引中写入数据当索引触发生命周期策略时自动创建新的索引或自动推进索引阶段。
2.1 索引滚动创建 数据通过索引别名写入不直接使用索引名称写入数据通过配置索引策略来触发索引滚动生成新的索引生成新索引后别名自动指向新的索引。触发索引rollover有三种方式索引大小达到阈值索引存在时间达到设定时间文档数达到设定值
2.2 索引从生到死
索引生命周期策略针对单个索引把索引分为几个阶段Hot、Warm、Cold、Delete可以通过生命周期策略的配置来决定索引在什么时间或什么条件下进入下一阶段只有Hot阶段是必须的。 可以根据不同的使用场景来配置不同的生命周期策略 如果只需要进行自动创建新的索引(避免单个索引数据量过大不方便迁移或数据维护)可以只配置Hot策略 如果需要自动删除旧的索引可以再配置一个Delete策略 如果需要隔离读和写可以配置一个Warm策略 如果需要备份数据或减低资源消耗可以配置一个Cold策略
2.3 生命周期策略配置
创建一个索引生命周期策略
PUT _ilm/policy/demo_policy
{policy: {phases: {hot: {actions: {rollover: {max_size: 15gb,max_age: 7d,max_docs : 10000000}}},delete: {min_age: 7d,actions: {delete: {}}}}}
}以上是一个简单的索引生命周期策略的配置 当索引大小达到15G或者索引创建时长达到7天或者文档数量达到1千万时建立新的索引 创建新的索引后旧的索引7天后自动删除
3. 索引生命周期策略
在上文中简单说明了ILM原理也有简单的demo实战我们进行深入学习。
3.1 索引与生命周期策略之间的一些关系 在数据写入时通过别名logs写入别名指向最新的索引在数据查询时通过pattern logs*进行查询从多个索引中查询数据当索引处理Delete阶段时将查询不到索引中的数据索引自动创建时命名会以logs开头自动匹配索引模板log-template索引模板中设置了索引的生命周期策略demo-policy以及索引滚动时关联的别名
3.2 索引生命周期各阶段的action
在索引不同阶段可以配置不同的action策略下图是各阶段的关键action Action含义 各阶段可执行的action
4. 定时删除ES索引中的过期数据
定时删除索引中旧数据比如删除7天或30天之前的数据
基于ILM来清理旧数据并不是直接处理指定索引不是针对一个固定的索引去删除指定时间范围之前的数据而是通过设置ILM策略生成新的索引再把旧的索引直接删除可以设置旧索引的保留天数。
类似于日志框架的滚动日志生成对于旧的日志文件可以进行删除而不是去清理一个日志文件中旧的日志数据。
demo流程
配置一个索引生命周期策略 - 将策略关联到索引 - 触发策略生成新索引 - 等待策略自动删除旧索引 4.1 API方式实现
4.1.1 创建生命周期策略
PUT _ilm/policy/demo_policy
{policy: {phases: {hot: {actions: {rollover: {max_size: 15gb,max_age: 7d,max_docs : 10000000}}},delete: {min_age: 7d,actions: {delete: {}}}}}
}其中
索引生命周期一共有四个阶段hot、delete是其中的两个阶段我们这里验证下过期删除只要配置hot跟delete就可以了。rollover表示生成新索引的触发条件满足其中一条就会触发策略自动生成新的索引 max_size:1mb 表示索引大小达到1M时触发 max_age:5m 表示索引建立时长到达5分钟时触发 max_docs:10 表示文档数量达到10个时触发delete阶段中min_age:5m 表示旧索引保留5分钟后删除
4.1.2 创建索引模板关联策略
PUT _index_template/test_policy_template
{index_patterns: [test_policy*],template: {settings: {number_of_shards: 1,number_of_replicas: 0,index.lifecycle.name: demo_policy,index.lifecycle.rollover_alias: policy_index_alias}}
}其中
index_patterns表示test_policy开头的所有索引都会自动使用该模板通过设置索引模板创建相应的索引时会自动带上模板中的一些索引设置比如给索引设置生命周期策略设置rollover别名等等单机部署时 number_of_replicas需要设置为0否则索引健康状态为yellow不会自动推进索引的阶段index.lifecycle.name 是上述创建的生命周期策略的名称index.lifecycle.rollover_alias 是索引生命周期关联的索引别名往索引中写入数据时需要通过别名写入当触发生命生成新的索引时该索引别名会指向新的索引通过别名写入时数据就会写入到新的索引中
4.1.3 创建索引并验证
创建索引
PUT /test_policy-1
{aliases: {policy_index_alias: {is_write_index: true}}
}创建索引需要以数字结尾创建索引时需要指定索引别名与rollover_alias别名相同以test_policy开头命名会自动匹配到test_policy_template索引模板基于该索引模板创建索引
触发索引生命周期策略
配置的三种方式均可触发我们选其中的文档数触发 通过别名往索引中写入11条数据执行下述测试数据11次
POST policy_index_alias/_doc
{message: logged the request,timestamp: 1633677855467
}验证
查询是否创建新的索引是否自动删除索引
GET /_cat/indices/test_policy*修改生命周期策略检查间隔 ES默认每10分钟检查一次索引是否满足策略如果满足将支持对应的action 我们修改时间间隔为20s
PUT _cluster/settings
{transient: {indices.lifecycle.poll_interval: 20s }
}查询索引生命周期状态 step: check-rollover-ready 此时还未触发索引rollover
GET /test_policy-1/_ilm/explain{indices : {test_policy-1 : {index : test_policy-1,managed : true,policy : demo_policy,lifecycle_date_millis : 1727787555665,age : 58.08s,phase : hot,phase_time_millis : 1727787578241,action : rollover,action_time_millis : 1727787578241,step : check-rollover-ready,step_time_millis : 1727787578241,phase_execution : {policy : demo_policy,phase_definition : {min_age : 0ms,actions : {rollover : {max_size : 1mb,max_age : 5m,max_docs : 10}}},version : 1,modified_date_in_millis : 1727785358650}}}
}
后续可以持续观察达到设定的时间后便会自动生成新的索引旧的索引达到设定时间后会自动删除
4.2 通过Kibana设置实现
4.2.1 配置生命周期策略
Management - Stack Management - Index Lifecycle Policies - Create policy
4.2.2 创建索引模板 我们在初始化的时候再设置别名否则会出现报错
创建索引并验证(流程同API方式4.1.3) 可以看到生命周期阶段信息
5. 相关API汇总
1. 创建生命周期策略
PUT _ilm/policy/demo_policy
{policy: {phases: {hot: {actions: {rollover: {max_size: 15gb,max_age: 7d,max_docs : 10000000}}},warm : {min_age : 2d,actions : {shrink : {number_of_shards : 1},forcemerge : {max_num_segments : 1}}},delete: {min_age: 7d,actions: {delete: {}}}}}
}2. 创建索引模板
PUT _index_template/test_policy_template
{index_patterns: [test_policy*],template: {settings: {number_of_shards: 1,number_of_replicas: 0,index.lifecycle.name: demo_policy,index.lifecycle.rollover_alias: policy_index_alias}}
}3. 初始化索引
PUT /test_policy-1
{aliases: {policy_index_alias: {is_write_index: true}}
}4. 设置生命周期策略检查间隔
PUT _cluster/settings
{transient: {indices.lifecycle.poll_interval: 20s }
}5. 查看索引生命周期状态
GET /test_policy-1/_ilm/explain6. 生命周期策略重试
POST /log-2024.09.28-000030/_ilm/retry