elasticsearch7.8索引生命周期报错:index.lifecycle.rollover_alias does not point to index

5 篇文章 0 订阅

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. 问题解决与正确的配置

使用下面的配置可以解决我的问题,且没有报错的情况

  1. 关闭滚动更新,因为滚动更新设置比较复杂,跟我的需求关系不大,而且上面的错误也是因为这个设置不正确引起的。
  2. 设置删除,30天后自动删除
  3. 重新绑定索引模板
    在这里插入图片描述
    重新绑定索引模板
    在这里插入图片描述
    覆盖就行了,覆盖之后就是重新更新。
    在这里插入图片描述
    然后原来的索引生命周期策略都需要重新配置(这个比较麻烦)
    配置完之后,正常情况如下:
    在这里插入图片描述

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

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值