適用対象: ✔️ Linux VM ✔️ フレキシブル スケール セット
この記事では、Elasticsearch、Logstash、Kibana を、Azure の Ubuntu VM にデプロイする方法について説明します。 実行中の Elastic Stack を表示するために、必要に応じて Kibana に接続し、サンプル ログ データを使用できます。
さらに、「Elastic on Azure 仮想マシンのデプロイ」モジュールでは、Elastic on Azure 仮想マシンのデプロイに関する詳細なガイド付きチュートリアルを行うことができます。
このチュートリアルで学習する内容は次のとおりです。
- Azure リソース グループで Ubuntu VM を作成する
- Elasticsearch、Logstash、Kibana を VM にインストールする
- Logstash を使用して Elasticsearch にサンプル データを送信する
- ポートを開き、Kibana コンソールでデータを操作する
このデプロイは、Elastic Stack での基本的な開発に適しています。 運用環境の推奨事項を含め、Elastic Stack の詳細については、Elastic のドキュメントと 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 を実行します。
- この記事では、Azure CLI のバージョン 2.0.4 以降が必要です。 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 を作成し、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 によって次の例のような情報が表示されます。 publicIpAddress をメモしておきます。 このアドレスは、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"
}
VM に SSH で接続する
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)
Elastic Stack をインストールする
このセクションでは、Elasticsearch 署名キーをインポートし、Elastic パッケージ リポジトリを含むように APT ソースの一覧を更新します。 その後、Elastic Stack コンポーネントに必要な 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 パイプラインです。
この VM から Elasticsearch にカーネル メッセージを転送するように Logstash を設定します。 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 アドレスを変更して、Web ブラウザーからアクセスできるようにします。
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
次のステップ
このチュートリアルでは、Elastic Stack を Azure の開発 VM にデプロイしました。 以下の方法を学習しました。
- Azure リソース グループで Ubuntu VM を作成する
- Elasticsearch、Logstash、Kibana を VM にインストールする
- Logstash から Elasticsearch にサンプル データを送信する
- ポートを開き、Kibana コンソールでデータを操作する