Freigeben über


Installieren von Elastic Stack (ELK) auf einem virtuellen Azure-Computer

Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen

In diesem Artikel erfahren Sie, wie Sie Elasticsearch, Logstash und Kibana auf einem virtuellen Ubuntu-Computer in Azure bereitstellen. Wenn Sie den Elastic Stack in Aktion erleben möchten, können Sie optional eine Verbindung mit Kibana herstellen und mit einigen Beispielprotokolldaten arbeiten.

Darüber hinaus können Sie dem Modul Bereitstellen von Elastic auf Azure Virtual Machines folgen, um ein ausführlichere Tutorial zur Bereitstellung von Elastic auf Azure Virtual Machines zu erhalten.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen eines virtuellen Ubuntu-Computers in einer Azure-Ressourcengruppe
  • Installieren von Elasticsearch, Logstash und Kibana auf dem virtuellen Computer
  • Senden von Beispieldaten an Elasticsearch mithilfe von Logstash
  • Öffnen von Ports und Arbeiten mit Daten in der Kibana-Konsole

Diese Bereitstellung eignet sich für einfache Entwicklungsszenarien mit dem Elastic Stack. Weitere Informationen zum Elastic Stack (einschließlich Empfehlungen für eine Produktionsumgebung) finden Sie in der Elastic-Dokumentation sowie im Azure-Architekturcenter.

Voraussetzungen

  • Für diesen Artikel ist mindestens Version 2.0.4 der Azure CLI erforderlich. Bei Verwendung von Azure Cloud Shell ist die aktuelle Version bereits installiert.

Erstellen einer Ressourcengruppe

In diesem Abschnitt werden Umgebungsvariablen für die Verwendung in nachfolgenden Befehlen deklariert. Ein zufälliges Suffix wird zur Eindeutigkeit an Ressourcennamen angefügt.

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

Ergebnisse:

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

Erstellen eines virtuellen Computers

In diesem Abschnitt wird ein virtueller Computer mit einem eindeutigen Namen erstellt, während auch SSH-Schlüssel generiert werden, wenn sie noch nicht vorhanden sind. Ein zufälliges Suffix wird angefügt, um die Eindeutigkeit sicherzustellen.

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

Nach dem Erstellen der VM zeigt die Azure CLI ähnliche Informationen wie im folgenden Beispiel an. Notieren Sie sich die öffentliche IP-Adresse. Diese Adresse wird verwendet, um auf den virtuellen Computer zuzugreifen.

Ergebnisse:

{
  "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"
}

Herstellen einer SSH-Verbindung mit Ihrem virtuellen Computer

Wenn Sie die öffentliche IP-Adresse Ihres virtuellen Computers noch nicht kennen, führen Sie den folgenden Befehl aus, um ihn auflisten zu können:

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

Erstellen Sie mit dem folgenden Befehl eine SSH-Sitzung mit dem virtuellen Computer. Ersetzen Sie die korrekte öffentliche IP-Adresse Ihres virtuellen Computers. In diesem Beispiel lautet die IP-Adresse 40.68.254.142.

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

Einrichten des Elastic Stack

In diesem Abschnitt importieren Sie den Elasticsearch-Signaturschlüssel und aktualisieren Ihre APT-Quellenliste so, dass sie das Elastic-Paket-Repository enthält. Anschließend wird die Java-Laufzeitumgebung installiert, die für die Elastic Stack-Komponenten erforderlich ist.

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
"

Installieren Sie den virtuellen Java-Computer auf dem virtuellen Computer, und konfigurieren Sie die JAVA_HOME Variable:

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
"

Führen Sie den folgenden Befehl aus, um Ubuntu-Paketquellen zu aktualisieren und Elasticsearch, Kibana und Logstash zu installieren.

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
"

Hinweis

Eine ausführliche Installationsanleitung mit Verzeichnislayouts und Erstkonfiguration finden Sie in der Elastic-Dokumentation.

Starten von Elasticsearch

Führen Sie den folgenden Befehl aus, um Elasticsearch auf Ihrem virtuellen Computer zu starten:

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

Dieser Befehl erzeugt keine Ausgabe. Stellen Sie daher sicher, dass Elasticsearch auf dem virtuellen Computer mit diesem curl-Befehl ausgeführt wird:

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

Wenn Elasticsearch ausgeführt wird, erhalten Sie eine Ausgabe wie die folgende:

Ergebnisse:

{
  "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"
}

Starten von Logstash und Hinzufügen von Daten zu Elasticsearch

Führen Sie den folgenden Befehl aus, um Logstash zu starten:

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

Testen Sie Logstash, um sicherzustellen, dass sie ordnungsgemäß funktioniert:

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"
"

Hierbei handelt es sich um eine einfache Logstash-Pipeline, die Standardeingaben als Standardausgaben zurückgibt.

Richten Sie Logstash so ein, dass Kernelnachrichten von diesem virtuellen Computer an Elasticsearch weitergeleitet werden. Führen Sie zum Erstellen der Logstash-Konfigurationsdatei den folgenden Befehl aus, der die Konfiguration in eine neue Datei namens vm-syslog-logstash.conf schreibt:

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
"

Testen Sie diese Konfiguration, und senden Sie die Syslog-Daten an 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

Die Syslog-Einträge werden während der Übermittlung an Elasticsearch in Ihrem Terminal angezeigt. Verwenden Sie STRG+C, um logstash zu beenden, nachdem Sie einige Daten gesendet haben.

Starten von Kibana und Visualisieren der Daten in Elasticsearch

Bearbeiten Sie die Kibana-Konfigurationsdatei (/etc/kibana/kibana.yml), und ändern Sie die IP-Adresse, auf die Kibana lauscht, damit Sie über Ihren Webbrowser darauf zugreifen können:

server.host: "0.0.0.0"

Führen Sie den folgenden Befehl aus, um Kibana zu starten:

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

Öffnen Sie über die Azure-Befehlszeilenschnittstelle den Port 5601, um den Remotezugriff auf die Kibana-Konsole zu ermöglichen:

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

Nächste Schritte

In diesem Tutorial haben Sie den Elastic Stack für einen virtuellen Entwicklungscomputer in Azure bereitgestellt. Sie haben Folgendes gelernt:

  • Erstellen eines virtuellen Ubuntu-Computers in einer Azure-Ressourcengruppe
  • Installieren von Elasticsearch, Logstash und Kibana auf dem virtuellen Computer
  • Senden von Beispieldaten aus Logstash an Elasticsearch
  • Öffnen von Ports und Arbeiten mit Daten in der Kibana-Konsole