-
Notifications
You must be signed in to change notification settings - Fork 6
02 ‐ Instalação e Configuração do Elastic Stack
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.
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.
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.
- 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.
- 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.
- 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.
-
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.
- 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 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.
-
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.
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.
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.
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
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
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:
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.
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
cluster.name: cluster-sobrenome
node.name: node1
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.
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.
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.
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:
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.
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 initial no 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
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'.
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 |
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:
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
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 !
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:
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
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
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 !
cd /opt/elastic
tar zxfv elasticsearch-8.12.1-linux-x86_64.tar.gz
mv elasticsearch-8.12.1 elastic-instancia2
Resultado esperado:
Vamos agora ajustar os seguintes parâmetros do arquivo elasticsearch.yml na instância 2. Para isso siga o modelo abaixo:
Vamos agora ajustar os seguintes parâmetros do arquivo elasticsearch.yml na instância 2. Para isso siga o modelo abaixo:
cd /opt/elastic/elastic-instancia2
vi config/elasticsearch.yml
O nome do cluster deve ser o mesmo nome que foi utilizado para a instancia1
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
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.
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.
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>
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
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
Alterando as portas:
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.
cd /opt/elastic/elastic-instancia3
./bin/elasticsearch -p pid -d --enrollment-token <coloque o token aqui>
Em qualquer instancia execute o comando abaixo:
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 !
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
Resultado esperado: Número do PID do processo java para Instância 2
Resultado esperado: Número do PID do processo java para Instância 3
Momento linux:
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
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 |
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.
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
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 !
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.
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:
Observação: No console o Kibana exibirá uma url. Abra seu navegador e acessa a url informada conforme exemplo abaixo:
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
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 &
su - elastic
cd /opt/elastic/kibana
kill -9 $(ps aux | grep node | grep cli/dist | cut -d " " -f 4)
-
Abra o arquivo
config/kibana.yml
no editor de sua preferência. -
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
-
Salve e feche o arquivo
kibana.yml
.
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.
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.
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
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
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/
.
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
.
- 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.
- 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.
- 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.
- Descrição: Comando usado para gerenciar plugins do Elasticsearch. Permite instalar, remover e listar plugins.
- Função: Instalar, remover e listar plugins no Elasticsearch.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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.