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,
Antes de iniciar este tutorial, você precisará de:
Um servidor Ubuntu 20.04, com 4GB de RAM e 2 CPUs configuradas com um usuário sudo não root. Você pode conseguir isso seguindo a Configuração Inicial de Servidor com o Ubuntu 20.04
O OpenJDK 11 instalado
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.
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.
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] (https://en.wikipedia.org/wiki/Representational_state_transfer). 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:
. . .
# ---------------------------------- 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.
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:
OutputStatus: 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.
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.
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.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.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!