Skip to content

2 ‐ Instalação e Configuração do Elastic Observability

Tornis Tecnologia edited this page Feb 15, 2024 · 23 revisions

Introdução ao Elasticsearch

O Elasticsearch é um motor de busca e análise distribuído, baseado em Lucene, projetado para lidar com uma grande variedade de tipos de dados e formatos. É um componente central do Elastic Stack, atuando como a espinha dorsal para armazenamento, pesquisa e análise de dados.

Funcionalidade Chave:

  • Pesquisa e Análise de Dados: O Elasticsearch permite realizar buscas complexas e oferece recursos analíticos poderosos em tempo real, essenciais para interpretar grandes volumes de dados.
  • Distribuído por Natureza: Projetado para operar em um ambiente distribuído, oferece alta disponibilidade e capacidade de escalonar horizontalmente, ajustando-se à crescente quantidade de dados e tráfego.
  • Schema-Free: Utiliza um formato JSON para os dados, permitindo flexibilidade na indexação de diferentes tipos de dados sem a necessidade de um esquema pré-definido.

Função do Elasticsearch na Solução Elastic Observability

No contexto da Elastic Observability, o Elasticsearch desempenha um papel vital no armazenamento e análise de dados de observabilidade (logs, métricas e traces). A capacidade de indexar e pesquisar rapidamente grandes volumes de dados é fundamental para uma observabilidade eficaz, permitindo que as equipes detectem e diagnostiquem problemas de forma rápida e precisa.

Arquitetura do Elasticsearch

A arquitetura do Elasticsearch é projetada para ser altamente escalável e resiliente. Vamos explorar os principais componentes que compõem um cluster do Elasticsearch, incluindo shards, réplicas e tipos de nodes.

Cluster Elasticsearch e seus componentes

Cluster

  • Definição: Um cluster é uma coleção de um ou mais nodes (servidores) que juntos armazenam seus dados e fornecem recursos de indexação e pesquisa.
  • Cluster ID: Cada cluster é identificado por um nome único, que é importante para a comunicação entre os nodes.

Node

  • Definição: Um node é um único servidor que faz parte do cluster e participa do armazenamento de dados, pesquisa, e outras operações essenciais.
  • Tipos de Nodes:
    • Master Node: Responsável pela gestão do cluster, como a criação ou deleção de índices e a adição ou remoção de nodes.
    • Data Node: Armazena dados e executa operações relacionadas a dados, como pesquisas e agregações.
    • Ingest Node: Utilizado para pré-processamento de dados antes de serem indexados.
    • Coordination Node: Encaminha operações para os nodes apropriados.

Índice

  • Definição: Um índice é uma coleção de documentos que têm características semelhantes. É identificado por um nome único.
  • Funcionalidade: O índice é a unidade de armazenamento e pesquisa no Elasticsearch.

Shards e Réplicas

  • Shard:
    • Definição: Um shard é uma subdivisão de um índice. Cada índice pode ser dividido em múltiplos shards.
    • Propósito: Isso permite a distribuição de dados e a realização de operações de forma paralela em diferentes nodes, melhorando o desempenho e a escalabilidade.
  • Réplica:
    • Definição: Cada shard pode ter zero ou mais cópias chamadas réplicas.
    • Propósito: Réplicas fornecem redundância de dados, o que aumenta a resiliência do sistema e permite consultas paralelas, melhorando a capacidade de leitura.

Balanceamento de Carga e Resiliência

  • Distribuição Automática de Shards: O Elasticsearch distribui automaticamente shards e réplicas pelos nodes do cluster, balanceando a carga e otimizando o uso de recursos.
  • Recuperação de Falhas: Em caso de falha de um node, as réplicas nos outros nodes garantem que não haja perda de dados e que o sistema continue operando normalmente.

Escalabilidade e Desempenho

  • Escalabilidade Horizontal: Adicionar mais nodes ao cluster permite que o Elasticsearch redistribua automaticamente shards e réplicas, aumentando a capacidade e o desempenho.
  • Pesquisa Distribuída: As consultas são executadas em paralelo nos shards relevantes, resultando em respostas rápidas, mesmo com grandes volumes de dados.

Analogia de um Índice Elasticsearch e Banco de Dados Relacional

Banco de Dados Relacional Elasticsearch
Banco de Dados Índice
Tabela Tipo
Linha Documento
Coluna Campo

