Skip to content

02 ‐ Instalação e Configuração do Elastic Stack

Tornis Tecnologia edited this page Dec 3, 2024 · 134 revisions

2.1. Introdução ao Elasticsearch

Um sistema ou programa de computador atende aos critérios de utilização distribuída quando é estruturado como uma coleção de programas descentralizados. Essa característica mantém a integridade do compartilhamento de recursos computacionais em diferentes pontos, visando alcançar um objetivo comum. Nesse contexto, o Elasticsearch é um motor de busca e análise distribuído baseado no Apache Lucene — uma biblioteca desenvolvida em Java sob licença de código aberto. Ele é projetado para lidar com uma grande variedade de tipos de dados e formatos e é considerado o 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 em diversas fontes de dados e oferece recursos analíticos poderosos em tempo real, essenciais para a integração de grandes volumes de dados.

  • Distribuído por Natureza:
    Projetado para operar em um ambiente distribuído, o Elasticsearch oferece alta disponibilidade e capacidade de escalonamento horizontal. Esse escalonamento pode ser compreendido a partir da sua estrutura distribuída, que promove o aumento da eficiência do sistema operacional ao ajustar-se à crescente quantidade de dados e tráfego, sempre entregando o melhor resultado.

  • Schema-Free:
    Utiliza o formato JSON (JavaScript Object Notation), um formato aberto para transferência de dados, o que permite flexibilidade na indexação de diferentes tipos de dados sem a necessidade de um esquema pré-definido. A indexação, que será abordada mais adiante, visa promover o gerenciamento dos dados independentemente de sua origem, aumentando significativamente a produtividade.

2.2. Arquitetura do Elasticsearch

A arquitetura do Elasticsearch é projetada para ser altamente escalável e resiliente. Vale lembrar que escalabilidade está diretamente relacionada à capacidade do sistema de lidar com o crescimento rápido de volume de dados. Vamos explorar os principais componentes que compõem um cluster do Elasticsearch, incluindo shards, réplicas e tipos de nodes.

image

Quando nos referimos a cluster ou ao processo de clusterização, estamos nos referindo à disponibilização de recursos de infraestrutura, independentemente de estarem disponíveis de forma física ou virtualizada. Para facilitar a compreensão, sempre que mencionarmos cluster, estaremos nos referindo a servidores.

2.2.1. 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.

2.2.2. 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.

2.2.3. Í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.

2.2.4. 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.

2.2.5. 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.

2.2.6. 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.

2.2.7. Analogia de um Índice Elasticsearch e Banco de Dados Relacional

image

2.2.8 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.

2.2.9. Instalação e Configuração do Elasticsearch

O objetivo do ambiente de configuração é rodar o Elasticsearch, ou "levantar uma aplicação", o que se refere ao processo de iniciar a aplicação para que ela esteja em funcionamento. Iremos colocar três instâncias no ar, simulando três nós. Embora estejamos utilizando apenas uma máquina, devemos entender o conceito como se estivéssemos trabalhando em máquinas diferentes. Não se preocupe, essa definição será consolidada aos poucos.

image

Durante a configuração do nosso cluster, uma etapa em especial merece atenção: a configuração da heap de memória. A heap é a área de memória que será utilizada para alocação dinâmica durante a execução do Elasticsearch. Nesta fase, configuraremos 1 GB para a heap.

A heap deve ser alocada considerando sempre metade (½) da memória disponível. Após configurarmos o ambiente, também iniciaremos o Kibana para validar a comunicação entre o Elasticsearch e o Kibana.

Vamos então iniciar a configuração da nossa instancia.

2.2.10 Ajustando o sistema operacional

Ao acessar seu ambiente Linux, você estará no terminal de trabalho. Note que estamos logados como o usuário root, com todos os privilégios necessários para manipulação do Sistema Operacional.

Momento Linux:

O momento Linux foi criado para que você se familiarize com os conceitos relacionados ao Elasticsearch e ao ambiente em que ele será instalado. Esse exercício serve para que você acostume-se com o contexto de execução de comandos no terminal, ou seja, na nossa área de trabalho

Exemplo:

Comando:

cat/etc/passwd

Lista de todos os usuários do sistema operacional

Comando:

useradd -d /opt/elastic -m elastic

criação do usuário elastic e diretório dentro da pasta: /opt/elastic.

Comando:

ls /opt/elastic -lf 

Você verá que a pasta elastic já está disponível com os dados já disponíveis

image

2.2.11 Ajustando o Sistema Operacional

Passo Sintaxe do comando Resultado esperado
01 useradd -d /opt/elastic -m elastic Criação do diretório e usuário elastic dentro da pasta /opt/elastic
02 chown elastic.elastic /opt/elastic -R Mudar o permissionamento da pasta no sentido de quem é do e quem é o grupo dono da pasta.
03 echo "elastic - nofile 65536" >> /etc/security/limits.conf Setando o limits do kernel para o máximo possível. Este recurso é utilizado pelo elastic.
04 echo "vm.swappiness = 1" >> /etc/sysctl.conf Desabilitando o swappiness da máquina. No nó de elastic não habilitamos swap
05 echo "vm.max_map_count = 262144" >> /etc/sysctl.conf Aumentando a capacidade de memória
06 sysctl -p Aplicando as configurações que foram realizadas.
07 swapoff -a Desligando a swap.

