ilm
简介
index lifecycle management:索引生命周期管理。对于随着时间不停增长的数据,我们经常需要定期归档和清理,如数据库可以对表进行分片,日志可以按照日期,大小进行切换。elk的ilm机制就是用来自动归档,迁移,删除日志的机制。
生命周期
在elk中,数据的生命周期可以有5个,并不是所有的阶段都必须有,可能只有其中几个:
- hot:索引数据会被更新和查询
- warm:索引数据只被查询
- cold:索引数据很少被查询,可以接受查询速度很慢
- frozen:索引数据更少被查询,可以接受更慢的查询速度
- delete:索引数据可以被删除
每个生命周期可以执行的操作不一样:
- 设置索引优先级:优先级高的索引在系统重启之后先恢复,比如hot阶段一般设置的优先级比其他阶段高
- 索引切换:主要是作用于data_stream和alias,当后端索引满足一定条件后(如大小达到多少,文档数量达到多少,索引生命长度),创建新的索引,写数据都写到新的索引,有点像数据库的表分片。
- 迁移索引到特定节点,如果索引不再被频繁访问了,可以将数据迁移到配置差一些的节点
- 设置索引只读
- 减少索引分片数量
等等
测试
ilm主要是用于data_stream的后端索引的自动管理,这里结合data_stream测试ilm的功能,关于data_stream可以查看我的博文data stream
#先调整集群配置,将状态检测配置为3s(默认10min),方便测试
#如果不调整,当生命周期切换条件达到的时候,对应的actions并不会立即执行
put _cluster/settings
{
"persistent":{
"indices.lifecycle.poll_interval": "3s"
}
}
#创建ilm
put /_ilm/policy/ilm_dsqtest_10c_1min
{
"policy":{
"phases":{
"hot":{
"actions":{
"rollover":{
"max_primary_shard_docs": 10
}
}
},
"delete":{
"min_age":"1m",
"actions":{
"delete":{}
}
}
}
}
}
#上面这个ilm有hot,delete两个阶段
#当文档数量等于10,会触发rollover,也就是创建新的index,然后写data stream的数据是写到新创建的索引
#索引进入delete阶段1分钟后删除索引
#创建component_template,与上面创建的ilm绑定
PUT _component_template/ct_ilm_dsqtest_10c_1min
{
"template":{
"settings":{
"index.lifecycle.name": "ilm_dsqtest_10c_1min"
}
},
"_meta":{
"description":"rollover when 10 c or 1 min"
}
}
#创建index template
put _index_template/it_dsqtestx
{
"index_patterns":["dsqtestx*"],
"data_stream":{},
"composed_of":["ct_ilm_dsqtest_10c_1min"],
"priority": 200,
"_meta":{
"description":"template for dsqtestx*"
}
}
#data_stream字段说明该模板用于data stream,而不是普通的index
#如果用户创建的普通索引名称与正则dsqtestx*匹配上了,就会报错;也就是当名称与dsqtestx*匹配的时候,只能是创建data stream。
#当一个data_stream名称与多个索引模板的index_patterns匹配,那就用模板的priority值去判断选择哪个模板,值越大,优先级越高
#创建data stream
#data stream会按照固定的模式创建新的索引,如.dx_{dsname}-{day}-{xxxxx}
put _data_stream/dsqtestx_app1
#查看创建的data stream信息
get dsqtestx_app1
#插入数据,kibana dev tools的可以ctrl+回车执行当前光标所在语句
#或者使用reindex从其他index导入数据
post dsqtestx_app1/_doc
{
"@timestamp":"0",
"name":"dsq"
}
#插入10条数据后查看data stream信息
get dsqtestx_app1
#可以看到有两个索引了,说明触发了ilm的rollover
".ds-dsqtestx_app1-2023.08.18-000001"
".ds-dsqtestx_app1-2023.08.18-000002"
#等待一分钟后再次查询只剩下索引".ds-dsqtestx_app1-2023.08.18-000002"了,说明触发了ilm的delete
#如果没有正常触发ilm,可以排查一下
get dsqtestx_app1/_ilm/explain
总结
这里主要是简单测试ilm的功能,实际应用中还要给不同配置服务器设置不同角色,然后设置数据的迁移策略。

浙公网安备 33010602011771号