「Curator」- 删除五天前日志索引 @20210402
问题描述
日志集群:Elasticsearch 7.6.3 我们需要自动删除在日志集群中五天前的日志。
我们的日志以天为单位存储在不同的索引中,的以天日志索引格式为 logstash-YYYY.MM.DD
解决方法
使用 Curator 工具
第一步、创建配置文件
该配置文件用于指定集群的连接信息,config.yaml:
--- client: hosts: - 10.10.50.229 - 10.10.50.230 - 10.10.50.231 port: 9200 url_prefix: http_auth: timeout: 300 master_only: False logging: loglevel: INFO logfile: logformat: default blacklist: ['elasticsearch', 'urllib3']
第二步、创建动作文件
该配置文件用于指定要执行的动作,action.yaml
--- actions: 1: description: "删除五天前的索引" action: delete_indices options: ignore_empty_list: True timeout_override: 300 continue_if_exception: False disable_action: False filters: - filtertype: pattern kind: timestring value: 'logstash-%Y.%m.%d' - filtertype: age source: name direction: older timestring: '%Y.%m.%d' unit: days unit_count: 5
第三步、测试
使用 --dry-run 测试,根据日志输出进行调整:
curator --config /path/to/config.yaml --dry-run action.yaml
然后去掉 --dry-run 选项执行,并检查索引是否被删除:
curator --config /path/to/config.yaml action.yaml
第四步、添加定时任务
附加说明
时间选择的问题
时间选择是个复杂的问题,该方案不适用与删除 30 天前的日志,甚至删除一周前的日志都可能存在问题,参考以下文档对时间选择的描述:
1)Curator Reference [5.8] » Filters » age
2)Curator Reference [5.8] » Filters » period
比如说,在 filtertype: age 中,月份是按照 30 天计算的,但是实际的月份会有 28 29 30 31 天,这就导致会出现偏差。在涉及多个月份或者索引命名使用周数(索引名包含周信息)的情况下,可以使用 filter: period 过滤。
参考文献
Curator Reference [5.8] » Configuration » Configuration File
Curator Reference [5.8] » Actions » Delete Indices
Curator Reference [5.8] » Filters » pattern