「Curator」- 删除五天前日志索引

  CREATED BY JENKINSBOT

问题描述

日志集群: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