索引生命周期管理策略是一组规则的总称,它需要应用到某个索引上或者某个模板上
生命周期把索引分为四个阶段,Hot,Warm,Cold,和 Delete,策略不需要为索引配置每个阶段,只有 hot 是必须的。
例如,一个策略可能只定义热阶段和删除阶段,而另一个策略可能定义所有四个阶段。
hot 索引可写入,也可查询,也就是我们通常说的热数据。
warm 索引通常不会被写入,但仍然会被查询。
cold 索引不再被更新,并且很少被查询。这些信息仍然需要可搜索,但如果查询速度较慢也没关系。
delete 索引不再需要,可以安全地删除。
使用ILM
1、制定Lifecycle 策略
可以在 Kibana 上操作,依次点击 Management -> index_lifecycle_management -> Create policy,输入配置参数后,点击Save可以生成一个新的策略。
点击 Show request 可以得到 ES 语句,如下
PUT _ilm/policy/ELK
{
"policy": {
"phases": {
"hot": {
"min_age": "0ms",
"actions": {
"rollover": {
"max_age": "30s",
"max_size": "50gb",
"max_docs": 3
},
"set_priority": {
"priority": 100
}
}
},
"warm": {
"actions": {
"shrink": {
"number_of_shards": 1
},
"set_priority": {
"priority": 50
}
}
},
"delete": {
"min_age": "1m",
"actions": {
"delete": {
"delete_searchable_snapshot": true
}
}
}
}
}
}
2、设置索引模板
PUT _template/dc_index_template
{
"index_patterns": ["dc_index-*"],
"settings": {
# 使用的策略
"index.lifecycle.name": "ELK",
# 滚动别名
"index.lifecycle.rollover_alias": "my_alias"
}
}
3、设置 Lifecycle 默认是10分钟,检查索引是否符合策略标准,并执行所需的任何步骤,为了方便测试,设置检查时间为5s,每5s检查执行一次策略。
PUT _cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval": "5s"
}
}
4、给索引设置一个别名,Rollover功能是结合索引别名来实现的。
Rollover参数有一定的格式要求,timeseries-XXXXX1格式是必须的格式,这里的别名必须与上面模板定义的别名一致
PUT dc_index-0000001
{
"aliases": {
"my_alias":{
"is_write_index": true
}
}
}
5、写入几条数据测试
POST _bulk
{ "index" : { "_index" : "my_alias", "_id" : "1" } }
{"language": "Python"}
{ "index" : { "_index" : "my_alias", "_id" : "2" } }
{"language": "Go"}
{ "index" : { "_index" : "my_alias", "_id" : "3" } }
{"language": "C++"}
{ "index" : { "_index" : "my_alias", "_id" : "4" } }
{"language": "Java"}
POST _bulk
{ "index" : { "_index" : "my_alias", "_id" : "5" } }
{"language": "Python"}
{ "index" : { "_index" : "my_alias", "_id" : "6" } }
{"language": "Go"}
{ "index" : { "_index" : "my_alias", "_id" : "7" } }
{"language": "C++"}