VM Insightsを利用してWindowsのイベントログをLog Analyticsに収集、検索

Azure,Log Analytics,Monitor,Others,Virtual Machines,Windows

Windows ServerのイベントログをLog Analyticsワークスペース(Azure Monitor Logs)で収集するための設定手順です。

Windows Server上のイベントログをAzureのLog Analyticsワークスペースに送信して収集する方法および、収集したイベントログをLog Analytics上でKQL(Kusto Query Language)クエリ検索する手順を確認しています。

    • 分析情報(VM insights)の有効化
    • データ収集ルール(DCR)の作成
    • イベントログ収集用のデータ収集ルールを作成
    • データ収集ルールにリソースを追加
    • 対象リソース(仮想マシン)をデータ収集ルールに関連付け
    • Log Analyticsで収集したイベントログをKQLで検索
    • parse_xml()関数などを利用し、イベントログの内容を取得

※本記事内では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。
※Windows Server 2022 Datacenter Azure Editionを利用しています。
※利用したリソース名は、log-test-01(Log Analyticsワークスペース)とtest-vm-01、02(仮想マシン)です。

スポンサーリンク

分析情報(VM insights)のデータ収集ルールを使ってイベントログをLog Analyticsワークスペースに収集

イベントログの収集設定については、Microsoft Learnに詳細な手順が記載されています。
参照しながら、手順を確認します。

Azure Monitor を使用して Azure 仮想マシンを監視する

分析情報(VM insights)を有効化

分析情報(VM insights)を有効化します。
ログ収集の設定自体はデータ収集ルール(Data Collection Rule: DCR)で行います。
どのデータ収集ルールを利用するかは、分析情報(VM insights)で指定します。
そのため、ログ収集を行うためには、事前に分析情報(VM insights)を有効化しておく必要があります。

分析情報(VM insights)の有効化手順については、こちらで紹介しています。

Windowsのイベントログを収集するデータ収集ルールを作成

イベントログを収集するためのデータ収集ルールを追加します。

データ収集ルールを作成する

※今回はエンドポイントは有効化していません。
※データ収集ルールの対象となる仮想マシンには拡張機能がインストールされるため、起動状態である必要があります。

データ収集ルールを追加
モニターの左側のメニューでデータ収集ルールを選択します。
作成を選択します。
データ収集ルール作成画面が表示されます。
ルール名、対象のプラットフォーム名などを選択します。
リソースのタブでは取得対象のリソースを設定します。
リソースの追加で対象の仮想マシンを選択します。
収集と配信のタブでは収集対象のデータソースを設定します。
データソースのタブでは収集対象のログを選択します。
ターゲットのタブではログ転送先のLog Analyticsワークスペースを選択します。
確認と作成に進みます。
確認画面です。
設定内容を確認後に作成を選択します。
しばらくするとターゲットに設定したLog Analyticsワークスペースにイベントログの収集が開始されます。

データ収集ルールで仮想マシンを追加

同じデータ収集ルールを複数の仮想マシンに適用できます。
イベントログの収集ルールを設定した場合は、AzureMonitorWindowsAgentの拡張機能のみがインストールされます。

データ収集ルールにリソースを追加
左側のメニューでリソースを選択します。
追加を選択します。
追加対象の仮想マシンを選択します。
追加したリソースには拡張機能がインストールされます。
システム割り当て済みのマネージドIDも有効化されます。

収集対象のログを制限

収集対象のログをXPathクエリを利用して制限することができます。

Windows イベント ビューアーから XPath クエリを抽出する

基本で設定したログ収集の設定は、XPathとして設定されています。

収集対象のログを制限
イベントログ収集の内容がXPathとして表示されています。
イベントIDが4624と4625の場合の収集設定です。
指定したイベントログの条件は、or条件として動作します。
既存の設定を削除した後、収集対象のXPathクエリを追加しています。

※XPathのクエリでは、and条件やor条件が利用できます。

—広告—

イベントログをLog Analyticsワークスペースで確認

リモートデスクトップ接続時のイベントログ

RDP(リモートデスクトップ)接続時のログを例に確認しています。
リモートデスクトップ接続時のイベントログについては、こちらで紹介しています。

KQLクエリを使ってイベントログを検索

イベントログは、Log AnalyticsワークスペースのEventテーブルに保管されます。

Windows イベント レコードのプロパティ

KQLクエリを使って検索
イベントID 4624のイベントログを検索します。
EventDataにXML形式でイベントログのデータが含まれていることが確認できます。

Event
| where EventID == 4624

parse_xml使ってEventDataをJSON形式に変換

EventDataはXML形式で1つの項目にデータが保管されています。

parse_xml()

parse_xml()を利用すると、値をJSON形式に変換し、要素ごとに分割することができます。
EventDataをparse_xml()で変換したデータをEventData_xmlとして定義します。

parse_xml()を使ってJSON形式に変換

Event
| where EventID == 4624
| extend EventData_xml = parse_xml(EventData)
| project TimeGenerated, EventData, EventData_xml

ventData_xmlを確認すると、要素ごとに分解されていることが確認できます。

イベントログの値を抽出

parse_xml()を利用してJSON形式に変換した値からデータを取得します。

parse_xml()(戻り値)

イベントログ(SecurityのイベントID 4624)のワークステーション名、ソースネットワークアドレス、ログオンタイプの値を取得します。
EventData_xml > DataItem > EventData > Dataの階層に値が含まれています。
今回は、Dataとして新しい列を定義したのちに各項目を取得します。

※検索条件にwhere EventLog contains “Security"を追加すると、セキュリティのイベントログのみに絞り込むことができます。
※2つ目のKQLでは、検索結果をログオンタイプ10のみに絞り込んでいます。

イベントログ内の値を取得

Event
| where EventID == 4624
| extend EventData_xml = parse_xml(EventData)
| extend Data = EventData_xml.DataItem.EventData.Data
| project TimeGenerated, Data

Data内の5番目にTargetUserName、8番目にLogonType、11番目にWorkstationName、18番目にIpAddressが含まれていることが確認できます。

Event
| where EventID == 4624
| extend EventData_xml = parse_xml(EventData)
| extend Data = EventData_xml.DataItem.EventData.Data
| extend LogonType = Data[8][“#text"]
| extend WorkstationName = Data[11][“#text"]
| extend IpAddress = Data[18][“#text"]
| where LogonType == 10
| project TimeGenerated, WorkstationName, IpAddress ,LogonType

各項目の値は#textに含まれています。
それぞれの項目を指定して値を取得することができました。

※新しく追加した列の名前をDataとなっていますが、無視してください。

Azure Monitorでイベントログを監視

Log Analyticsワークスペースに収集したイベントログは、Azure Monitorの監視設定に利用できます。
設定手順については、こちらで紹介しています。

—広告—

最後に

今回は、Windows ServerのイベントログをLog Analyticsワークスペース(Azure Monitor Logs)へ取り込んで検索する手順について角煮しました。
イベントログのデータ本文の項目取得には少し手間がかかりますが、各サーバーから取り込んだデータをKQLで一括して検索することができるので、非常に便利かと思います。

引き続き、いろいろ試してみたいと思います。

仮想マシンとLog Analyticsワークスペースの接続状況の確認方法については、こちらで紹介しています。
ログを利用する方法とメトリックを利用する方法、それぞれについて紹介しています。

 

スポンサーリンク