我已设置Curator通过此过滤器删除旧的Elasticsearch索引:
(...)
filters:
- filtertype: pattern
kind: regex
value: '^xyz-us-(prod|preprod)-(.*)-'
exclude:
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 7
exclude:
(...)
但是,我意识到Curator使用非贪婪的正则表达式,因为此过滤器捕获了索引xyz-us-prod-foo-2018.10.11
而不是xyz-us-prod-foo-bar-2018.10.11
。
如何修改过滤器以同时捕获两个索引?
答案 0 :(得分:1)
创建者对Regex引擎的实现使用U(不贪婪)标志。
默认情况下,贪婪的正则表达式会使星号修饰符变得懒惰,并添加“?” “不满意”选项下的修饰符会将其恢复为“贪婪”。
尝试添加“?”在正则表达式中的“。*”之后
'^xyz-us-(prod|preprod)-(.***?**)-'
答案 1 :(得分:1)
我在https://discuss.elastic.co/t/use-greedy-regexes-in-curator-filter/154200给出的答案仍然不错,尽管您无法以某种方式获得我在此处发布的结果。固定结尾并指定正则表达式对我有用的日期:'^xyz-us-(prod|preprod)-.*-\d{4}\.\d{2}\.\d{2}$'
我创建了这些索引:
PUT xyz-us-prod-foo-2018.10.11
PUT xyz-us-prod-foo-bar-2018.10.11
PUT xyz-us-preprod-foo-2018.10.12
PUT xyz-us-preprod-foo-bar-2018.10.12
并运行以下配置:
---
actions:
1:
action: delete_indices
filters:
- filtertype: pattern
kind: regex
value: '^xyz-us-(prod|preprod)-.*-\d{4}\.\d{2}\.\d{2}$'
exclude:
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 7
结果完全匹配:
2018-10-29 20:08:28,120 INFO curator.utils show_dry_run:928 DRY-RUN: delete_indices: xyz-us-preprod-foo-2018.10.12 with arguments: {}
2018-10-29 20:08:28,120 INFO curator.utils show_dry_run:928 DRY-RUN: delete_indices: xyz-us-preprod-foo-bar-2018.10.12 with arguments: {}
2018-10-29 20:08:28,120 INFO curator.utils show_dry_run:928 DRY-RUN: delete_indices: xyz-us-prod-foo-2018.10.11 with arguments: {}
2018-10-29 20:08:28,120 INFO curator.utils show_dry_run:928 DRY-RUN: delete_indices: xyz-us-prod-foo-bar-2018.10.11 with arguments: {}