適用於:✔️ Linux 虛擬機 ✔️ 彈性規模設定
本文將逐步引導您如何在 Azure 中的 Ubuntu VM 上部署 Elasticsearch、 Logstash 和 Kibana。 若要查看彈性堆疊的運作情形,您可以選擇性地連線到Kibana,並使用一些範例記錄數據。
此外,您可以遵循在 Azure 虛擬機上部署 Elastic模組,以取得在 Azure 虛擬機上部署 Elastic 的更具引導性的教學。
在本教學課程中,您將瞭解如何:
- 在 Azure 資源群組中建立 Ubuntu VM
- 在 VM 上安裝 Elasticsearch、Logstash 和 Kibana
- 使用 Logstash 將範例數據傳送至 Elasticsearch
- 打開端口,並在 Kibana 控制台中處理數據
此部署適用於使用彈性堆疊進行基本開發。 如需彈性堆疊的詳細資訊,包括生產環境的建議,請參閱 彈性檔和Azure 架構中心。
先決條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱開始使用 Azure Cloud Shell。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 如果您正在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 若要完成驗證程式,請遵循終端機中顯示的步驟。 如需其他登入選項,請參閱 使用 Azure CLI 向 Azure 進行驗證。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能的詳細資訊,請參閱 使用和管理 Azure CLI 的擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 本文需要 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 控制台中處理數據