Compartilhar via


Instalar o ELS (Elastic Stack) em uma VM do Azure

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis

Este artigo orienta como implantar Elasticsearch, Logstash e Kibana em uma VM Ubuntu no Azure. Para ver o Elastic Stack em ação, opcionalmente você pode se conectar ao Kibana e trabalhar com alguns dados de log de exemplo.

Além disso, você pode seguir o módulo Implantar o Elastic nas Máquinas Virtuais do Microsoft Azure para obter um tutorial mais guiado sobre como implantar o Elastic nas Máquinas Virtuais do Microsoft Azure.

Neste tutorial, você aprenderá a:

  • Crie uma VM do Ubuntu em um grupo de recursos do Azure
  • Instale Elasticsearch, Logstash e Kibana na VM
  • Envie dados de exemplo para Elasticsearch com Logstash
  • Abra as portas e trabalhe com os dados no console do Kibana

Essa implantação é adequada para desenvolvimento básico com Elastic Stack. Para saber mais sobre Elastic Stack, incluindo recomendações para um ambiente de produção, consulte a documentação do Elastic e o Azure Architecture Center.

Pré-requisitos

  • Este artigo exige a versão 2.0.4 ou posterior da CLI do Azure. Se você está usando o Azure Cloud Shell, a versão mais recente já está instalada.

Criar um grupo de recursos

Nesta seção, as variáveis de ambiente são declaradas para uso em comandos subsequentes. Um sufixo aleatório é acrescentado aos nomes de recursos para exclusividade.

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroup$RANDOM_SUFFIX"
export REGION="eastus2"
az group create --name $RESOURCE_GROUP --location $REGION

Resultados:

