腾讯云 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功能

那么curator的功能总结如下:(对索引的管理维护!)

  • 为别名(Alias)添加或移除索引
  • 创建索引
  • 删除索引
  • 关闭索引
  • 删除快照
  • 打开已经关闭的索引
  • 更改分片路由配置
  • 强制合并索引
  • 重建索引(包括从远程的集群)
  • 更改索引每个分片的副本数量
  • 为索引创建快照
  • 从快照还原
  • rollover indices(当某个别名指向的实际索引过大的时候,自动将别名指向下一个实际索引)

其次:我们来看一下 ES—Curator 版本间的对应关系

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工具包

安装curator工具包

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

curator报错

解决办法:执行这条命令添加参数: sudo pip install elasticsearch-curator –ignore-installed requests

查看一下curator 版本 使用命令:curator –version

curator版本信息

那么到此,curator安装完毕。接下来怎么使用?它有三种使用方式:

1,命令行 CLI 工具 使用curator_cli 开头后面接参数,我们可以通过–help查看,如下:

curator_cli使用工具

它的好处: 无需配置文件,一行命令即可成功;坏处:不能便捷的适应复杂的操作

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)日志信息。

那看看我得这个怎么配置的?

config.yml文件

再来看看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是怎么配置的?

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文件里配置了。发现删除了日志。

curator输出日志

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

es集群索引信息

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

删除成功

定时执行 = crontab任务计划

如果我们需要在某一个时刻去定时操作清理ES上的数据,那么我们可以使用LINUX 自带的crontab功能

比如说我要每隔1分去执行命令,清理Logstash开头的索引 我们可以这样写

我们使用contab -e 打开直接添加如下命令 也可以写脚本,然后把脚本添加进crontab 去执行

任务计划语句

查看日志,看计划执行没

执行成功

写个脚本看看能否执行

脚本内容

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

授权脚本执行权限
curator日志

那么至此,Elastic Curator工具的使用就已经完成。curator+crontab的方式是实际生产中应用的最多的方式。接下来,我们还要再讲一种方式,那就是基于Tencent SCF 下调用基于curator工具的Python API去管理维护ES集群的索引:

四、使用Curator在腾讯云Elasticsearch中自动删除过期数据

腾讯云无服务器云函数(SCF)中,已经配置了含有Curator的模板,用户可以直接应用模板,快速开始一个curator函数的配置:便于我们快速的通过API去处理ES集群的索引信息。下面简单介绍一下:

第一步 创建云函数

进入到腾讯云无服务器函数(scf)的控制台,点击新建。

新建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久历史数据的操作的场景。