暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ES生命周期管理

IT那活儿 2021-11-16
1583

点击上方“IT那活儿”,关注后了解更多精彩内容!!!

ES生命周期管理简介


索引生命周期管理功能是elasticsearch 在 6.7.0 引入的。此功能主要是用于管理时间序列数据的索引。
对于时间序列的索引,生命周期有4个阶段:
阶段1. hot: 索引被频繁写入和查询
阶段2. warm: 索引不再写入,但是仍在查询
阶段3. cold: 索引很久不被更新,同时很少被查询。但现在考虑删除数据还为时过早,仍然有需要这些数据的可能,但是可以接受较慢的查询响应。
阶段4. delete: 索引不再需要,可以删除。
一个index将在热的阶段开始,然后是温,冷,最后是删除阶段,生命周期策略控制索引如何在这些阶段中转换以及在每个阶段对索引执行的操作。

生命周期策略


1. 下面是一个创建生命周期的例子,策略不一定需要为索引配置每个阶段:
PUT _ilm/policy/test_policy{"policy": {"phases": {"hot": {"actions": {"rollover":{"max_docs":1},"set_priority": {"priority": 100}}},"delete": {"min_age": "30s","actions": {"delete": {}}}}}}
2. 时间参数
索引根据时间参数min_age进入生命周期阶段,若未设置,默认是0ms。min_age通常是从创建索引的时间开始计算,如果索引被设置为滚动索引,那么min_age是从索引滚动开始计算。注意,在检查min_age参数并进入下一个阶段前,当前阶段的操作必须完成。
3action

4. 优先级设置
这个action等同于设置索引属性index.priority的值。具有较高优先级的索引将在节点重启后优先恢复。通常,热阶段的指数应具有最高值,而冷阶段的指数应具有最低值。未设置此值的指标的隐含默认优先级为1。索引的优先级。必须为0或更大。也可以设置为null以删除优先级。
5. 使用滚动索引有几个注意事项:
索引命名必须 *-\\d+$
索引必须设置index.lifecycle.rollover_alias为滚动的别名。索引还必须是别名的写入索引。
6. 更新策略
如果没有index应用这份策略,那么我们可以直接更新该策略。
如果有index应用了这份策略,那么当前正在执行的阶段不会同步修改,当当前阶段结束后,会进入新版本策略的下个阶段。
如果更换了策略,当前正在执行的阶段不会变化,在结束当前阶段后,将会由新的策略管理下一个生命周期。
7. 策略错误处理
  • 当在生命周期策略处理中出现异常时,会进入错误阶段,停止策略的执行。


GET /myindex/_ilm/explain


  • 使用上述API可以看到异常的原因,当解决这个问题,并更新策略后,可以通过下面的API进行重试:


POST /myindex/_ilm/retry
8. ilm的启用禁用
  • ilm的状态查看:


GET _ilm/status


  • 开启和关闭:

POST _ilm/startPOST _ilm/stop



实验环境




实验步骤


1. 创建生命周期策略
curl -H 'Content-Type: application/json' -XPUT -u elastic:qwer123 -s http://@192.168.43.139:9200/_ilm/policy/test_policy -d'{"policy": {"phases": {"hot": {"actions": {"rollover":{"max_docs":1,"max_age": "90s"},"set_priority": {"priority": 100}}},"delete": {"min_age": "180s","actions": {"delete": {}}}}}}'
  • 查看生命周期策略:

curl -XGET -u elastic:qwer123 -shttp://@192.168.43.139:9200/_ilm/policy/test_policy?pretty
2. 创建索引模板
curl -H 'Content-Type: application/json' -XPUT -u elastic:qwer123 -s http://@192.168.43.139:9200/_template/datastream_template -d'{"index_patterns": ["test-*"],"settings": {"number_of_shards": 1,"number_of_replicas": 1,"index.lifecycle.name": "test_policy","index.lifecycle.rollover_alias": "test-alias"}}'
  • 查看创建的索引模板

curl -XGET -u elastic:qwer123 -s http://@192.168.43.139:9200/_template/test_template?pretty

3. 配置生命周期策略检测时间
curl -H 'Content-Type: application/json' -XPUT -u elastic:qwer123 -s http://@192.168.43.139:9200/_cluster/settings -d'{"transient": {"indices.lifecycle.poll_interval": "10s"}}'
默认监测为十分钟,便于测试,改为10s。
4. 创建索引
curl -H 'Content-Type: application/json' -XPUT -u elastic:qwer123 -s http://@192.168.43.139:9200/test-000001 -d'{"aliases": {"test-alias": {"is_write_index": true}}}'
5. 向索引中插入一条数据
curl -H 'Content-Type: application/json' -XPOST -u elastic:qwer123 -s http://@192.168.43.139:9200/test-alias/_doc -d'{"message":"hello world"}'
6. 查询索引滚动进度
curl -XGET -u elastic:qwer123 -s http://@192.168.43.139:9200/test-*/_ilm/explain?pretty


引自动创建了一个新的"test-0000063",旧的索引”test-000061”,”test-0000062” action变成DELETE。

7. 过180s再次查看索引
curl -XGET -u elastic:qwer123 -s http://@192.168.43.139:9200/test-*/_ilm/explain?pretty
旧的索引”test-000061”已被删除,索引"test-000063"到达最大时间继续往后滚动。
在做日志查询时,我们只需要使用别名”test-alias”进行日志查询即可,es便可无感知完成日志存储删除动作。
END

更多精彩干货分享

点击下方名片关注

IT那活儿

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论