Tutorial

Como Instalar e Configurar o Elasticsearch no Ubuntu 20.04

UbuntuElasticsearchUbuntu 20.04

Introdução

O Elasticsearch é uma plataforma para pesquisa e análise distribuídos de dados em tempo real. Ele é uma escolha popular devido a sua usabilidade, recursos poderosos e escalabilidade.

Este artigo o guiará pela instalação do Elasticsearch, configurando-o para seu caso de uso, protegendo sua instalação e começando a trabalhar com seu servidor Elasticsearch,

Pré-requisitos

Antes de iniciar este tutorial, você precisará de:

Para este tutorial, vamos trabalhar com a quantidade mínima necessária de CPU e RAM para executar o Elasticsearch. Observe que a quantidade de CPU, RAM e armazenamento que seu servidor Elasticsearch exigirá depende do volume de logs que você espera.

Passo 1 — Instalando e Configurando o Elasticsearch

Os componentes do Elasticsearch não estão disponíveis nos repositórios de pacotes padrão do Ubuntu. No entanto, eles podem ser instalados com o APT após adicionar a lista de origem de pacotes do Elastic.

Todos os pacotes são assinados com a chave de assinatura do Elasticsearch para proteger seu sistema de spoofing de pacotes. Os pacotes autenticados usando a chave serão considerados confiáveis pelo seu gerenciador de pacotes. Neste passo, você importará a chave GPG pública do Elasticsearch e adicionará a lista de origem de pacotes do Elastic para instalar o Elasticsearch.

Para começar utilize o cURL, a ferramenta de linha de comando para transferir dados com URLs, para importar a chave GPG pública do Elasticsearch para o APT. Observe que estamos usando os argumentos -fsSL para silenciar todo o progresso e possíveis erros (exceto para uma falha de servidor) e permitir que o cURL faça uma solicitação em um novo local se for redirecionado. Faça o pipe da saída do comando cURL no programa apt-key, que adiciona a chave pública GPG para o APT.

  • curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Em seguida, adicione a lista de origem do Elastic ao diretório sources.list.d, onde o APT irá procurar por novas origens:

  • echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

Em seguida, atualize suas listas de pacotes para que o APT leia a nova origem do Elastic:

  • sudo apt update

Em seguida, instale o Elasticsearch com este comando:

  • sudo apt install elasticsearch

Agora, o Elasticsearch está instalado e pronto para ser configurado.

Passo 2 — Configurando o Elasticsearch

Para configurar o Elasticsearch, vamos editar seu arquivo de configuração principal elasticsearch.yml onde a maior parte das suas opções de configuração estão armazenadas. Este arquivo está localizado no diretório /etc/elasticsearch

Use seu editor de texto preferido para editar o arquivo de configuração do Elasticsearch. Aqui, usaremos o nano:

  • sudo nano /etc/elasticsearch/elasticsearch.yml

Nota: o arquivo de configuração do Elasticsearch está no formato YAML, o que significa que precisamos manter o formato de indentação. Certifique-se de não adicionar nenhum espaço extra ao editar este arquivo.

O arquivo elasticsearch.yml fornece opções de configuração para seu cluster, node, paths, memória, rede, descoberta e gateway. A maioria destas opções estão pré-configuradas no arquivo, mas você pode alterá-las de acordo com suas necessidades. Para os fins de nossa demonstração de uma configuração de um único servidor, vamos ajustar apenas as configurações para o host de rede.

O Elasticsearch escuta o tráfego de todos os lugares na porta 9200. Você vai querer restringir o acesso externo à sua instância Elasticsearch para evitar que agentes externos leiam seus dados ou encerrem seu cluster Elasticsearch por meio da sua API REST. Para restringir o acesso e, portanto, aumentar a segurança, encontre a linha que especifica o network.host, descomente-a e substitua seu valor por localhost para que ela se pareça com isto:

/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .

Nós especificamos localhost para que o Elasticsearch escute em todas as interfaces e IPs ligados. Se você quiser que ele escute apenas em uma interface específica, você pode especificar o IP dela no lugar de localhost. Salve e feche o elasticsearch.yml. Se você estiver usando o nano, você pode fazer isso pressionando CTRL+X, seguido de Y e, depois, ENTER.

Essas são as configurações mínimas com as quais você começa para utilizar o Elasticsearch. Agora, inicie o Elasticsearch pela primeira vez.

Inicie o serviço Elasticsearch com o systemctl. Dê ao Elasticsearch alguns instantes para iniciar. Caso contrário, poderá haver erros quanto à indisponibilidade de conexão.

  • sudo systemctl start elasticsearch

Em seguida, execute o seguinte comando para habilitar o Elasticsearch para iniciar sempre que seu servidor inicializar:

  • sudo systemctl enable elasticsearch

