腾讯云 Elasticsearch 实战篇(十九) 使用 Curator 管理索引
- 2020 年 2 月 26 日
- 笔记
前言 |
Curator 是 Elastic 官方发布的一个管理 Elasticsearch 索引的工具,可以完成许多索引生命周期的管理工作,例如清理创建时间超过7天的索引、每天定时备份指定的索引、定时将索引从热节点迁移至冷节点等等。那么今天我们就来讲讲Curator的入门、操作、使用.
一、Curator到底能做什么?
首先, 我们访问一下Curator官网: https://www.elastic.co/guide/en/elasticsearch/client/curator/current/index.html
通过官网我们可以知道,Curator目前最新版本是5.8 ,它具有以下这些功能:

那么curator的功能总结如下:(对索引的管理维护!)
- 为别名(Alias)添加或移除索引
- 创建索引
- 删除索引
- 关闭索引
- 删除快照
- 打开已经关闭的索引
- 更改分片路由配置
- 强制合并索引
- 重建索引(包括从远程的集群)
- 更改索引每个分片的副本数量
- 为索引创建快照
- 从快照还原
- rollover indices(当某个别名指向的实际索引过大的时候,自动将别名指向下一个实际索引)
其次:我们来看一下 ES—Curator 版本间的对应关系

因为我们的ES最新版已经到了7.6了,所以,我们的curator版本也不能太低了,所以一般都是选择5.6或者5.8 ,那么本文将以ES 6.8.2 、Curator5.8来讲解他们之间的应用。
二、Curator的安装、使用
安装条件:CVM云主机 腾讯ES集群(也可以自己搭建虚拟环境) CVM与ES同在一个VPC
第一步:在CVM上,通过 pip 安装 curator 包 使用命令:pip install elasticsearch-curator (注意:如果提示pip命令无法找到,则需要先安装PIP工具包)

在安装的最后,发现报错“ERROR: Cannot uninstall 'requests'. It is a distutils installed project and thus we cannot accurat”

解决办法:执行这条命令添加参数: sudo pip install elasticsearch-curator –ignore-installed requests
查看一下curator 版本 使用命令:curator –version

那么到此,curator安装完毕。接下来怎么使用?它有三种使用方式:
1,命令行 CLI 工具 使用curator_cli 开头后面接参数,我们可以通过–help查看,如下:

它的好处: 无需配置文件,一行命令即可成功;坏处:不能便捷的适应复杂的操作
2,以配置文件的方式运行
它的格式如下:curator –config /path/config.yml /path/action.yml (注意配置文件一定要写绝对路径)
config.yml 是配置文件,用于配置ES集群信息。action.yml 用来执行索引操作的配置信息。
这几个配置文件在系统安装完毕后,默认是没有配置文件的。我们需要去官网COPY。那我们去官网看看:地址如下https://www.elastic.co/guide/en/elasticsearch/client/curator/5.8/configfile.html
CONFIG.YML 官方配置文件如下:
--- # Remember, leave a key empty if there is no value. None will be a string, # not a Python "NoneType" client: hosts: - 127.0.0.1 ----》ES集群的IP,多个IP间用","隔开 port: 9200 ------》ES端口 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']---》保持默认
它的核心配置: 1)集群IP; 2)安全认证信息; 3)日志信息。
那看看我得这个怎么配置的?

再来看看Action.yml官方配置文件地址为: https://www.elastic.co/guide/en/elasticsearch/client/curator/5.8/actionfile.html
由于内容较多,建议大家看官网,这里列出部分,如下:
--- # Remember, leave a key empty if there is no value. None will be a string, # not a Python "NoneType" # # Also remember that all examples have 'disable_action' set to True. If you # want to use this action as a template, be sure to set this to False after # copying it. actions: 1:--------------》要采取的动作1 ###action.yml 用来执行索引操作的配置信息。 action: ACTION1 description: OPTIONAL DESCRIPTION options: option1: value1 ... optionN: valueN continue_if_exception: False disable_action: True filters: - filtertype: *first* filter_element1: value1 ... filter_elementN: valueN - filtertype: *second* filter_element1: value1 ... filter_elementN: valueN 2:-----------------------------要采取的动作2,依次类推,都再这里定义 action: ACTION2 description: OPTIONAL DESCRIPTION
那看看我得action.yml是怎么配置的?