{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxxxxx",
  "location": "eastus",
  "managedBy": null,
  "name": "myResourceGroupxxxxxx",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Criar uma máquina virtual

Esta seção cria uma VM com um nome exclusivo, ao mesmo tempo em que gera chaves SSH se elas ainda não existem. Um sufixo aleatório é acrescentado para garantir a exclusividade.

export VM_NAME="myVM$RANDOM_SUFFIX"
az vm create \
    --resource-group $RESOURCE_GROUP \
    --name $VM_NAME \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys

Quando a VM tiver sido criada, a CLI do Azure mostra informações semelhantes ao exemplo a seguir. Anote o endereço IP público. Esse endereço é usado para acessar a VM.

Resultados:

{
  "fqdns": "",
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxxxxx/providers/Microsoft.Compute/virtualMachines/myVMxxxxxx",
  "location": "eastus",
  "macAddress": "xx:xx:xx:xx:xx:xx",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "x.x.x.x",
  "resourceGroup": "$RESOURCE_GROUP"
}

SSH em sua VM

Se você ainda não souber o endereço IP público da VM, execute o seguinte comando para listá-lo:

az network public-ip list --resource-group $RESOURCE_GROUP --query [].ipAddress

Use o seguinte comando para criar uma sessão SSH com a máquina virtual. Substitua o endereço IP público correto de sua máquina virtual. Neste exemplo, o endereço IP é 40.68.254.142.

export PUBLIC_IP_ADDRESS=$(az network public-ip list --resource-group $RESOURCE_GROUP --query [].ipAddress -o tsv)

Instalar o Elastic Stack

Nesta seção, você importará a chave de assinatura do Elasticsearch e atualizará sua lista de fontes do APT para incluir o repositório de pacotes Elastic. Isso é seguido pela instalação do ambiente de runtime do Java, que é necessário para os componentes do Elastic Stack.

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
"

Instale a Máquina Virtual Java na VM e configure a variável JAVA_HOME:

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo apt install -y openjdk-8-jre-headless
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
"

Execute o comando a seguir para atualizar as fontes do pacote do Ubuntu e instalar o Elasticsearch, o Kibana e o Logstash.

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
  wget -qO elasticsearch.gpg https://artifacts.elastic.co/GPG-KEY-elasticsearch
  sudo mv elasticsearch.gpg /etc/apt/trusted.gpg.d/

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

  sudo apt update
  
  # Now install the ELK stack
  sudo apt install -y elasticsearch kibana logstash
"

Observação

Instruções de instalação detalhadas, incluindo layouts de diretório e configuração inicial, são mantidas na documentação do Elastic

Iniciar Elasticsearch

Inicie o Elasticsearch na sua VM com o seguinte comando:

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start elasticsearch.service
"

Esse comando não produz nenhuma saída, portanto, verifique se o Elasticsearch está em execução na VM com este comando curl:

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sleep 11
sudo curl -XGET 'localhost:9200/'
"

Se Elasticsearch estiver em execução, você verá a saída semelhante ao seguinte:

Resultados:

{
  "name" : "w6Z4NwR",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "SDzCajBoSK2EkXmHvJVaDQ",
  "version" : {
    "number" : "5.6.3",
    "build_hash" : "1a2f265",
    "build_date" : "2017-10-06T20:33:39.012Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

Iniciar Logstash e adicionar dados ao Elasticsearch

Inicie o Logstash com o seguinte comando:

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start logstash.service
"

Teste o Logstash para verificar se ele está funcionando corretamente:

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
# Time-limited test with file input instead of stdin
sudo timeout 11s /usr/share/logstash/bin/logstash -e 'input { file { path => "/var/log/syslog" start_position => "end" sincedb_path => "/dev/null" stat_interval => "1 second" } } output { stdout { codec => json } }' || echo "Logstash test completed"
"

Este é um pipeline do Logstash básico que retorna a entrada padrão para a saída padrão.

Configure o Logstash para encaminhar mensagens de kernel dessa VM para Elasticsearch. Para criar o arquivo de configuração do Logstash, execute o seguinte comando que grava a configuração em um novo arquivo chamado vm-syslog-logstash.conf:

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
cat << 'EOF' > vm-syslog-logstash.conf
input {
    stdin {
        type => "stdin-type"
    }

    file {
        type => "syslog"
        path => [ "/var/log/*.log", "/var/log/*/*.log", "/var/log/messages", "/var/log/syslog" ]
        start_position => "beginning"
    }
}

output {

    stdout {
        codec => rubydebug
    }
    elasticsearch {
        hosts  => "localhost:9200"
    }
}
EOF
"

Teste esta configuração e envie os dados do syslog para Elasticsearch:

# Run Logstash with the configuration for 60 seconds
sudo timeout 60s /usr/share/logstash/bin/logstash -f vm-syslog-logstash.conf &
LOGSTASH_PID=$!

# Wait for data to be processed
echo "Processing logs for 60 seconds..."
sleep 65

# Verify data was sent to Elasticsearch with proper error handling
echo "Verifying data in Elasticsearch..."
ES_COUNT=$(sudo curl -s -XGET 'localhost:9200/_cat/count?v' | tail -n 1 | awk '{print $3}' 2>/dev/null || echo "0")

# Make sure ES_COUNT is a number or default to 0
if ! [[ "$ES_COUNT" =~ ^[0-9]+$ ]]; then
    ES_COUNT=0
    echo "Warning: Could not get valid document count from Elasticsearch"
fi

echo "Found $ES_COUNT documents in Elasticsearch"

if [ "$ES_COUNT" -gt 0 ]; then
    echo "✅ Logstash successfully sent data to Elasticsearch"
else
    echo "❌ No data found in Elasticsearch, there might be an issue with Logstash configuration"
fi

Você pode ver as entradas do syslog em seu terminal ecoadas conforme elas são enviadas para Elasticsearch. Use CTRL+C para sair do Logstash depois de enviar alguns dados.

Inicie o Kibana e visualize os dados no Elasticsearch

Edite o arquivo de configuração do Kibana (/etc/kibana/kibana.yml) e altere o endereço IP que o Kibana escuta para que você possa acessá-lo no navegador da Web:

server.host: "0.0.0.0"

Inicie o Kibana com o seguinte comando:

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start kibana.service
"

Abra porta 5601 da CLI do Azure para permitir o acesso remoto ao console Kibana:

az vm open-port --port 5601 --resource-group $RESOURCE_GROUP --name $VM_NAME

Próximas etapas

Neste tutorial, você implantou o Elastic Stack em uma VM de desenvolvimento no Azure. Você aprendeu a:

  • Crie uma VM do Ubuntu em um grupo de recursos do Azure
  • Instale Elasticsearch, Logstash e Kibana na VM
  • Enviar dados de exemplo para Elasticsearch do Logstash
  • Abra as portas e trabalhe com os dados no console do Kibana