Com o Elasticsearch habilitado após a inicialização, vamos prosseguir para o próximo passo para discutir a segurança.

Passo 3 — Protegendo o Elasticsearch

Por padrão, o Elasticsearch pode ser controlado por qualquer um que possa acessar a API HTTP. Este nem sempre é um risco de segurança, pois o Elasticsearch escuta apenas na interface loopback (ou seja, 127.0.0.1), que é acessada apenas localmente. Assim, nenhum acesso público é possível e, enquanto todos os usuários de servidor forem confiáveis, a segurança pode não ser uma preocupação importante.

Se você precisar permitir o acesso remoto à API HTTP, você pode limitar a exposição da rede com o firewall padrão do Ubuntu, o UFW. Este firewall já deve ser habilitado se você seguiu os passos no tutorial de Configuração Inicial de Servidor com o Ubuntu 20.04.

Agora, vamos configurar o firewall para permitir o acesso à porta padrão de API HTTP (TCP 9200) do Elasticsearch para o host remoto confiável, geralmente o servidor que você está usando em uma configuração de servidor único, como 198.51.100.0. Para permitir o acesso, digite o seguinte comando:

  • sudo ufw allow from 198.51.100.0 to any port 9200

Assim que terminar, você pode habilitar o UFW com o comando:

  • sudo ufw enable

Finalmente, verifique o status do UFW com o seguinte comando:

  • sudo ufw status

Se você especificou as regras corretamente, você deve receber um resultado como este:

Output
Status: active To Action From -- ------ ---- 9200 ALLOW 198.51.100.0 22 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6)

Agora, o UFW deve estar habilitado e configurado para proteger a porta 9200 do Elasticsearch.

Se você quiser investir em proteção adicional, o Elasticsearch oferece o plug-in comercial Shield para compra.

Passo 4 — Testando o Elasticsearch

No momento, o Elasticsearch deve estar em execução na porta 9200. Você pode testá-lo com o cURL e uma solicitação GET.

  • curl -X GET 'http://localhost:9200'

Você deverá receber a seguinte resposta:

Output
{ "name" : "elasticsearch-ubuntu20-04", "cluster_name" : "elasticsearch", "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }

Se você receber uma resposta parecida com a que está acima, o Elasticsearch está funcionando corretamente. Caso contrário, certifique-se de que você seguiu as instruções de instalação corretamente e aguardou algum tempo para que o Elasticsearch iniciasse totalmente.

Para executar uma verificação mais detalhada do Elasticsearch execute o seguinte comando:

  • curl -XGET 'http://localhost:9200/_nodes?pretty'

Na saída do comando acima, você pode verificar todas as configurações atuais para o node, cluster, paths de aplicação, módulos e mais.

Passo 5 — Usando o Elasticsearch

Para começar a utilizar o Elasticsearch, vamos primeiro adicionar alguns dados. O Elasticsearch utiliza uma API RESTful que responde aos comandos habituais CRUD: create, read, update, e delete. Para trabalhar com ele, utilizaremos o comando cURL novamente.

Você pode adicionar sua primeira entrada desta forma:

  • curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

Você deverá receber a seguinte resposta:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

Com o cURL, enviamos uma solicitação HTTP POST para o servidor Elasticsearch. A URI da solicitação foi / /tutorial/helloworld/1 helloworld/1 com vários parâmetros:

  • tutorial é o índice dos dados no Elasticsearch.
  • O helloworld é o tipo.
  • 1 é a ID de nossa entrada sob o índice e o tipo acima.

Você pode recuperar esta primeira entrada com uma solicitação HTTP GET.

  • curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

Esta deverá ser a saída resultante:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}

Para modificar uma entrada existente, utilize uma solicitação HTTP PUT.

  • curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d '
  • {
  • "message": "Hello, People!"
  • }'

O Elasticsearch deve reconhecer uma modificação bem-sucedida desta forma:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }

No exemplo acima, modificamos a mensagem da primeira entrada para “Hello, People!”. Com isso, o número da versão foi aumentado automaticamente para 2.

Você pode ter notado o argumento extra pretty na solicitação acima. Ele habilita o formato legível para que você possa escrever cada campo de dados em uma nova linha. Você também pode fazer um “prettify” em seus resultados ao recuperar dados para obter uma saída mais legível digitando o seguinte comando:

  • curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'

Agora, a resposta será formatada para um humano para processar:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_seq_no" : 1, "_primary_term" : 1, "found" : true, "_source" : { "message" : "Hello, People!" } } }

Agora, adicionamos e consultamos dados no Elasticsearch. Para aprender sobre as outras operações, verifique a documentação da API.

Conclusão

Agora você instalou, configurou, e começou a utilizar o Elasticsearch. Para explorar ainda mais as funcionalidades do Elasticsearch, consulte a documentação oficial do Elasticsearch.

Creative Commons License