Explicações sobre a tabela:

  • Banco de Dados vs Índice: No Elasticsearch, um índice é como um 'banco de dados' em um sistema de banco de dados relacional. Os índices permitem que você divida seus documentos em grupos distintos.

  • Tabela vs Tipo: Anteriormente, no Elasticsearch, um 'tipo' era como uma 'tabela' em um banco de dados relacional. No entanto, a partir do Elasticsearch 6.0, os tipos estão em processo de desativação e todos os novos índices poderão conter apenas um tipo.

  • Linha vs Documento: No Elasticsearch, um 'documento' é como uma 'linha' em uma tabela de banco de dados relacional. Cada documento possui um conjunto único de campos e cada campo representa um dado específico naquele documento.

  • Coluna vs Campo: No Elasticsearch, um 'campo' é como uma 'coluna' em uma tabela de banco de dados relacional. Cada campo representa um tipo específico de dado, como texto, data, número etc., que é usado para indexar os documentos de maneira eficiente.

Instalação e Configuração do Elasticsearch

Instalação do Elasticsearch em Modo Single-node com Segurança e TLS

Premissa:

Este guia demonstra a instalação e configuração básica do Elasticsearch em modo "single-node" para o Elastic Observability. A configuração de um cluster Elasticsearch não será abordada neste momento.

Sistema Operacional:

  • Linux (Ubuntu 20.04 LTS utilizado como exemplo)

Requisitos:

  • Java 11 ou superior instalado
  • Espaço livre em disco de acordo com o tamanho da heap size e volume de dados a serem armazenados

Passo a Passo:

1. Download e Instalação do Elasticsearch:

# Baixar o pacote DEB do Elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.1-amd64.deb

# Instalar o Elasticsearch
sudo dpkg -i elasticsearch-8.12.1-amd64.deb

# Iniciar o serviço Elasticsearch
sudo systemctl start elasticsearch

# Verificar status do serviço
sudo systemctl status elasticsearch

2. Configuração do Elasticsearch:

2.1. Configuração da Heap Size:

Abra o arquivo de configuração do Elasticsearch:

sudo vi /etc/elasticsearch/jvm.options

Adicione a seguinte linha na seção jvm.options:

-Xms4g
-Xmx4g

2.2. Gerar Certificados Autoassinados: O Elasticsearch inclui uma ferramenta elasticsearch-certutil que facilita a geração de certificados.

  • Gerar CA (Certificado de Autoridade):

    sudo /usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem

    Isso cria um novo diretório elastic-stack-ca contendo o arquivo de chave da CA (ca.key) e o certificado da CA (ca.crt).

  • Gerar Certificados SSL para Elasticsearch: Você precisará criar um arquivo instances.yml que lista todas as instâncias (nodes) e seus hostnames ou IPs para os quais você deseja gerar certificados.

    Exemplo de instances.yml:

    instances:
      - name: "localhost"
        dns:
          - "localhost.localdomain"
        ip:
          - "127.0.0.1"

    Isso criará um diretório com os arquivos de certificado e chave para cada instância listada. Agora execute o comando abaixo para geração dos certificados:

    sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca-cert elastic-stack-ca/ca.crt --ca-key elastic-stack-ca/ca.key --pem --in config/instances.yml

2.3. Configuração do Elasticsearch (elasticsearch.yml):

  • Configuração para SSL/TLS no Transporte e HTTP: Abra o arquivo /etc/elasticsearch/elasticsearch.yml e adicione as seguintes configurações:

    cluster.name: cluster-observability
    node.name: node1
    network.host: 0.0.0.0
    http.port: 9200
    discovery.type: single-node
    
    # Configurações de segurança
    xpack.security.enabled: true
    
    # SSL/TLS para o protocolo de transporte
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.key: /caminho/para/[node-name]/node.key
    xpack.security.transport.ssl.certificate: /caminho/para/[node-name]/node.crt
    xpack.security.transport.ssl.certificate_authorities: [ "/caminho/para/elastic-stack-ca/ca.crt" ]
    
    # SSL/TLS para HTTP
    xpack.security.http.ssl.enabled: true
    xpack.security.http.ssl.key: /caminho/para/[node-name]/node.key
    xpack.security.http.ssl.certificate: /caminho/para/[node-name]/node.crt
    xpack.security.http.ssl.certificate_authorities: [ "/caminho/para/elastic-stack-ca/ca.crt" ]

    Substitua /caminho/para/[node-name]/ pelo caminho real onde os certificados e chaves foram salvos para cada node.

2.4. Reinicie o Elasticsearch: Após configurar os certificados e editar o elasticsearch.yml, reinicie o serviço do Elasticsearch para aplicar as mudanças.

sudo systemctl restart elasticsearch

**2.5. Verificação: Verifique se o Elasticsearch está configurado corretamente com SSL/TLS executando:

curl -X GET "https://localhost:9200" -u "usuário:senha" -k

Substitua "usuário:senha" pelas credenciais apropriadas.