22 de out. de 2019

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 

Veja mais em: https://www.elastic.co/guide/en/elasticsearch/client/curator/current/about-features.html


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

Nenhum comentário:

Postar um comentário