这只是一个条件,当然后面还可以以此类推。进行复合命令的操作。
3,通过Python API来操作curator,后面我们将以腾讯云SCF结合,讲它的实用。
三、curator的实际应用
比如,我需要:过滤索引名称匹配 logstash-20xx-xx-xx 格式且时间为7天前的索引,然后将这些索引删除,操作如下:
1,命令行模式 使用如下:
curator_cli –host 10.0.0.2:9200 –http_auth user:passwd delete_indices –filter_list '[{"filtertype": "pattern", "kind": "prefix", "value": "logstash-"}, {"filtertype": "age", "source": "name", "direction": "older", "timestring": "%Y.%m.%d", "unit": "days", unit_count: 7}]'
2,配置文件 的方式上面本人的配置文件已经贴出来了。那么怎么执行呢?如下:

验证一下有没有执行成功?我们去看输出日志。日志目录我们在config.yml文件里配置了。发现删除了日志。

我们看一下ES集群上的索引信息是否准确?确实删除了

那我们再来改一下规则,让它删除以logstats-ngi*开头的索引信息。我们改一下配置文件。

定时执行 = crontab任务计划
如果我们需要在某一个时刻去定时操作清理ES上的数据,那么我们可以使用LINUX 自带的crontab功能
比如说我要每隔1分去执行命令,清理Logstash开头的索引 我们可以这样写
我们使用contab -e 打开直接添加如下命令 也可以写脚本,然后把脚本添加进crontab 去执行

查看日志,看计划执行没

写个脚本看看能否执行

将此脚本授权并放到任务计划 每1分钟执行一次。使用crontab -e 打开命令行,添加后,然后保存退出。



那么至此,Elastic Curator工具的使用就已经完成。curator+crontab的方式是实际生产中应用的最多的方式。接下来,我们还要再讲一种方式,那就是基于Tencent SCF 下调用基于curator工具的Python API去管理维护ES集群的索引:
四、使用Curator在腾讯云Elasticsearch中自动删除过期数据
腾讯云无服务器云函数(SCF)中,已经配置了含有Curator的模板,用户可以直接应用模板,快速开始一个curator函数的配置:便于我们快速的通过API去处理ES集群的索引信息。下面简单介绍一下:
第一步 创建云函数
进入到腾讯云无服务器函数(scf)的控制台,点击新建。

选择“Curator” 如下图


高级配置里,选择私有网络配置。注意:要跟ES集群在同一内网。


根据您购买的ES集群信息编辑模板的相关参数
- esServer: es集群vpc内网的ip和端口
- esPrefix: es索引的前缀,如logstash-
- esCuratorTimeStr: 索引中的时间格式,如%Y-%m-%d。这样将会匹配形如logstash-2017-12-04为名字的索引。
- esCuratorTimeUnit: 时间周期,可以选择小时(hours),天(days),月(months)等。
- esCuratorTimeCount: 时间间隔,和上面的时间周期一起来配置过期索引的时间。
最后定义触发告警,每天运行依次。定时清理不要的索引信息(根据实际情况)

在触发方式中,配置触发周期,可以配置每天触发或选择自定义触发,点击保存。
关于此节请参考官方文档:https://cloud.tencent.com/developer/article/1361207
五、总结
本节讲了从两个方面去讲了curator的使用。尤其是后面还介绍了一款腾讯云 自动化的Curator API工具。便于我们快速去维护管理在腾讯ES集群上的索引。总之,此工具非常好用,也非常强大,建议大家多操作。重点注意其原理、配置文件含义。最后还是要以下的curator使用限制:
切记: curator适用于 基于时间或者tempalte其它方式创建的索引。, 不适合单一索引存储N久历史数据的操作的场景。