Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
Questo articolo illustra come distribuire Elasticsearch, Logstash e Kibana in una macchina virtuale Ubuntu in Azure. Per visualizzare Elastic Stack in azione, è possibile connettersi facoltativamente a Kibana e usare alcuni dati di registrazione di esempio.
È anche possibile seguire il modulo Deploy Elastic on Azure Virtual Machines per un'esercitazione più guidata sulla distribuzione di Elastic nelle macchine virtuali di Azure.
In questa esercitazione si apprenderà come:
- Creare una macchina virtuale Ubuntu in un gruppo di risorse di Azure
- Installare Elasticsearch, Logstash e Kibana nella macchina virtuale
- Inviare dati di esempio a Elasticsearch con Logstash
- Aprire le porte e usare i dati nella console kibana
Questa distribuzione è adatta per lo sviluppo di base con Elastic Stack. Per altre informazioni su Elastic Stack, incluse le raccomandazioni per un ambiente di produzione, vedere la documentazione elastica e il Centro architetture di Azure.
Prerequisiti
È possibile utilizzare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Introduzione ad Azure Cloud Shell.
Se preferisci eseguire localmente i comandi di riferimento della CLI, installa l'Azure CLI. Se si esegue in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se usi un'installazione locale, accedi all'interfaccia della riga di comando di Azure usando il comando az login. Per completare il processo di autenticazione, seguire i passaggi visualizzati nel terminale. Per altre opzioni di accesso, vedere Eseguire l'autenticazione ad Azure con l'interfaccia della riga di comando di Azure.
Quando ti viene richiesto, installa l'estensione Azure CLI al primo utilizzo. Per altre informazioni sulle estensioni, vedere Usare e gestire le estensioni con l'interfaccia della riga di comando di Azure.
Esegui az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, avviare az upgrade.
- Questo articolo richiede Azure CLI versione 2.0.4 o successiva. Se si usa Azure Cloud Shell, la versione più recente è già installata.
Creare un gruppo di risorse
In questa sezione le variabili di ambiente vengono dichiarate per l'uso nei comandi successivi. Un suffisso casuale viene aggiunto ai nomi delle risorse per l'univocità.
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroup$RANDOM_SUFFIX"
export REGION="eastus2"
az group create --name $RESOURCE_GROUP --location $REGION
Risultati:
{
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxxxxx",
"location": "eastus",
"managedBy": null,
"name": "myResourceGroupxxxxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Creare una macchina virtuale
Questa sezione crea una macchina virtuale con un nome univoco, generando anche chiavi SSH se non esistono già. Viene aggiunto un suffisso casuale per garantire l'univocità.
export VM_NAME="myVM$RANDOM_SUFFIX"
az vm create \
--resource-group $RESOURCE_GROUP \
--name $VM_NAME \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
Dopo aver creato la macchina virtuale, l'interfaccia della riga di comando di Azure mostra informazioni simili all'esempio seguente. Prendere nota dell'indirizzo IP pubblico. Questo indirizzo viene usato per accedere alla VM.
Risultati:
{
"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"
}
Usare SSH per connettersi alla macchina virtuale
Se non si conosce già l'indirizzo IP pubblico della macchina virtuale, eseguire il comando seguente per elencarlo:
az network public-ip list --resource-group $RESOURCE_GROUP --query [].ipAddress
Usare il comando seguente per creare una sessione SSH con la macchina virtuale. Sostituire l'indirizzo IP pubblico corretto della macchina virtuale. In questo esempio l'indirizzo IP è 40.68.254.142.
export PUBLIC_IP_ADDRESS=$(az network public-ip list --resource-group $RESOURCE_GROUP --query [].ipAddress -o tsv)
Installare Elastic Stack
In questa sezione si importa la chiave di firma di Elasticsearch e si aggiorna l'elenco delle origini APT per includere il repository di pacchetti di Elastic. Questo è seguito dall'installazione dell'ambiente runtime Java necessario per i componenti dell'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
"
Installare la macchina virtuale Java nella macchina virtuale e configurare la variabile 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
"
Eseguire il comando seguente per aggiornare le origini dei pacchetti Ubuntu e installare Elasticsearch, Kibana e 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
"
Annotazioni
Le istruzioni di installazione dettagliate, inclusi i layout di directory e la configurazione iniziale, vengono mantenute nella documentazione di Elastic
Avviare Elasticsearch
Avviare Elasticsearch nella macchina virtuale con il comando seguente:
ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start elasticsearch.service
"
Questo comando non produce alcun output, quindi verificare che Elasticsearch sia in esecuzione nella macchina virtuale con questo comando curl:
ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sleep 11
sudo curl -XGET 'localhost:9200/'
"
Se Elasticsearch è in esecuzione, viene visualizzato un output simile al seguente:
Risultati:
{
"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"
}
Avviare Logstash e aggiungere dati a Elasticsearch
Avviare Logstash con il comando seguente:
ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start logstash.service
"
Testare Logstash per assicurarsi che funzioni correttamente:
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"
"
Si tratta di una pipeline Logstash di base che invia l'input standard all'output standard.
Configurare Logstash per inoltrare i messaggi del kernel da questa macchina virtuale a Elasticsearch. Per creare il file di configurazione Logstash, eseguire il comando seguente che scrive la configurazione in un nuovo file denominato 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
"
Testare questa configurazione e inviare i dati syslog a 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
Nel tuo terminale, le voci syslog vengono visualizzate mentre vengono inviate a Elasticsearch. Usare CTRL+C per uscire da Logstash dopo aver inviato alcuni dati.
Avviare Kibana e visualizzare i dati in Elasticsearch
Modificare il file di configurazione di Kibana (/etc/kibana/kibana.yml) e cambiare l'indirizzo IP a cui Kibana è in ascolto, in modo da poter accedervi dal browser web.
server.host: "0.0.0.0"
Avviare Kibana con il comando seguente:
ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start kibana.service
"
Aprire la porta 5601 dall'interfaccia della riga di comando di Azure per consentire l'accesso remoto alla console Kibana:
az vm open-port --port 5601 --resource-group $RESOURCE_GROUP --name $VM_NAME
Passaggi successivi
In questa esercitazione è stato distribuito Elastic Stack in una macchina virtuale di sviluppo in Azure. Ecco cosa hai imparato a fare:
- Creare una macchina virtuale Ubuntu in un gruppo di risorse di Azure
- Installare Elasticsearch, Logstash e Kibana nella macchina virtuale
- Inviare dati di esempio a Elasticsearch da Logstash
- Aprire le porte e usare i dati nella console kibana