Elasticsearch 是 ELK 日志架构中的搜索工具,现在需求是不需要保存那么长时间,只需要保留当天的数据,本文将要使用 ES 官方推荐的 elasticsearch-curator
工具来达到需求。
安装 curator
pip install elasticsearch-curator
安装后,便可以在命令行中直接使用,使用 --help
查看一下使用方法
# 默认读取的是~/.curator/curator.yml目录下的,也可以通过--config参数指定其他位置的配置文件
--config PATH Path to configuration file. Default: ~/.curator/curator.yml
# 用作测试,不对实际数据进行修改,类似sed -e
--dry-run Do not perform any changes.
添加配置
curator.yml
该文件主要用作连接 ES 集群
$ mkdir ~/.curator
$ vim curator.yml
---
client:
# 需要处理的主机如下,必须是一个集群,不能同时处理多个集群
hosts:
- 127.0.0.1
- x.x.x.x
# 如果集群中ES端口号不一样,可以参考以下
- 127.0.0.1:9200
- x.x.x.x:9201
# ES 集群的端口号,如果上方指定后,这里空出就好
port:
# 如访问ES需要通过域名加路径来访问,这里就写域名加路径
url_prefix:
# 如果使用了https来访问则设置为True,否则为False
use_ssl: False
# 如果use_ssl的值为True,则需要设置以下三项
# ca证书路径
certificate:
# 客户端证书路径,pem格式
client_cert:
# 客户端密钥,pem格式
client_key:
# 如果ES集群使用了ssl证书,但不需要去验证,则改为True来禁用ssl,否则为False
ssl_no_validate: False
# 访问ES使用到的用户名密码
username:
password:
# 连接超时的值
timeout: 30
# 当执行curator命令时,该值为True则不允许执行该配置文件中指向的节点
master_only: False
logging:
# 设置要显示的最低可接受日志严重性
# CRITICAL 将只显示关键消息。
# ERROR 将只显示错误和关键消息。
# WARNING 将显示错误、警告和关键消息。
# INFO 将显示信息、错误、警告和关键消息。
# DEBUG 除了上述所有信息外,还将显示调试消息。
loglevel: INFO
# 日志文件的路径,默认为空
logfile: /var/log/es-curator/curator.log
# 日志格式:json/logstash/ecs/default
logformat: default
# 黑名单,不输出elasticsearch和urllib3,这两个python模块的日志
# 没有必要或者不了解,默认值即可
blacklist: ['elasticsearch', 'urllib3']
创建日志目录
mkdir /var/log/es-curator
action.yml
该文件用作如何操作 ES 集群,会根据 ES 的索引来做删除的动作,使用以下命令查看 ES 中的索引。
curator_cli show-indices
# 默认读取~/.curator/curator.yml中的ES服务器
# 也可以通过--host和--port指定es服务器
# 也可以通过--config重新指定其他位置的配置
定义删除动作
$ vim ~/.curator/action.yml
# delete_indices为删除索引的关键字
action: delete_indices
# description可选
description: "只保留ES两天的数据"
options:
# 发现错误后,继续执行下一个索引操作
continue_if_exception: True
# 为true表示filters为空列表时,继续下一个action,而不是退出
ignore_empty_list: True
# 必须是整秒数,用来防止轮询超时
timeout_override: 300
# action开关,为True表示不执行
disable_action: (True|False)
# 以下即是根据过滤索引来选择操作哪些数据
# 如:我的索引为feiyi-2021.09.01
filters:
# 索引前缀匹配feiyi-
- filtertype: pattern
# 指定kind为prefix来匹配前缀
kind: prefix
# 前缀值为"feiyi-"
value: feiyi-
# exclude为true是删除,false为保留
# exclude: False
# 处理2天前的索引(匹配后缀索引日期)
- filtertype: age
# 匹配索引的名字中的日期格式
source: name
# 此设置必须为older或者younger,没有默认值
direction: older
# 匹配索引名字中的时间戳的格式
timestring: '%Y.%m.%d'
# 指定计算日期的单位
unit: days
# 作为unit的乘数
unit_count: 2
多个action的格式如下
actions:
1:
action:
...
2:
action:
...
3:
action:
...
以下是我实际使用的配置
actions:
1:
action: delete_indices
description: "Delete exchange-app-api"
options:
continue_if_exception: False
ignore_empty_list: True
timeout_override: 300
filters:
- filtertype: pattern
kind: prefix
value: sbox-exchange-app-api-
# exclude: False
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 2
# exclude: False
2:
action: delete_indices
description: "Delete sbox-operate-web-"
options:
continue_if_exception: False
ignore_empty_list: True
timeout_override: 300
filters:
- filtertype: pattern
kind: prefix
value: sbox-operate-web-
# exclude: False
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 2
# exclude: False
3:
action: delete_indices
description: "Delete sbox-operate-web-"
options:
continue_if_exception: False
ignore_empty_list: True
timeout_override: 300
filters:
- filtertype: pattern
kind: prefix
value: sbox-operate-web-
# exclude: False
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 2
# exclude: False
执行删除操作
curator --config ~/.curator/curator.yml ~/.curator/action.yml
定时任务
crontab -e
# 每天中午12执行任务
0 12 * * * /usr/local/bin/curator --config ~/.curator/curator.yml ~/.curator/action.yml