共用方式為


在 Azure VM 上安裝彈性堆疊 (ELK)

適用於:✔️ Linux 虛擬機 ✔️ 彈性規模設定

本文將逐步引導您如何在 Azure 中的 Ubuntu VM 上部署 ElasticsearchLogstashKibana。 若要查看彈性堆疊的運作情形,您可以選擇性地連線到Kibana,並使用一些範例記錄數據。

此外,您可以遵循在 Azure 虛擬機上部署 Elastic模組,以取得在 Azure 虛擬機上部署 Elastic 的更具引導性的教學。

在本教學課程中,您將瞭解如何:

  • 在 Azure 資源群組中建立 Ubuntu VM
  • 在 VM 上安裝 Elasticsearch、Logstash 和 Kibana
  • 使用 Logstash 將範例數據傳送至 Elasticsearch
  • 打開端口,並在 Kibana 控制台中處理數據

此部署適用於使用彈性堆疊進行基本開發。 如需彈性堆疊的詳細資訊,包括生產環境的建議,請參閱 彈性檔和Azure 架構中心

先決條件

  • 本文需要 2.0.4 版或更新版本的 Azure CLI。 如果使用 Azure Cloud Shell,則已安裝最新版本。

建立資源群組

在本節中,會宣告環境變數以用於後續命令。 隨機後綴會附加至資源名稱,以取得唯一性。

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

結果:

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

建立虛擬機

本節會建立具有唯一名稱的 VM,如果 VM 不存在,也會產生 SSH 密鑰。 會附加隨機後綴以確保唯一性。

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

建立 VM 之後,Azure CLI 會顯示類似下列範例的資訊。 記下 public IP address。 此位址用來存取 VM。

結果:

{
  "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 連線到您的 VM

如果您還不知道 VM 的公用 IP 位址,請執行下列命令來列出它:

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

使用下列命令來建立與虛擬機器的 SSH 連線。 取代虛擬機的正確公用IP位址。 在此範例中,IP 位址為 40.68.254.142

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

安裝彈性堆疊

在本節中,您會匯入 Elasticsearch 簽署密鑰,並更新 APT 來源清單以包含 Elastic 套件存放庫。 接著,安裝彈性堆疊元件所需的 Java 執行時間環境。

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
"

在 VM 上安裝 Java 虛擬機,並設定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
"

執行下列命令來更新Ubuntu套件來源,並安裝Elasticsearch、Kibana和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
"

備註

Elastic 的文件中維護詳細的安裝指示,包括目錄配置和初始設定。

啟動 Elasticsearch

使用下列命令在您的 VM 上啟動 Elasticsearch:

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

此命令不會產生任何輸出,因此請使用下列 curl 命令確認 Elasticsearch 正在 VM 上執行:

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

如果 Elasticsearch 正在執行,您會看到如下的輸出:

結果:

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

啟動Logstash並將數據新增至 Elasticsearch

使用下列命令啟動 Logstash:

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

測試 Logstash 以確定其運作正常:

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

這是基本的 Logstash 管線,將標準輸入傳送到標準輸出。

設定 Logstash,將核心訊息從此 VM 轉送至 Elasticsearch。 若要建立 Logstash 組態檔,請執行下列命令,將組態寫入名為 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
"

測試此設定,並將 syslog 資料傳送至 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

您會看到終端機中的 syslog 記錄在傳送至 Elasticsearch 時顯示。 當您傳送某些數據之後,請使用 CTRL+C 結束 Logstash。

啟動 Kibana 並將 Elasticsearch 中的數據可視化

編輯 Kibana 設定檔 (/etc/kibana/kibana.yml),並變更 Kibana 接聽的 IP 位址,以便您可以從網頁瀏覽器存取它:

server.host: "0.0.0.0"

使用下列命令啟動 Kibana:

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

從 Azure CLI 開啟埠 5601,以允許遠端訪問 Kibana 控制台:

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

後續步驟

在本教學課程中,您已將彈性堆疊部署至 Azure 中的開發 VM。 您已學到如何做到以下幾點:

  • 在 Azure 資源群組中建立 Ubuntu VM
  • 在 VM 上安裝 Elasticsearch、Logstash 和 Kibana
  • 從 Logstash 將範例數據傳送至 Elasticsearch
  • 打開端口,並在 Kibana 控制台中處理數據