Removendo indices de séries temporais com ElasticSearch Curator
Olá, meu caro.
Irei apresentar o Curator, uma ferramenta desenvolvida em python muito útil para gerenciamento de indices do Elasticsearch. O Curator executa muitas operações nos indices do elasticsearch além de muito útil para remover e gerenciar snapshots.
01 - Remoção de indices com curator |
Quando você trabalha com grandes volumes de dados e logs é extremamente importante ter um planejamento de retenção desses dados nos indices do elasticsearch, no meu caso, recebo aproximadamente 500GB diário de dados de logs, é uma quantidade razoavelmente grande, se não houver capacidade de armazenamento suficiente, rapidamente perdemos a capacidade de armazenar, é preciso rotacionar.
Recursos do curator
- Add or remove indices (or both!) from an alias
- Change shard routing allocation
- Close indices
- Create index
- Delete indices
- Delete snapshots
- Open closed indices
- forceMerge indices
- reindex indices, including from remote clusters
- Change the number of replicas per shard for indices
- rollover indices
- Take a snapshot (backup) of indices
- Restore snapshots
Instalação
Como mencionado anteriormente o curator foi escrito em python, iremos precisar do pip para instalá-lo.
# pip install elasticsearch-curator
Configurando
Crie um diretório chamado curator, dentro deste diretório você deve criar o arquivo de configuração curator_cluster_config.yml com o conteudo abaixo que deve ser modificado de acordo com o seu ambiente.
Arquivo de configuração utilizando SSL.
# Remember, leave a key empty if there is no value. None will be a string, not a Python "NoneType" client: hosts: - "elk-cluster.isweluiz.com" port: 9200 url_prefix: use_ssl: True # The certificate file is the CA certificate used to sign all ES node certificates. # Use same CA certificate to generate and sign the certificate running curator (specified in properties client_cert and client_key) certificate: '/work/elk/elasticsearch-6.3.2/config/x-pack/certificate-bundle/ca/ca.crt' client_cert: '/work/elk/elasticsearch-6.3.2/config/x-pack/certificate-bundle/myhostname/myhostname.crt' client_key: '/work/elk/elasticsearch-6.3.2/config/x-pack/certificate-bundle/myhostname/myhostname.key' ssl_no_validate: False # Username password to connect to ES using basic auth http_auth: "username:password" timeout: 30 master_only: False logging: loglevel: INFO logfile: logformat: default blacklist: ['elasticsearch', 'urllib3']
Uma configuração de cluster sem a utilização do SSL, o que será muito mais simples, como abaixo:
# Remember, leave a key empty if there is no value. None will be a string, not a Python "NoneType" client: hosts: - "elk-cluster.isweluiz.com" port: 9200 url_prefix: use_ssl: False certificate: client_cert: client_key: ssl_no_validate: False http_auth: "username:password" logging: loglevel: WARNING logfile: logformat: default blacklist: ['elasticsearch', 'urllib3']
Após criar um arquivo de configuração e incluir a configuração do seu cluster, podemos prosseguir para a próxima etapa, que será a criação de uma ação que será executada em nosso cluster. Você pode checar a documentação oficial para verificar todas as ações disponíveis com o curator.
Removendo indices com séries temporais
O ElasticSearch é uma ótima opção para armazenar dados de séries temporais por vários motivos. As equipes de índices do ElasticSearch criam automaticamente índices e aliases que permitem pesquisar de maneira uniforme vários índices. O ElasticSearch não fornece remoção automática de dados.
Como exemplo, excluiremos todos os índices do filebeat-*, auditbeat-* e metricbeat-* com mais de 7 dias. Usaremos delete_indices como ação.
Nossos índices são nomeados com o sufixo YYYY.MM.DD, portanto, precisamos informar ao Curator sobre nosso formato e quais índices remover. Abaixo está o arquivo de ação de amostra curator_actions.yml, que excluirá os índices do elastic com mais de 7 dias:
Uma ação para cada:
actions:
1:
action: delete_indices
description: >-
options:
timeout_override: 300
continue_if_exception: True
ignore_empty_list: True
disable_action: False
filters:
- filtertype: pattern
kind: regex
value: filebeat-*
exclude:
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 7
2:
action: delete_indices
description: >-
options:
timeout_override: 300
continue_if_exception: True
ignore_empty_list: True
disable_action: False
filters:
- filtertype: pattern
kind: regex
value: auditbeat-*
exclude:
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 7
3:
action: delete_indices
description: >-
options:
timeout_override: 300
continue_if_exception: True
ignore_empty_list: True
disable_action: False
filters:
- filtertype: pattern
kind: regex
value: metricbeat-*
exclude:
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 7
Única ação para remover todos os indices mencionados:
# Remember, leave a key empty if there is no value. None will be a string, not a Python "NoneType" actions: 1: action: delete_indices description: >- timeout_override: 300 continue_if_exception: True ignore_empty_list: True disable_action: False filters: - filtertype: pattern kind: regex value: '^\.(metricbeat-|filebeat-|auditbeat-).*$' exclude: - filtertype: age source: name direction: older timestring: '%Y.%m.%d' unit: days unit_count: 7
A partir do diretório criado anteriormente, iremos executar o curator para testar as configurações, para isso passamos o parâmetro --dry-run ao final da linha de comando.
[root@isweluiz]# curator --config curator_cluster_config.yml curator_actions.yml --dry-run
2019-10-22 13:53:36,422 INFO Preparing Action ID: 1, "delete_indices"
2019-10-22 13:53:36,422 INFO Creating client object and testing connection
2019-10-22 13:53:36,469 INFO Instantiating client object
2019-10-22 13:53:36,471 INFO Testing client connectivity
2019-10-22 13:53:36,481 INFO Successfully created Elasticsearch client object with provided settings
2019-10-22 13:53:36,484 INFO Trying Action ID: 1, "delete_indices":
2019-10-22 13:53:38,023 INFO DRY-RUN MODE. No changes will be made.
2019-10-22 13:53:38,023 INFO (CLOSED) indices may be shown that may not be acted on by action "delete_indices".
2019-10-22 13:53:38,025 INFO Action ID: 1, "delete_indices" completed.
2019-10-22 13:53:38,026 INFO Preparing Action ID: 2, "delete_indices"
2019-10-22 13:53:38,026 INFO Creating client object and testing connection
2019-10-22 13:53:38,026 INFO Instantiating client object
2019-10-22 13:53:38,027 INFO Testing client connectivity
2019-10-22 13:53:38,032 INFO Successfully created Elasticsearch client object with provided settings
2019-10-22 13:53:38,035 INFO Trying Action ID: 2, "delete_indices":
2019-10-22 13:53:39,695 INFO DRY-RUN MODE. No changes will be made.
2019-10-22 13:53:39,695 INFO (CLOSED) indices may be shown that may not be acted on by action "delete_indices".
2019-10-22 13:53:39,697 INFO Action ID: 2, "delete_indices" completed.
2019-10-22 13:53:39,697 INFO Preparing Action ID: 3, "delete_indices"
2019-10-22 13:53:39,697 INFO Creating client object and testing connection
2019-10-22 13:53:39,697 INFO Instantiating client object
2019-10-22 13:53:39,698 INFO Testing client connectivity
2019-10-22 13:53:39,703 INFO Successfully created Elasticsearch client object with provided settings
2019-10-22 13:53:39,706 INFO Trying Action ID: 3, "delete_indices":
2019-10-22 13:53:43,995 INFO DRY-RUN MODE. No changes will be made.
2019-10-22 13:53:43,996 INFO (CLOSED) indices may be shown that may not be acted on by action "delete_indices".
2019-10-22 13:53:43,998 INFO Action ID: 3, "delete_indices" completed.
2019-10-22 13:53:43,998 INFO Preparing Action ID: 4, "delete_indices"
2019-10-22 13:53:43,998 INFO Creating client object and testing connection
2019-10-22 13:53:43,999 INFO Instantiating client object
2019-10-22 13:53:43,999 INFO Testing client connectivity
2019-10-22 13:53:44,006 INFO Successfully created Elasticsearch client object with provided settings
2019-10-22 13:53:44,009 INFO Trying Action ID: 4, "delete_indices":
2019-10-22 13:53:45,888 INFO DRY-RUN MODE. No changes will be made.
2019-10-22 13:53:45,889 INFO (CLOSED) indices may be shown that may not be acted on by action "delete_indices".
2019-10-22 13:53:45,891 INFO Action ID: 4, "delete_indices" completed.
2019-10-22 13:53:45,891 INFO Preparing Action ID: 5, "delete_indices"
2019-10-22 13:53:45,891 INFO Creating client object and testing connection
2019-10-22 13:53:45,892 INFO Instantiating client object
2019-10-22 13:53:45,892 INFO Testing client connectivity
2019-10-22 13:53:45,897 INFO Successfully created Elasticsearch client object with provided settings
2019-10-22 13:53:45,900 INFO Trying Action ID: 5, "delete_indices":
2019-10-22 13:53:47,530 INFO DRY-RUN MODE. No changes will be made.
2019-10-22 13:53:47,531 INFO (CLOSED) indices may be shown that may not be acted on by action "delete_indices".
2019-10-22 13:53:47,533 INFO Action ID: 5, "delete_indices" completed.
2019-10-22 13:53:47,533 INFO Job completed.
Com a opção --dry-run o curator habilita o modulo de verificação e não executa as ações nos indices.
Agendando a execução diária do Curator
Para colocar na cron, você pode utilizar o comando; crontab -e para manipulação da crontab do usuário logado no momento. A cron abaixo irá executar todos os dias às 00:59h, ao final da linha acrescentei o redirecionamento para um aquivo chamado curator_delete.out, para armazenar a saída da execução do curator.
59 00 * * * curator --config /opt/curator/curator_cluster_config.yml /opt/curator/curator_actions.yml >> /tmp/curator_delete.out
Para opções de agendamento na cron você pode utilizar o site https://crontab.guru/.
Leitura recomendada
No comments