如何定义ISM/ILM策略,确保仅在全部条件满足时执行Rollover动作?
解决ISM策略中Rollover动作需满足全部条件才触发的配置方法
问题原因
你当前配置的rollover动作中,min_index_age和min_doc_count是逻辑或的关系——只要满足其中一个条件,Rollover就会执行,这就是为什么文档数为0但索引年龄达标后仍触发了操作。
正确配置方案
要实现所有条件同时满足才触发Rollover,需要把条件从rollover动作参数中移出,放到状态的transitions(状态过渡)里,通过状态流转来控制动作执行:
{ "policy": { "description": "Rollover only when both conditions are met", "default_state": "wait", "states": [ { "name": "wait", "actions": [], "transitions": [ { "state": "rollover", "conditions": { "min_index_age": "1h", "min_doc_count": 1 } } ] }, { "name": "rollover", "actions": [ { "rollover": {} } ], "transitions": [] } ], "ism_template": { "index_patterns": ["log*"], "priority": 100 } } }
配置说明
- 新增
wait状态作为默认状态,该状态下不执行任何动作,仅等待条件满足 - 在
wait状态的transitions中定义必须同时满足的两个条件:min_index_age和min_doc_count,只有两者都达标时,才会过渡到rollover状态 rollover状态内的动作不再附带条件参数,只要进入该状态就执行Rollover操作
验证方法
配置完成后,可执行以下命令查看策略执行情况:
GET /_opendistro/_ism/explain/log-000001?pretty
只有当索引年龄≥1小时且文档数≥1时,才会触发Rollover动作。
内容的提问来源于stack exchange,提问作者hitesh kaushik
相关产品推荐
相关产品推荐

