欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Elasticsearch索引管理工具Curator介绍

程序员文章站 2022-03-06 13:01:15
...

我们在运维大型的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开头的索引。

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