Elasticsearch索引管理工具Curator介绍
我们在运维大型的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开头的索引。
以上就是我今天的分享,希望您能有收获。
上一篇: 关于php 开发中加密的问题
下一篇: php 年月日怎么转换为时间戳