** Passo: 01**

chown elastic.elastic /opt/elastic -R

** Passo: 02**

chown elastic.elastic /opt/elastic -R

** Passo: 03**

echo "elastic - nofile 65536" >> /etc/security/limits.conf

** Passo: 04**

echo "vm.swappiness = 1" >> /etc/sysctl.conf

** Passo: 05**

echo "vm.max_map_count = 262144" >> /etc/sysctl.conf

Passo: 06

sysctl -p

Passo: 07

swapoff -a

2.2.12 Baixando o binário da instalação do Elasticsearch

A Partir deste ponto é muito importante que fiquemos atentos quanto ao usuário que estar realizando todos os passos de configuração do elasticsearch. Estaremos utilizando o usuário < elastic >. Até aqui todos as configurações foram utilizadas com usuário < root > é só seguir os passos abaixo.

Passo Sintaxe do comando Resultado esperado
01 su – elastic Mudando para o usuário elastic
02 pwd Mostra o diretório corrente.
03 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.1-linux-x86_64.tar.gz Download da versão de trabalho do elasticsearch
04 tar zxfv elasticsearch-8.12.1-linux-x86_64.tar. Descompactando o arquivo binário do elasticsearch
05 mv elasticsearch-8.12.1 elastic-instancia1 Renomeando o diretório elasticsearch-8.12.1 para elastic-instancia1
06 mkdir elastic-instancia1/config/certs Criando dentro do diretório elastic-instancia1/config/certs
07 mv elasticsearch-8.12.1 elastic-instancia1 O comando mv nesse contexto tem o objetivo de renomear o diretório elasticsearch-8.12.1 para elastic-instancia1.

Passo: 01

su – elastic

Passo: 02

pwd

Passo: 03

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.1-linux-x86_64.tar.gz

Passo: 04

tar zxfv elasticsearch-8.12.1-linux-x86_64.tar

Passo: 05

mv elasticsearch-8.12.1 elastic-instancia1

Passo: 06

mkdir elastic-instancia1/config/certs

Passo: 07

mv elasticsearch-8.12.1 elastic-instancia1

Passo: 08

mkdir elastic-instancia1/config/certs

Após a execução do passo 07 nós teremos a seguinte estrutura: image

2.2.13 Configurando o Elasticsearch em modo automático

Neste ponto nos vamos editar o arquivo elasticsearch.yml (ou YAML) são arquivos de texto em formatos de serialização de dados. Esses dados são organizados podendo ser editados sempre que necessário. No caso do Elasticsearch arquivos com extensão yml são utilizado para configuração da nossa aplicação.

image

Estaremos utilizando o editor de texto ( vi ) para realização das nossas alterações. Caso você tenha interesse você pode pesquisar nos seguintes sites:

https://www.linuxforce.com.br/comandos-linux/comandos-linux-comando-vi/
https://lief.if.ufrgs.br/pub/vi/comandos_vi.html

Passo Sintaxe do comando Resultado esperado
01 su – elastic Acessado usuário elastic.
02 /opt/elastic/elastic-instancia1 Acessando o diretório conforme linha de comando, o arquivo de edição será o elasticsearch.yml
03 Vi config/elasticsearch.yml Editando o arquivo elasticsearch.yml

Passo:01

su – elastic

Passo:02

cd /opt/elastic/elastic-instancia1

Passo:03

vi config/elasticsearch.yml

2.2.14 Detalhamento da alteração

cluster.name: cluster-sobrenome
node.name: node1

image

Atenção:
Poderá ser utilizado no cluster.name qualquer nome, ficando a cargo do desenvolvedor a sua defininição. Nesse exemplo você poderá utilizar o seu sobrenome com referência. Dentro do ambiente elastic o cluster.name é utilizado como referência para que todos os nós se conheçam. Fazendo com que o nó faça parte deste cluster. Desta forma todos os nós deverão ter o mesmo nome.

2.2.15 Ajustando a Memória Heap do Elasticsearch

A memória Heap é uma área da memória onde os programas alocam espaço para armazenar dados dinâmicos, ou seja, dados que podem mudar de tamanho durante a execução. Ao contrário da memória Stack, que é usada para armazenar variáveis locais e segue uma estrutura de Last In, First Out (LIFO), a Heap permite uma alocação e desalocação de memória de forma mais flexível.

Passo Sintaxe do comando Resultado esperado
01 cd /opt/elastic/elastic-instancia1 Acessando o diretório elastic-instancia1
02 vi config/jvm.options.d/lab.options Criação do arquivo lab.options

