介绍

当数据量特别大的时候,我们希望ES能够根据设定的阈值自动创建索引,并将过期的索引删除。

生命周期的大致阶段:HOT>WARM>COLD>DELETE,主要区别在于:

  • HOT 可写 查询快 频繁查询
  • WARM 可写 查询快,少写入
  • COLD 不可写 查询慢
  • DELETE 删除

如何实现?

  1. 自定义生命周期策略
  2. 定义索引模板,创建时将周期策略加进来
  3. 写入数据

非滚动更新实现步骤

以下例子为非滚动配置的索引,索引为每天以日期创建的索引。

1,定义生命周期策略

创建一个策略命名为“默认”。配置温阶段2天。45天后删除索引。

image-20241019194114740

热阶段无需配置不设置滚动更新,接下来配置文阶段设置为2天。编辑删除设置45天。

image-20241019194330314

2,定义索引模板

image-20241019193241441

image-20241019193353605

组件模板不用设置,索引设置这里可配置策略,分片等配置。

{
"index": {
"lifecycle": {
"name": "默认" //指定了要应用于该索引的生命周期管理策略的名称
},
"refresh_interval": "10s", //每10秒会自动刷新索引,使得新数据在搜索中可见
"number_of_shards": "4", //索引将由4个主分片组成。增加分片数量可能会提高并发大规模数据处理的能力,但也会增加管理复杂性。
"number_of_replicas": "1" //每个主分片将有 1 个副本。这意味着数据会在该分片的主分片和副本分片之间复制,以增加数据的可靠性和读取性能。
}
}

做以上简单配置就可以完成模板创建。

3,写入数据(Python为例)

image-20241019195214305

上图配置了索引分片,周期策略。

索引命名为channelinfo-log-日期,匹配到了第二步创建的索引模板channelinfo。

那么,以哪个为准创建索引呢?

image-20241019195800698

当创建索引的时候配置了索引策略和分片等配置,以在索引上的配置为主。

当不设置索引,不指定body=create_index_body对象的时候会默认使用模板的配置。

如图,不设置策略,默认使用了模板中的策略。

总结:

1,如果定义的索引符合某个模板的格式,会默认使用这个模板并使用这个模板的配置策略。

2,如果自己定义了索引的配置则使用自己配置的,未配置项还是使用匹配上的模板的配置,索引配置优先级大于模板。

image-20241019200252080

image-20241019200359501

滚动更新实现步骤

和非滚动的主要区别是:

1,生命周期策略打开滚动更新。

2,对索引命名有要求,符合test-log-xxxx的命名规则。

3,脚本中不用每天创建索引,只使用一个符合格式的索引即可。如test-log-000001

1,定义生命周期策略

打开滚动更新。

image-20241021121316012

2,定义索引模板

配置模板和非滚动更新模板的配置都是一样。

3,写入数据(Python为例)