一、背景
在使用ELK进行日志收集分析时,我们经常会将每天的日志生成一个索引,类似somta-log-2021-02-25,在以前的版本是需要我们写脚本或者服务来删除不想要的索引的,但是在新的ES里面已经帮我们实现了,我们可以通过创建一个索引生命周期策略来将我们的索引进行合并,删除等操作,是非常方便的
但是在ES 7.7.1上配置了一个生命周期索引,确出现了如下错误
错误1:
illegal_argument_exception: index.lifecycle.rollover_alias [somta-logs] does not point to index [somta-log-2021.02.23]
错误2:
illegal_argument_exception: rollover target [somta-logs] does not point to a write index
错误3:
illegal_argument_exception: setting [index.lifecycle.rollover_alias] for index [somta-log-2021.02.23] is empty or not defined
二、问题原因
先来看看我报错时,我的详细设置
1、索引模板
PUT _template/logs_template
{
"index_patterns": ["somta-log-*"], # 匹配所有以logs开头的索引
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "log-30-days", # 绑定生命周期策略
"index.lifecycle.rollover_alias": "somta-log" # 别名
}
}
2、生命周期索引
其实出现该问题的主要原因是“启用滚动更新”造成的,因为索引生命周期策略中滚动更新时需要对索引设置别名的,并且每个索引别名要不一样,但是我们是按天分割索引的,有没办法自动设置索引,所以这种方式明显不适合,启用滚动更新的索引格式一般为 apm-7.7.1-profile-000027
三、解决办法
我只需要禁用“启用滚动更新”即可,然后将修改后的索引生命周期策略重新添加到索引模板上即可
注意:
1.使用新的索引模板进行测试的时候,需要新建一个模板对应的索引,否则在此处的下拉框中将不会出现该索引模板
2.如果原索引模板中已经存在索引生命周期策略,覆盖后新生成的索引会使用新覆盖的策略,但是已经存在的索引仍然是就策略,不会触发删除,需要手动删除