Elasticsearch索引管理工具Curator介绍

2020-06-03 00:00:00 索引 的是 配置 写法 希望

我们在运维大型的Elasticsearch集群时,常常会遇到一个问题,open的索引过多,导致集群出现了故障;还有一个场景是,日志并不需要保存,我们需要定时去删除索引。这两个典型场景怎么处理呢?

如果不知道Curator的存在,个想法可能是写脚本,然后通过crond实现,实际上使用Curator可以极大的方便这部分的运维工作。

Curator目前已是Elastic家族中的一员,源代码使用Python编写。笔者曾经运维过Elasticsearch 1.x、2.x和6.x集群,Curator本身对Elasticsearch版本是有要求的。

本文以Curator v5.6.0为例,介绍其安装及用法。

安装方法很简单,下载官方的rpm包,运行命令:

# rpm -ivh elasticsearch-curator-5.6.0-1.x86_64.rpm

即可完成安装,使用的操作系统是Redhat 7.4。

配置包括两个方面,一个是连接Elasticsearch Server的配置,另一个是各个Action的配置。连接Elasticsearch Server的配置文件,定义为curator.yml,Action的配置文件定义为action.yml,当然也可以叫其他名称。

举例如下:

#cat curator.yml

---

# Remember, leave a key empty if there isno value. None will be a string,

# not a Python "NoneType"

client:

hosts:

-xx.xx.xx.xx

port: 9200

url_prefix:

use_ssl: False

certificate:

client_cert:

client_key:

ssl_no_validate: False

http_auth:

timeout: 30

master_only: False


logging:

loglevel: INFO

logfile:

logformat: default

blacklist: ['elasticsearch', 'urllib3']

这一块配置相对简单,一眼就能明白意思。

#cat action.yml

---

actions:

1:

action: delete_indices

description:>-

Delete indices …

options:

ignore_empty_list:True

disable_action:False

filters:

- filtertype: age

source: name

direction: older

timestring: ‘%Y%m%d’

unit: days

unit_count: 90

2:

action: close

description:>-

Close indices …

options:

delete_aliases: False

disable_action:False

ignore_empty_list: True

filters:

- filtertype: age

source: name

direction:older

timestring: ‘%Y%m%d’

unit: days

unit_count: 7

其中1、2分别表示删除符合‘%Y%m%d’ 90天前的索引、关闭符合‘%Y%m%d’ 7天前的索引。Curator支持的action有open、close、delete_indices、alias等,常用的是close和delete。

两个配置文件都定义好后,怎么执行呢?

使用命令如下:

#curaor --config curator.yml action.yml

如果只是验证是否有问题,而不是实际执行,加上“’--dry-run”。我们将命令加到/etc/cron.d下elasticsearch.cron管理,这样我们就有了定时索引管理。

在我们实际使用中,会遇到下面的问题:

1)在配置ES服务器列表时,好配置多个服务器,以避免单点的问题,以下几种写法都是可以的:

a) hosts: [ "10.0.0.1","10.0.0.2" ]

b) hosts: [ "10.0.0.1",

"10.0.0.2"]

c) hosts:

- 10.0.0.1

- 10.0.0.2

d) hosts:

- 10.0.0.1:9200

- 10.0.0.2:9201

2)在action.yml文件中,不同序号的配置,是顺序执行的,如果前面一个匹配的是一个空列表,会导致后续的不再执行,这时候为了防止这种情况,需要将ignore_empty_list设置为True。

3)prefix的用法,

种,

- filtertype: pattern

kind:prefix

value:logstash-

第二种,

- filtertype: pattern

kind:prefix

value:logstash-

exclude:True

上面两种写法表达的意思正好相反,是否匹配以“logstash-”开头的索引。

4)timestring的用法,

种,

- filtertype: pattern

kind:timestring

value:'%Y.%m.%d'

第二种,

- filtertype: pattern

kind:timestring

value:'%Y.%m.%d'

exclude:True

这种按照年月日格式来命名的索引,特别适合日志场景。

5)多个索引前缀的写法,

- filtertype: pattern

kind: prefix

value:'^auto-logstash_linux_secure|^auto-logstash_windows_security

这里使用了正则表达式,表示匹配以auto-logstash_linux_secure或者auto-logstash_windows_security开头的索引。

以上就是我今天的分享,希望您能有收获。

相关文章