上一篇文章写,分片到了限制,那么为什么会到限制大小呢?
我再创建索引模式的时候,是将对应的索引模式与kibana中对应的30-days-default的索引生命周期策略进行了绑定的,应该会在30天之后,删除旧的索引。
既然到了分片限制,那就要查看一下索引的情况了
发现索引出现了生命周期错误,这里的错误详情如下
java.lang.IllegalArgumentException: setting [index.lifecycle.rollover_alias] for index [gant-bom-app-2024.06.18] is empty or not defined
at org.elasticsearch.xpack.core.ilm.WaitForRolloverReadyStep.evaluateCondition(WaitForRolloverReadyStep.java:89)
at org.elasticsearch.xpack.ilm.IndexLifecycleRunner.runPeriodicStep(IndexLifecycleRunner.java:226)
at org.elasticsearch.xpack.ilm.IndexLifecycleService.triggerPolicies(IndexLifecycleService.java:418)
at org.elasticsearch.xpack.ilm.IndexLifecycleService.triggered(IndexLifecycleService.java:349)
at org.elasticsearch.xpack.core.scheduler.SchedulerEngine.notifyListeners(SchedulerEngine.java:186)
at org.elasticsearch.xpack.core.scheduler.SchedulerEngine$ActiveSchedule.run(SchedulerEngine.java:220)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
原因:之前的索引生命周期在hot 阶段 启用了滚动更新,必须设置别名才行
解决方案:
- 关闭滚动更新(这个是干啥用的?开启后可以设置索引超过多少g,或超过多少天,自动新创建一个索引,我的系统是每天创建一个索引,所以用不到这个)
- 把原来已经应用策略的索引,先删除策略,再重新添加上策略,否则老索引还是无法正常自动删除
重新添加完索引之后,现在变为delete状态了
注意,调整新的索引生命周期之后,如果选择覆盖之前的生命周期,之前旧的索引也无法删掉,必须删掉关联的生命周期策略,然后重新关联生命周期策略,kibana里面不支持批量关联