Udostępnij za pośrednictwem


Zainstaluj Elastic Stack (ELK) na maszynie wirtualnej platformy Azure

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️

W tym artykule opisano sposób wdrażania usługi Elasticsearch, Logstash i Kibana na maszynie wirtualnej z systemem Ubuntu na platformie Azure. Aby zobaczyć, jak działa Elastic Stack, możesz połączyć się z Kibana i pracować z przykładowymi danymi dziennika.

Ponadto możesz skorzystać z modułu Deploy Elastic on Azure Virtual Machines (Wdrażanie Elastic na maszynach wirtualnych Azure), aby zapoznać się z bardziej szczegółowym przewodnikiem dotyczącym wdrażania Elastic na maszynach wirtualnych Azure.

Z tego samouczka dowiesz się, jak wykonywać następujące działania:

  • Tworzenie maszyny wirtualnej z systemem Ubuntu w grupie zasobów platformy Azure
  • Instalowanie narzędzi Elasticsearch, Logstash i Kibana na maszynie wirtualnej
  • Wysyłanie przykładowych danych do usługi Elasticsearch za pomocą usługi Logstash
  • Otwieranie portów i praca z danymi w konsoli Kibana

To wdrożenie jest odpowiednie do podstawowego rozwoju z użyciem Elastic Stack. Aby uzyskać więcej informacji na temat usługi Elastic Stack, w tym zaleceń dotyczących środowiska produkcyjnego, zobacz dokumentację elastic i centrum architektury platformy Azure.

Wymagania wstępne

  • Ten artykuł wymaga wersji 2.0.4 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.

Tworzenie grupy zasobów

W tej sekcji zmienne środowiskowe są deklarowane do użycia w kolejnych poleceniach. Sufiks losowy jest dołączany do nazw zasobów w celu uzyskania unikatowości.

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

Wyniki:

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

Tworzenie maszyny wirtualnej

Ta sekcja tworzy maszynę wirtualną o unikatowej nazwie, a jednocześnie generuje klucze SSH, jeśli jeszcze nie istnieją. Sufiks losowy jest dołączany w celu zapewnienia unikatowości.

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

Po utworzeniu maszyny wirtualnej interfejs wiersza polecenia platformy Azure wyświetla informacje podobne do poniższego przykładu. Zanotuj adres IP publiczny. Ten adres jest używany do uzyskiwania dostępu do maszyny wirtualnej (VM).

Wyniki:

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

Łączenie z maszyną wirtualną za pośrednictwem protokołu SSH

Jeśli nie znasz jeszcze publicznego adresu IP maszyny wirtualnej, uruchom następujące polecenie, aby je wyświetlić:

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

Użyj następującego polecenia, aby utworzyć sesję SSH z maszyną wirtualną. Zastąp prawidłowy publiczny adres IP maszyny wirtualnej. W tym przykładzie adres IP to 40.68.254.142.

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

Zainstaluj Elastic Stack

W tej sekcji zaimportujesz klucz podpisywania elasticsearch i zaktualizujesz listę źródeł APT, aby uwzględnić repozytorium pakietu Elastic. Następnie należy zainstalować środowisko uruchomieniowe Języka Java, które jest wymagane dla składników 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
"

Zainstaluj maszynę wirtualną Java na maszynie wirtualnej i skonfiguruj zmienną 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
"

Uruchom następujące polecenie, aby zaktualizować źródła pakietów systemu Ubuntu i zainstalować oprogramowanie Elasticsearch, Kibana i 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
"

Uwaga / Notatka

Szczegółowe instrukcje instalacji, w tym układy katalogów i konfiguracja początkowa, są przechowywane w dokumentacji elastic

Uruchom usługę Elasticsearch

Uruchom program Elasticsearch na maszynie wirtualnej za pomocą następującego polecenia:

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

To polecenie nie generuje żadnych danych wyjściowych, więc sprawdź, czy usługa Elasticsearch jest uruchomiona na maszynie wirtualnej za pomocą tego polecenia curl:

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

Jeśli usługa Elasticsearch jest uruchomiona, zobaczysz dane wyjściowe podobne do następujących:

Wyniki:

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

Uruchamianie usługi Logstash i dodawanie danych do usługi Elasticsearch

Uruchom usługę Logstash za pomocą następującego polecenia:

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

Przetestuj usługę Logstash, aby upewnić się, że działa poprawnie:

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

Jest to podstawowy potok usługi Logstash, który odzwierciedla standardowe dane wejściowe do standardowych danych wyjściowych.

Skonfiguruj usługę Logstash, aby przekazywać komunikaty jądra z tej maszyny wirtualnej do usługi Elasticsearch. Aby utworzyć plik konfiguracji usługi Logstash, uruchom następujące polecenie, które zapisuje konfigurację w nowym pliku o nazwie 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
"

Przetestuj tę konfigurację i wyślij dane dziennika syslog do usługi 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

Wpisy dziennika systemowego w terminalu są wyświetlane jako wysyłane do usługi Elasticsearch. Po wysłaniu niektórych danych użyj CTRL+C, aby wyjść z usługi Logstash.

Uruchamianie narzędzia Kibana i wizualizowanie danych w usłudze Elasticsearch

Edytuj plik konfiguracyjny Kibana (/etc/kibana/kibana.yml) i zmień adres IP, na którym Kibana nasłuchuje, aby można było uzyskać do niej dostęp z przeglądarki internetowej.

server.host: "0.0.0.0"

Uruchom aplikację Kibana za pomocą następującego polecenia:

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

Otwórz port 5601 z interfejsu wiersza polecenia platformy Azure, aby zezwolić na zdalny dostęp do konsoli Kibana:

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

Dalsze kroki

W tym samouczku wdrożyłeś Elastic Stack na maszynie wirtualnej przeznaczonej do rozwoju na platformie Azure. Nauczyłeś się, jak:

  • Tworzenie maszyny wirtualnej z systemem Ubuntu w grupie zasobów platformy Azure
  • Instalowanie narzędzi Elasticsearch, Logstash i Kibana na maszynie wirtualnej
  • Wysyłanie przykładowych danych do usługi Elasticsearch z usługi Logstash
  • Otwieranie portów i praca z danymi w konsoli Kibana