Azure Log Analytics 入門 — VMイベントログの収集とXMLデータの展開
この記事の内容
- Azure Log Analytics ワークスペースの概要と作成手順
- Azure VM・オンプレミスVMをエージェント経由で接続する方法
- Windowsイベントログやパフォーマンスデータの収集設定
- セキュリティイベントログの収集にはMicrosoft Defenderの設定が必要な点
- KQLクエリでEventDataフィールド内のXMLデータを展開・活用する方法
Azure Log Analytics とは
Azure Log Analyticsは、Azureが提供するログ収集・分析サービスです。AzureポータルではOMS(Operations Management Suite)とも表記されており、これはサービスが最初にリリースされた際の名称「Operations Management Suite」の略称です。
収集したデータは柔軟なクエリ言語(KQL)で検索・分析でき、Azureの各種サービスやオンプレミス環境のサーバーからも幅広くデータを収集できます。
ワークスペースの作成
AzureポータルからLog Analyticsワークスペースを作成するには、「リソースの作成」から「Log Analytics」または「ログ分析」で検索します。
設定項目は以下の通りです。
- リソースグループ: 任意のリソースグループを選択
- インスタンス名: ワークスペース名を入力
- 地域: 使用するリージョンを選択(例: Japan East)
- 価格レベル: 現在は従量課金制のシンプルなモデルに統一されており、データを多く保存するほどコストがかかる構造になっています
設定が完了したら「作成」を実行します。
VMの接続方法
Azure上のVMを接続する
作成したワークスペースのリソース画面から「仮想マシン」メニューを開くと、Azure上にデプロイされているVMが一覧表示されます。未接続のVMがあれば、この画面から簡単に接続操作を行えます。
オンプレミスのVMを接続する
オンプレミスのVMを接続する場合は、エージェントのインストールが必要です。
- ワークスペースの「エージェント管理」メニューを開く
- ワークスペースID と 主キー(プライマリキー) を控える
- エージェントのインストーラーをダウンロードして実行する
インストール時の接続先設定では、「Azure Log Analyticsにエージェントを接続する」を選択し、控えたワークスペースIDとキーを入力します。Azureクラウドの種類は通常の商用環境であれば「Azure Commercial」を選択します。プロキシが必要な環境ではプロキシ設定も入力できます。
これによりエージェントがインストールされ、ワークスペースに紐付けられます。
データ収集の設定
接続後、何を収集するかを設定する必要があります。ワークスペースの「詳細設定」からデータソースの設定が可能です。
Windowsイベントログ
「データ」→「Windowsイベントログ」で収集するログチャネルを追加できます。
エラーのみ収集したい場合は、対象のログチャネルに対してエラーのみチェックを入れて保存します。
パフォーマンスカウンター
「データ」→「Windowsパフォーマンスカウンター」から、よく使われるカウンターをまとめて追加できます。Linux環境にも対応しており、IISのログやテキストファイル、Syslogなど多様なデータソースに対応しています。
セキュリティイベントログの注意点
セキュリティイベントログ(Securityチャネル)は、詳細設定の画面から直接追加しようとすると「サポートされていません」と表示されます。セキュリティイベントログの収集には、Microsoft Defender for Cloud(旧 Azure Security Center) 側での設定が必要です。
設定手順は以下の通りです。
- Azureポータルで「Microsoft Defender for Cloud」を開く
- 「環境設定」からサブスクリプションまたはワークスペースを選択する
- Azure Defenderを有効化(有償プラン)する
- 「データ収集」の設定で「Windowsセキュリティイベント」の収集レベルを選択して保存する
これにより、セキュリティイベントログがLog Analyticsワークスペースに送信されるようになります。
KQLでデータをクエリする
データが収集されると、ワークスペースの「ログ」画面からKQL(Kusto Query Language)でクエリを実行できます。あらかじめ用意されているサンプルクエリも豊富にあり、用途に応じたものを参考にできます。
セキュリティイベントを確認する基本的なクエリ例は以下の通りです。
SecurityEvent
| take 100
EventData内のXMLデータを展開する
Windowsイベントログの中には、EventDataという1つのフィールドの中にXML形式で複数の値が格納されているものがあります。例えば、SubjectLogonId、SubjectUserNameといった情報が含まれていますが、このままでは各値をフィルタリングや集計に使いにくい状態です。
以下では、イベントID 4656(オブジェクトへのアクセス要求)を例として、EventDataを展開するクエリを紹介します。
SecurityEvent
| where EventID == 4656
| where EventSourceName == "Microsoft-Windows-Security-Auditing"
| extend EventData_Parsed = parse_xml(EventData)
| extend EventDataItems = EventData_Parsed.EventData.Data
| extend SubjectLogonId = tostring(EventDataItems[0]["#text"])
| extend SubjectUserName = tostring(EventDataItems[1]["#text"])
// 必要なフィールドを同様に追加
| where SubjectLogonId == "任意の値"
| summarize count() by SubjectUserName
処理の流れ
parse_xml()を使ってEventDataフィールドのXML文字列をパースするextendでXML内のEventData/Data配列を取り出す- 配列のインデックス(0番目、1番目…)を指定して各値を個別のフィールドに展開する
- 展開後のフィールドを使って
whereやsummarizeなどの通常のKQLクエリが適用可能になる
注意点として、EventDataの内容の構造(Data要素の順序・個数)はイベントIDごとに異なります。そのため、対象のイベントIDごとにインデックスと対応するフィールド名を個別に定義する必要があります。
まとめ
今回はAzure Log Analyticsの概要から、VMへのエージェントインストール、データ収集設定、そしてKQLを使ったEventData内XMLの展開方法までを紹介しました。
- Log Analyticsワークスペースは従量課金のシンプルな構成で利用開始できます
- オンプレミスVMもエージェントを使えば同じワークスペースに接続できます
- セキュリティイベントログの収集はMicrosoft Defender for Cloud側で設定が必要です
- EventData内のXMLはKQLの
parse_xml()でパースし、extendで個別フィールドに展開することで活用しやすくなります - EventDataの構造はイベントIDごとに異なるため、対象イベントIDに合わせた定義が必要です
Log Analyticsは仮想マシンのログ収集だけでなく、Azureの各種サービスからのデータ連携にも対応しており、クラウド全体のオブザーバビリティを高める上で非常に有用なサービスです。