次の方法で共有


Elastic Stack (ELK) を Azure VM にインストールする

適用対象: ✔️ Linux VM ✔️ フレキシブル スケール セット

この記事では、ElasticsearchLogstashKibana を、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 コンソールでデータを操作する