Gerenciando o seu cluster Elasticsearch com o Curator

Alexandre Eleutério Santos Lourenço
Tech@Grupo ZAP
Published in
3 min readAug 30, 2016

Quando possuímos um cluster de Elasticsearches triturando logs e outros tipos de dados de nossos sistemas, é necessário configurar processos que gerenciem esses dados, realizando ações como expurgas e backups. Para essa finalidade, entra em ação o Curator.

O Curator é uma ferramenta escrita em Python, que permite realizar diversas ações. Neste artigo iremos focar nas duas principais funcionalidades, expurga e backup. Para instalar o Curator, basta executar o comando pip, conforme abaixo:

sudo pip install elasticsearch-curator

Uma vez instalado, vamos começar preparando o nosso cluster para realizar os backups, através de um repositório de backup. Um repositório de backup consiste de um processo configurado no Elasticsearch, que realiza e direciona os backups para um local de armazenamento. Neste caso, vamos configurar para que os backups sejam armazenados em um bucket S3. Vamos instalar a última versão do plugin AWS Cloud do Elasticsearch, através do seguinte comando, a partir da home de cada nó de nosso cluster:

bin/plugin install cloud-aws

A seguir, é preciso configurar as credenciais da AWS. Para isso, configuramos nosso elasticsearch.yml acrescentando o seguinte código:

cloud:
aws:
access_key: <access key>
secret_key: <secret key>

Por fim, vamos configurar o nosso repositório, utilizando a REST API, executando o seguinte comando:

PUT /_snapshot/elasticsearch_backups
{
“type”: “s3”,
“settings”: {
“bucket”: “elastic-bckup”,
“region”: “us-east-1”
}
}

No comando acima criamos um novo repositório chamado “elasticsearch-backups”, definindo também o bucket onde iremos guardar os nossos backups. Com nosso repositório criado, vamos criar nossos YAMLs de configuração do Curator.

O primeiro YAML é o “curator-config.yml”, onde configuramos opções como o endereço do cluster. Um exemplo de configuração desse arquivo pode ser visto abaixo:

client:
hosts:
— localhost
port: 9200
url_prefix:
use_ssl: False
certificate:
client_cert:
client_key:
aws_key:
aws_secret_key:
aws_region:
ssl_no_validate: False
http_auth:
timeout: 240
master_only: False
logging:
loglevel: INFO
logfile:
logformat: default
blacklist: [‘elasticsearch’, ‘urllib3’]

O outro YAML é o “curator-action.yml”, onde configuramos uma lista de ações a serem executadas através do Curator. No exemplo abaixo, temos índices de dados provenientes do Twitter, com o prefixo “twitter”, onde realizamos primeiro um backup de todos os índices criados a mais de 2 dias e em seguida realizamos uma expurga desses mesmos dados:

actions:
1:
action: snapshot
description: >-
Make backups of indices older then 2 days.
options:
repository: elasticsearch_backups
name: twitter-%Y.%m.%d
ignore_unavailable: False
include_global_state: True
partial: False
wait_for_completion: True
skip_repo_fs_check: False
timeout_override:
continue_if_exception: False
disable_action: False
filters:
— filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 2
exclude:
2:
action: delete_indices
description: >-
Delete indices older than 2 days (based on index name).
options:
ignore_empty_list: True
timeout_override:
continue_if_exception: False
disable_action: False
filters:
— filtertype: pattern
kind: prefix
value: twitter-
exclude:
— filtertype: age
source: name
direction: older
timestring: ‘%Y.%m.%d’
unit: days
unit_count: 2
exclude:

Com os YAMLs devidamente configurados, podemos executar o curator, com o seguinte comando:

curator — config curator-config.yml curator-action.yml

O comando irá gerar um log das ações realizadas, mostrando que nossas configurações foram um sucesso:

2016–08–27 16:14:36,576 INFO Action #1: snapshot
2016–08–27 16:14:40,814 INFO Creating snapshot “twitter-2016.08.27” from indices: [u’twitter-2016.08.14', u’twitter-2016.08.25']
2016–08–27 16:15:34,725 INFO Snapshot twitter-2016.08.27 successfully completed.
2016–08–27 16:15:34,725 INFO Action #1: completed
2016–08–27 16:15:34,725 INFO Action #2: delete_indices
2016–08–27 16:15:34,769 INFO Deleting selected indices: [u’twitter-2016.08.14', u’twitter-2016.08.25']
2016–08–27 16:15:34,769 INFO — -deleting index twitter-2016.08.14
2016–08–27 16:15:34,769 INFO — -deleting index twitter-2016.08.25
2016–08–27 16:15:34,860 INFO Action #2: completed
2016–08–27 16:15:34,861 INFO Job completed.

Pronto! Agora é só agendar esse script para executar de tempos em tempos (uma vez por dia, por exemplo) e teremos backup e expurga automatizados.

--

--