Passo:01

cd /opt/elastic/elastic-instancia1    

Passo:02

vi config/jvm.options.d/lab.options    

O arquivo lab.options terá no seu conteúdo 2(duas) linhas, conforme detalhamento da alteração.

Detalhamento da alteração:

-Xms2g
-Xmx2g

Nota: A JVM que foi criada para esta instância será de 2g. O tamanho deverá ser igual para os dois parâmetros.

2.2.16 Iniciando a instancia Elasticsearch

Agora que já temos uma visão geral da arquitetura do Elasticsearch, estaremos inicializando a aplicação, para que as configurações essenciais contribuam para o seu bom funcionamento como ferramenta de análise. A inicialização é necessária para que sejam configurados componentes e recursos fundamentais, tais como:

  • Configuração do cluster;
  • Indexação e alocação dos Shards;
  • Recuperação de dados;
  • Configuração das rotinas de monitoramento e manutenção;
  • Conexões e Segurança.

image

Passo Sintaxe do comando Resultado esperado
01 Diretório: cd /opt/elastic/elastic-instancia1 acesse o diretório da instancia1
02 './bin/elasticsearch -p pid -d' Inicialização do Elasticsearch liberando o terminal

Passo:01

cd /opt/elastic/elastic-instancia1

Passo:02

./bin/elasticsearch -p pid -d

Nota:

./bin : Diretório do binário elasticsearch
-p : Processo recebido do Kernel do linux
pid: Arquivo gerado onde será gravado o número do processo

Após a execução do comando, o terminal será liberado para novas entradas. Podemos então verificar se o Elasticsearch conseguiu realizar todas as configurações corretamente.

Sintaxe do comando: \

$ ss -ltnp 

Resultado esperado:
Verificando qual o valor do pid indicando o número da porta que está sendo utilizada

$ ps aux | grep node 

Resultado esperado:
Verificando qual o valor do pid, indicando o número da porta que está sendo utilizada

$ ps aux | grep instancia
 

Resultado esperado:
Verificando qual o valor do pid, indicando o número da porta que está sendo utilizada
Nota: mesmo efeito do comando $ ss –lntp

Resultado esperado:

image

cd /opt/elastic/elastic-instancia1
./bin/elasticsearch -p pid -d

Assim que o Elasticsearch é inicializado, entra em ação o Security Autoconfiguration Information. Essa funcionalidade tem como objetivo configurar automaticamente as definições de segurança essenciais para proteger o cluster, especialmente em ambientes de produção. Foi introduzida para simplificar o processo de segurança, reduzindo a necessidade de configuração manual e contribuindo diretamente para a proteção dos dados.

2.2.17 Visão Geral - Security Autoconfiguration Information

Passo Coluna 2 Coluna 3 Coluna 4
01 # Enable security features xpack.security.enabled: true Habilitou a segurnça
02 # Capacity hability Token xpack.security.enrollment.enabled: true Habilitou a capacidade de Gerar Token
03 # Enable encryption for HTTP API cliente connectins, such as kibana, Logstash, and Agentes
xpack.security.http.ssl:
enabled: true
keystore.path: certs/http.p12
Habilitou o ssl para certificado p12
04 # Enable encryption and mutual authentication between cluster nodes xpack.security.transport.ssl
enabled:true
verificatin mode: certification
keystore.path: certs/transport.p12
truststore.path: certes/trasnsport.12
Habilitou a comunicação com os nós com certificado p12
05 # Create a new cluster with the current node only
# Additional nodes can still join the cluster later
cluster.initial master nodes: ["node1"] Inicializou com initialno cluster para node1
06 # Allow HTTP API connections from anywhere
# Connections are encryted and require user authentication

http.host: 0.0.0.0
Definição do http.host
07 # Allow other nodes to joing the cluster from anywhere
# Connections are encrypted and mutually authenticated
# transport.host: 0.0.0.0
# Não se aplica # Especificando camada de transporte.

Begin Secutity Auto Configuration
Veja como ficou o arquivo: elasticsearch.yml

image

Ao inicializar o Elasticsearch, a configuração automática de segurança (Security Auto Configuration) é realizada automaticamente. Como estamos configurando o Elasticsearch a partir do seu binário, as informações de configuração estarão disponíveis no arquivo elasticsearch.yml. As configurações de segurança são aplicadas automaticamente assim que o Elasticsearch é inicializado.

Para os pacotes .deb e .rpm, as informações de segurança estarão disponíveis sempre que o padrão de instalação e configuração desses pacotes for utilizado e serão apresentados na tela. Uma solução razoável para que você não perca dos dados do Security autoconfiguration information é salvar as informações em um arquivo txt, para que que você possa recuperá-lo sempre que necessário

--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : G9nWw7MUdcRpPTUM_so+

If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <token-here>'
after creating an enrollment token on your existing cluster.

You can complete the following actions at any time:

Reset the password of the elastic built-in superuser with
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.

