elasticsearch7.8索引生命周期报错:index.lifecycle.rollover_alias does not point to index
1. 问题描述目的:这个es主要是做日志收集用的,每天的日志生成一个索引,类似于ops-sysinfo-2020.10.23这种,然后用es的索引生命周期功能自动删除30天前的日志,实现滚动删除功能(不想用脚本),这个用法我在es6.8上已经实现过一次。结果在es7.8上配置好之后,出现了下面的错误:错误1:illegal_argument_exception: index.lifecycle.r
1. 问题描述
目的:这个es主要是做日志收集用的,每天的日志生成一个索引,类似于
ops-sysinfo-2020.10.23这种,然后用es的索引生命周期功能自动删除30天前的日志,实现滚动删除功能(不想用脚本),这个用法我在es6.8上已经实现过一次。
结果在es7.8上配置好之后,出现了下面的错误:
错误1:
illegal_argument_exception: index.lifecycle.rollover_alias [logs] does not point to index [logs-sysinfo-2020.10.19]
错误2:
illegal_argument_exception: rollover target [logs] does not point to a write index
错误3:
illegal_argument_exception: setting [index.lifecycle.rollover_alias] for index [logs-sysinfo-2020.10.19] is empty or not defined
主要是上面三个错误,刚开始只有第一个错误,后面两个是在我调试过程中遇到的。
先看看我之前的配置:
索引生命周期:
索引模板:
PUT _template/logs_template
{
"index_patterns": ["logs-*"], # 匹配所有以logs开头的索引
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "delete-30day", # 绑定生命周期策略
"index.lifecycle.rollover_alias": "logs" # 别名
}
}
2. 问题解决与正确的配置
使用下面的配置可以解决我的问题,且没有报错的情况
- 关闭滚动更新,因为滚动更新设置比较复杂,跟我的需求关系不大,而且上面的错误也是因为这个设置不正确引起的。
- 设置删除,30天后自动删除
- 重新绑定索引模板
重新绑定索引模板
覆盖就行了,覆盖之后就是重新更新。
然后原来的索引生命周期策略都需要重新配置(这个比较麻烦)
配置完之后,正常情况如下:
3. 问题说明
在解决这个问题的过程中,遇到很多问题。主要是没考虑清楚生命周期策略里面的一些配置细节。
生命周期策略中的滚动更新是需要对索引设置别名的,而且每个索引设置的别名不能一样。但我设置的是每天更新索引,索引是按天区分的,给每个索引设置别名的方式很明显不适合我,没办法自动设置索引,最多使用脚本定时去执行,这样增加了复杂度,必要性不强,真做到这一步,我还不如写脚本定时删除,不用生命周期策略了。
我们看一下一些beats生成的索引是什么样的:
索引别名:
别名设置方式(在kibana控制台的调试工具中操作):
POST /_aliases
{
"actions": [
{
"add": {
"index": "ops-sysinfo-2020.10.23-00001",
"alias": "sysinfo", # 索引别名
"is_write_index": true # 这个参数必须有,没有会报错
}
}
]
}
参考:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/set-up-lifecycle-policy.html
注意:索引名称要设置成*-00001这种的,这样自动更新的时候,下一个就是*-00002,否则也会报错(参考beats的配置)
这些beats的索引,不是按天生成的,只有一个索引,启动了滚动更新功能(滚动更新创建的新索引将添加到索引别名,并被指定为写索引。)当现在的这个索引大于50千兆,即50g或者超过30天之后,索引将会更新,索引别名将会指向新生成的索引,旧的索引使用频率(读、写)会逐渐降低。
现在来看,滚动更新并不能解决我的问题,或者说我的按日期进行配置的索引已经进行了滚动,不需要通过生命周期策略进行滚动,这个策略并不能解决我的问题,还引发了新的问题,还不如把它去掉。
滚动更新更适合对于同一索引(不是按日期的),数据量非常大,且越新的数据调用越频繁,旧数据调用没那么频繁的场景。
至于如何正确设置滚动更新,关键是设置好更新策略和别名,具体的请参考官方文档。
参考:
https://www.cnblogs.com/mikelaowang/p/13345318.html
https://www.jianshu.com/p/358fde8d8e27
https://zhuanlan.zhihu.com/p/266030572?utm_source=wechat_timeline
https://www.elastic.co/guide/en/elasticsearch/reference/7.8/indices-rollover-index.html
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)