Generate an enrollment token for Kibana instances with
 '/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.

Generate an enrollment token for Elasticsearch nodes with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.

image

2.2.18 Alterando a senha do usuário Elastic

Nesse ponto da configuração do Elasticsearch, utilizaremos as referências do Autoconfiguration Information, uma vez que a autenticação e autorização foram habilitadas no momento da inicialização. Ou seja, o TLS, assim como as camadas de transporte e HTTP, foram devidamente habilitados e configurados. São elas:

Passo Descrição Sintaxe do comando: Elasticsearch para binário ( bin )
01 Geração de senha para o superusuário integrado para o elastic Ex: G9nWw7MUdcRpPTUM_so+
Nota: senha gerada automaticamente no
momento da instalação
02 Reconfiguração do node em caso do mesmo já estar
vinculado ao cluster
./bin/elasticsearch-reconfigure-node -- enroolment-token
Nota: Senha gerada automaticamente no momento da inicialização do Elastic
03 Redefinição da senha de Superusuário interno ./bin/elasticsearch-reset-password -u elastic
04 Geração do token para instância do kibana ./bin/elasticsearch-create-enrollment-token -s kibana
05 Geração do token para os nó do Elasticsearch ./bin/elasticsearch-create-enrollment-token -s node

2.2.19 Alterando senha do Elasticsearch

Conforme já mencionamos, nossa primeira interação após a inicialização do Elasticsearch será a alteração da senha do Elastic. No exemplo abaixo estaremos executando o Passo 03

cd /opt/elastic/elastic-instancia1
./bin/elasticsearch-reset-password -u elastic -i 

This tool will reset the password of the [elastic] user. You will be prompted to enter the password. Please confirm that you would like to continue [y/N]y informe a senha: 123456

Resultado esperado:

image

Conforme você irá perceber o elasticsearch emitiu mensagem “user sucessfully reset” indicando que a senha foi devidamente alterada. O que já é um indicativo de que a instância está no ar e rodando normalmente. Mas podemos verificar se o elasticsearch subiu e/ou está rodando na porta padrão que é a porta 9200. Também podemos realizar um teste de comunicação com a porta.

$ ss - lntp

image

Também podemos verificar informações do node, na linha de comando digite:

curl –u elastic –X GET https://localhost:9200/ –k

Resultado esperado: { "name" : "node1",
"cluster_name" : "cluster-sobrenome",
"cluster_uuid" : "fayXPygARz-xgu0FQRJMUg",
"version" : {
"number" : "8.12.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "6185ba65d27469afabc9bc951cded6c17c21e3f3",
"build_date" : "2024-02-01T13:07:13.727175297Z",
"build_snapshot" : false,
"lucene_version" : "9.9.2",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}

Paranbéns ! Nossa primeira instância está no ar.

Momento Linux !

image

Talvez você sem lembre que nós fizemos o download do arquivo binário do Elasticsearch elasticsearch-8.12.1-linux-x86_64.tar.gz. Conforme estrutura abaixo:

image

Note que a instancia1 foi criada a partir do arquivo binário após ter sido descompactado, o mesmo foi renomeado com o propósito de identificar a instância de trabalho. Caso você tenha excluído o arquivo e/ou ainda não tenha executado o download você pode utilizar o seguinte comando:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.1-linux-x86_64.tar.gz

2.3 Instalando a Instância 2 do Elastisearch

A primeira atividade de configuração do nosso laboratório será a configuração da Instância 2, utilizando os mesmos critérios de configuração da instância, com uma única diferença. O processo será exatamente o mesmo considerando as questões de empacotamento, e pequenas particularidades. Também vamos gerar um novo token para que a instância 2 possa ingressar no cluster.

Para que o token possa ser gerado o pré-requisito é que a Instância 1 esteja no ar, ou seja, a instância 1 utilizada para a geração do token.

Você pode verificar através do comando:

- ss -lntp

image

Vamos gerar um novo token para que a instância 2 possa ingressar no cluster. Para isso, vamos gerar o token na instância 1 conforme comandos abaixo:

su - elastic
cd /opt/elastic/elastic-instancia1
./bin/elasticsearch-create-enrollment-token -s node

Resultado Experado: Token

Token gerado pela Instância 1 para a Instância 2
eyJ2ZXIiOiI4LjEyLjEiLCJhZHIiOlsiMTk0LjE2My4xNDcu
MTMyOjkyMDAiXSwiZmdyIjoiMTRjMTBkM2JiZDMwMDE5MDEzMWU4Y2U0N2U1M2IzZThiZDExNTg4ZWE0ZmFk
OTRiNjBkY2ViMjg0ODE0MmFiNyIsImtleSI6IklrMFlIcE1CeGhzRjA2dE91eWhzOmxwd2dCVDZYVHltQV9pX1VhZTZ5SFEifQ==

Importante: Guarde este token para ser utilizado na Instância 2. O token terá validade de 30 minutos, após este período será necessário gerar um outro token.

Momento Linux !

image

cd /opt/elastic
tar zxfv elasticsearch-8.12.1-linux-x86_64.tar.gz
mv elasticsearch-8.12.1 elastic-instancia2

Resultado esperado:

image

Vamos agora ajustar os seguintes parâmetros do arquivo elasticsearch.yml na instância 2. Para isso siga o modelo abaixo:

2.3.1 Configurando a Instância 2 do Elastisearch

Vamos agora ajustar os seguintes parâmetros do arquivo elasticsearch.yml na instância 2. Para isso siga o modelo abaixo:

2.3.2 Acessando o diretório elastic-instancia2

cd /opt/elastic/elastic-instancia2
vi config/elasticsearch.yml

O nome do cluster deve ser o mesmo nome que foi utilizado para a instancia1

image

cd /opt/elastic/elastic-instancia2
vi config/elasticsearch.yml

cluster.name: cluster-tornis node.name: node2 http.port: 9201 transport.port: 9301

Outro ajuste que deverá ser feito é a troca de portas

image

Como estaremos utilizando o mesmo IP, as portas necessitam ser alteradas evitando conflitos no momento da execução. Como você deve ter percebido também foi incluído o parâmetro de transport na porta 9301.

2.3.3 Configurando Heap da Instância 2 do Elastisearch

Crie o arquivo lab.options e adicione os valores de Xmx e Xms conforme exemplo abaixo:

cd /opt/elastic/elastic-instancia2
vi config/jvm.options.d/lab.options

Insira os dados

-Xms2g
-Xmx2g

Conforme já estudamos este parâmetro tem o objetivo de limitar o tamanho da instância.

Salve o arquivo e vamos iniciar a nossa instância 2.

2.3.4 Iniciando a Instância 2 do Elastisearch

Para iniciar a instancia2 será necessário utilizar o token gerado a partir da instância 1. Não esqueça, você deve estar dentro da instancia 2 para inicialização do segundo < nó >

cd /opt/elastic/elastic-instancia2
./bin/elasticsearch -p pid -d --enrollment-token <coloque o token aqui>

2.3.5 Instalando a Instância 3 do Elastisearch

Vamos gerar um novo token para que a instância 3 possa ingressar no cluster. Para isso, vamos gerar o token na instância 1 conforme comandos abaixo:

su - elastic
cd /opt/elastic/elastic-instancia1
./bin/elasticsearch-create-enrollment-token -s node

Resultado esperado:

Token gerado pela Instância 1 para a Instância 3
eyJ2ZXIiOiI4LjEyLjEiLCJhZHIiOlsiMTk0LjE2My4xNDcuMTMyOjkyMDAiXSwiZmdyIjoiMTRjMT
BkM2JiZDMwMDE5MDEzMWU4Y2U0N2U1M2IzZThiZDExNTg4ZWE0ZmFkOTRiNjBkY2ViMjg0ODE0MmFiNyIsImtleS
I6IkprMUpIcE1CeGhzRjA2dE9jU2pYOmJVRnpzRk5MU2FtSFVFM0FFc1o1UHcifQ==

Nota: Este token tem validade de 30 minutos

Salve o Token

cd /opt/elastic
tar zxfv elasticsearch-8.12.1-linux-x86_64.tar.gz
mv elasticsearch-8.12.1 elastic-instancia3

2.3.6 Configurando a Instância 3 do Elastisearch

Vamos agora ajustar os seguintes parâmetros do arquivo elasticsearch.yml na instância 3. Para isso siga o modelo abaixo:

cd /opt/elastic/elastic-instancia3
vi config/elasticsearch.yml

cluster.name: cluster-tornis node.name: node3 http.port: 9203 transport.port: 9303

image

Alterando as portas:

image

2.3.7 Configurando Heap da Instância 3 do Elastisearch

Crie o arquivo lab.options e adicione os valores de Xmx e Xms conforme exemplo abaixo:

cd /opt/elastic/elastic-instancia3
vi config/jvm.options.d/lab.options

Altere o arquivo

-Xms2g
-Xmx2g

Salve o arquivo e vamos iniciar a nossa instância 3.

2.3.8 Iniciando a Instância 3 do Elastisearch

cd /opt/elastic/elastic-instancia3
./bin/elasticsearch -p pid -d --enrollment-token <coloque o token aqui>

2.3.9 Verificando se todos os nodes estão ativos e funcionas

Em qualquer instancia execute o comando abaixo:

image

curl -X GET 'https://localhost:9200/_cat/nodes?v' -k -u elastic 

Deverá ser exibido 3 linhas contendo as informações das 3 instancias configuradas

Momento Linux ! image

Antes de darmos continuidade ao nosso laboratório. É necessário que tenhamos em mente que estamos trabalhando com uma rotina, que produz uma quantidade de informações consideráveis, neste contexto é importante que comecemos a nos familiarizar com os logs de sistema, pois eles nos ajudam a identificar cenários que, ora nos ajudam na solução de problemas, ora na continuidade da execução de atividades específicas.

Considerando nossa última atividade que que era levantar nossas três instâncias, vamos dar uma aprimorada na nossa visão como analista de dados.

Com o usuário elastic digite o comando abaixo:

Objetivo: Verificar se existem processos java que estão rodando

$ ps aux | grep java

Resultado esperado: Número do PID do processo java para a Instância 1

image

Resultado esperado: Número do PID do processo java para Instância 2

image

Resultado esperado: Número do PID do processo java para Instância 3

image

Momento linux:

image

Agora que estamos familiarizados com as atividades de instalação e configuração via linha de comando, vamos dar início a instalação do kibana. nosso diretório de trabalho será o diretório: /opt/elastic

image

Passo Sintaxe do comando Resultado esperado
01 su - elastic Acessando o usuário elastic
02 cd /opt/elastic Acessando o diretório opt/elastic
03 wget https://artifacts.elastic.co/downloads/kibana/kibana-8.12.1-linux-x86_64.tar.gz Download do kibana via linha de comando
04 tar zxfv kibana-8.12.1-linux-x86_64.tar.gz descompactando kibana no diretório opt
05 mv kibana-8.12.1-linux-x86_64.tar.gz Renomeando o arquivo do kibana
06 cd kibana Acessando o diretório do kibana

2.4 Instalando o Kibana

Passo:01

su - elastic 

Passo:02

cd /opt/elastic/

Passo:03

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.12.1-linux-x86_64.tar.gz 

Passo:04

tar zxfv kibana-8.12.1-linux-x86_64.tar.gz

Passo:05

mv kibana-8.12.1 kibana

Passo:06

cd kibana 

Já foi a referência para a extensão dos arquivos que estamos trabalhando, assim como no elastic o Kibana também trabalha com extensão "yml". O arquivo kibana.yml estará disponível dentro do config.

2.4.1 Configurando o Kibana

vi /opt/elastic/kibana/config/kibana.yml

server.host: "0.0.0.0"

Resultado esperado: 
Resultado esperado: 
![image](https://github.com/user-attachments/assets/af842a0d-5219-44f1-8983-381107d08a2c)

- Uma outra alteração que será realizada é na estrutura de System: Loggin: Estaremos alterando o nível de log de debug para info 
- E o diretório onde serão registrados os logs da aplicação 

## **2.4.2 Configurando o nível de log e sua saida
logging.root.level: info
logging.appenders.default:
  type: file
  fileName: logs/kibana.log
  layout:
    type: json

image

2.4.3 Gerando o token para configuração do Kibana

Vamos gerar um novo token para que a kibana possa conectar no cluster. Para isso, vamos gerar o token na instância 1 conforme comandos abaixo, não esqueça o kibana é uma aplicação client por isso a necessidade da geração do token.

Nossa configuração será realizada com base no token ! Muito parecido do que nós fazemos com a configuração do nó. O token vai informar para o kibana onde está o master, ou seja, o principal.

Passo Sintaxe do comando Resultado esperado
01 su - elastic Acessando o usuário elastic
02 cd /opt/elastic/elastic-instancia1 Acessando o diretório da instância 1
03 ./bin/elasticsearch-create-enrollment-token -s kibana Gerando o token do kibana a partir da instância 1

Passo:01

su - elastic     

Passo:02

 cd /opt/elastic/elastic-instancia1

Passo:03

 ./bin/elasticsearch-create-enrollment-token -s kibana

Momento Linux !

image

Você percebeu a única diferença na geração do token ? A diferença é que não estamos gerando o token para o << node >> mas sim para o kibana.

Resultado esperado:

Token gerado pela Instância 1 para o kibana
eyJ2ZXIiOiI4LjEyLjEiLCJhZHIiOlsiMTk0LjE2My4xNDcuMTMyOjkyMDAiXSwiZmdyIjoiMTRjMTBkM2
JiZDMwMDE5MDEzMWU4Y2U0N2U1M2IzZThiZDExNTg4ZWE0ZmFkOTRiNjBkY2ViMjg0ODE0MmFiNyIsImtle
SI6IktFMUdNWk1CeGhzRjA2dE8tQ2hvOmxuc25BZi11UTNpTXFtS0FCV19ob1EifQ==

Nota: Este token tem validade de 30 minutos

su - elastic
cd /opt/elastic/elastic-instancia1
./bin/elasticsearch-create-enrollment-token -s kibana

Guarde o token gerado pois iremos utiliza-lo em breve!

Agora você deve voltar para o diretório do kibana.

2.4.4 Iniciando o Kibana

su - elastic
cd /opt/elastic/kibana
./bin/kibana

Se tudo der certo ! Uffa.. Tenho certeza que dará certo. Seguiu todos os passos ... Então vai dar certo. O kibana vai emitir a seguinte mensagem:

image

Observação: No console o Kibana exibirá uma url. Abra seu navegador e acessa a url informada conforme exemplo abaixo:

2.4.5 Inserindo token no Kibana

A seguinte tela é exibida. Informe o token fornecido pelo elasticsearch para o ingresso do kibana conforme exemplo e depois clique no botão "Configure Elastic". Agora o Kibana solicita um token de validação para que a configuração possa iniciar. Esse token está na tela de start do Kibana

Observação: Algumas instalações podem solicitar um novo token pós fornecimento do token. Esse token de 6 caracteres está localizado no console quando vc iniciou o Kibana

2.4.6 Iniciando o Kibana em background

Inicializar o Elasticsearch em background significa iniciar o serviço do Elasticsearch como um processo que continua a ser executado no sistema, mesmo que você saia do terminal ou do ambiente onde ele foi iniciado. Isso é útil quando você deseja que o Elasticsearch funcione continuamente como um serviço, sem depender de sua interação direta para inicialização do serviço.

su - elastic
cd /opt/elastic/kibana
./bin/kibana &

2.4.7 Parando o Kibana

su - elastic
cd /opt/elastic/kibana
kill -9 $(ps aux | grep node | grep cli/dist | cut -d " " -f 4)
  1. Abra o arquivo config/kibana.yml no editor de sua preferência.

  2. Adicione ou atualize as seguintes configurações para apontar para os certificados que você acabou de criar:

    server.ssl.enabled: true
    server.ssl.certificate: /opt/elastic/kibana/config/kibana/kibana.crt
    server.ssl.key: /opt/elastic/kibana/config/kibana/kibana.key
  3. Salve e feche o arquivo kibana.yml.

2.4.8 Reiniciar o Kibana

Após ajustar a configuração, você precisa reiniciar o Kibana para aplicar as alterações.

  • Se você estiver usando um sistema baseado em systemd, pode usar o seguinte comando:
  cd /opt/elastic/kibana
  kill -9 $(ps aux | grep node | grep cli/dist | cut -d " " -f 5)
  ./bin/kibana &
  • Se você iniciou o Kibana manualmente, basta parar o processo atual e iniciá-lo novamente.

2.4.9 Verificar a Configuração

Após reiniciar o Kibana, acesse-o usando um navegador web e verifique se a conexão está segura, observando o ícone de cadeado na barra de endereço do navegador. Como os certificados são autoassinados, o navegador pode alertar sobre a segurança do certificado, mas você pode prosseguir para acessar o Kibana.

Esses passos garantem que a comunicação entre os usuários e o Kibana seja criptografada, aumentando a segurança do seu ambiente Elastic Stack.

2.4.10 Ferramentas de Linha de Comando do Elasticsearch

O Elasticsearch oferece várias ferramentas de linha de comando que auxiliam na gestão, manutenção e interação com o cluster. Aqui estão alguns dos principais scripts de linha de comando e suas respectivas funções:

Observação: Todos os scripts citados estão dentro de do diretório padrão do Elasticsearch em $ES_PATH/bin

2.4.11 Configurando Certificados no Kibana

Para configurar o Kibana com certificados autoassinados, você precisa gerar os certificados usando as ferramentas fornecidas pelo Elasticsearch e, em seguida, configurar o Kibana para usá-los. Abaixo está um guia passo a passo sobre como realizar esse processo.

**Pré-Requisitos Como root instalar o Unzip

   su - root 
   apt install unzip

2.4.12 Gerar Certificados Autoassinados

O Elasticsearch fornece uma ferramenta chamada elasticsearch-certutil para gerar certificados. Você usará esta ferramenta para criar um certificado autoassinado que será utilizado pelo Kibana.

a. Abra o terminal no servidor onde o Elasticsearch está instalado. b. Execute o seguinte comando para gerar uma chave de CA e seu certificado:

   su - elastic 
   bash
   cd /opt/elastic/elastic-instancia1
   ./bin/elasticsearch-certutil ca --days 365 --pem --out /opt/elastic/kibana/config/ca.zip
   cd /opt/elastic/kibana/config
   unzip ca.zip

Esse comando cria um arquivo (ca.zip) no diretório config/kibana/.

2.4.13 Gerar certificado do Kibana

   cd /opt/elastic/elastic-instancia1
   ./bin/elasticsearch-certutil cert --ca-key /opt/elastic/kibana/config/ca/ca.key --ca-cert /opt/elastic/kibana/config/ca/ca.crt --dns localhost --ip 127.0.0.1 --days 365 --pem --name kibana --out /opt/elastic/kibana/config/kibana.zip
 cd /opt/elastic/kibana/config
   unzip kibana.zip

Esse comando cria um arquivo (kibana.zip) no diretório config/kibana/.

Após gerar os certificados, você precisa configurar o Kibana para utilizá-los. Faça isso editando o arquivo de configuração kibana.yml.

a. elasticsearch

  • Descrição: Este é o comando principal para iniciar uma instância do Elasticsearch. Quando executado sem parâmetros, ele inicia o servidor Elasticsearch com a configuração padrão.
  • Função: Iniciar o servidor Elasticsearch.

b. elasticsearch-keystore

  • Descrição: Ferramenta utilizada para gerenciar o keystore do Elasticsearch, um arquivo seguro onde são armazenadas configurações sensíveis, como senhas.
  • Função: Adicionar, listar ou remover entradas no keystore.

c. elasticsearch-node

  • Descrição: Utilitário para gerenciar aspectos específicos de nós do Elasticsearch. Pode ser usado para tarefas como mudar a alocação de shards ou realizar operações de recuperação em nível de nó.
  • Função: Gerenciar operações em nível de nó no cluster Elasticsearch.

d. elasticsearch-plugin

  • Descrição: Comando usado para gerenciar plugins do Elasticsearch. Permite instalar, remover e listar plugins.
  • Função: Instalar, remover e listar plugins no Elasticsearch.

e. elasticsearch-setup-passwords

  • Descrição: Script utilizado para configurar senhas para usuários internos do Elasticsearch após a ativação do X-Pack security.
  • Função: Configurar senhas de usuários internos de forma interativa ou automática.

f. elasticsearch-shard

  • Descrição: Ferramenta de linha de comando para ajudar na recuperação de shards. Pode ser usada para reparar shards corrompidos ou para remover a alocação de um shard específico.
  • Função: Auxiliar na recuperação e reparo de shards.

g. elasticsearch-sql-cli

  • Descrição: Interface de linha de comando que permite a execução de consultas SQL no Elasticsearch, facilitando a interação com os dados de forma mais familiar para quem está acostumado com SQL.
  • Função: Executar consultas SQL no Elasticsearch.

h. elasticsearch-certutil

  • Descrição: Ferramenta para facilitar a criação e gestão de certificados SSL/TLS para o Elasticsearch, ajudando na configuração de comunicação segura entre os nós do cluster.
  • Função: Gerar e gerenciar certificados SSL/TLS para o cluster.

i. elasticsearch-migrate

  • Descrição: Utilitário para ajudar na migração de configurações entre diferentes versões do Elasticsearch, garantindo a compatibilidade e facilitando upgrades.
  • Função: Auxiliar na migração de configurações do Elasticsearch.

1. elasticsearch-reset-password

  • Descrição: Uma ferramenta introduzida em versões mais recentes do Elasticsearch que permite redefinir as senhas de usuários internos do Elasticsearch. É particularmente útil em situações onde a senha de um usuário é perdida ou precisa ser alterada por razões de segurança.
  • Função: Redefinir senhas de usuários internos de forma interativa ou automática, oferecendo um método direto para atualizar credenciais sem necessitar acessar o sistema de gerenciamento de usuários completo.

Essas ferramentas de linha de comando são essenciais para a administração e operação eficaz de clusters Elasticsearch, proporcionando uma variedade de funcionalidades para gerenciamento, segurança, manutenção e interação com os dados.

2.6 - API _CAT - Visualizando o Monitoramento e Saúde do Cluster

A API _CAT do Elasticsearch é uma API concisa voltada para a monitorização e obtenção de informações sobre o estado do cluster Elasticsearch de maneira legível para humanos. Ela fornece uma visão geral rápida do desempenho, saúde e estatísticas do cluster, facilitando a identificação de problemas e o monitoramento do estado geral do sistema.

Aqui estão as funções da API _CAT do Elasticsearch apresentadas em formato de tabela, incluindo uma breve descrição e o exemplo de chamada para cada função:

Função Descrição Exemplo de Chamada
/_cat/health Fornece uma visão instantânea da saúde do cluster. GET /_cat/health?v
/_cat/nodes Exibe informações básicas sobre os nós do cluster. GET /_cat/nodes?v
/_cat/indices Lista todos os índices no cluster e fornece informações detalhadas sobre cada um. GET /_cat/indices?v
/_cat/shards Apresenta informações detalhadas sobre os shards de cada índice. GET /_cat/shards?v
/_cat/master Mostra informações sobre o nó mestre do cluster. GET /_cat/master?v
/_cat/allocation Fornece informações sobre a alocação de disco de cada nó. GET /_cat/allocation?v
/_cat/count Retorna uma contagem de documentos em um ou mais índices. GET /_cat/count/index_name?v
/_cat/recovery Exibe informações sobre o processo de recuperação de dados nos índices. GET /_cat/recovery?v
/_cat/aliases Lista todos os aliases de índice e para quais índices eles apontam. GET /_cat/aliases?v
/_cat/thread_pool Fornece detalhes sobre os thread pools em cada nó. GET /_cat/thread_pool?v

Cada uma dessas funções da API _CAT oferece uma maneira eficiente de monitorar e gerenciar o Elasticsearch, proporcionando insights rápidos sobre diversos aspectos do cluster.

Clone this wiki locally