Windows Serverのイベントログを収集してLog Analyticsで検索

Azure,Log Analytics,Windows

Windows ServerのイベントログをAzure Monitorログ(Log Analyticsワークスペース)で収集する設定手順です。
収集したイベントログをLog AnalyticsでKQLクエリ検索する手順も纏めています。

    • 分析情報(VM insights)有効化
    • データ収集ルールを作成してイベントログを収集
    • データ収集ルールにリソースを追加
    • Log Analyticsで収集したイベントログをKQL検索
    • parse_xml()を使ってイベントログの内容を取得

※仮想マシン(Azure VM)を利用しています。
※Windows Server 2022 Datacenter Azure Editionを利用しています。
※Log Analyticsワークスペースはlog-test-01、仮想マシン(Azure VM)はtest-vm-01、02のリソースを利用しています。

スポンサーリンク

データ収集ルールを使ってイベントログをAzure Monitorログで収集

イベントログの収集設定はMS Learnに記載があります。参照し設定を進めます。

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

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

分析情報の有効化(VM insights)はイベントログの収集には必要ありません。
今回はデータ収集ルール確認の一環として実施しています。

公式サイトの手順に沿って有効化します。
有効化対象の仮想マシン(Azure VM)には拡張機能がインストールされます。
仮想マシン(Azure VM)で起動状態である必要があります。

Azure portal で VM insights を有効にする

モニターの分析情報(VM insights)や仮想マシンの分析情報(VM insights)のメニューからも有効化する事が出来ます。
分析情報の有効化で収集されるデータはパフォーマンスやマップといった情報です。
ログの収集については別途設定が必要です。

分析情報を有効化
左側のメニューで分析情報を選択します。
有効を選択します。
監視の構成画面です。
データ収集ルールの新規作成を選択します。
新しいルールの作成画面です。
データ収集ルール名やLog Analytics workspacesを選択します。
作成を選択します。
監視を構成します。

※データ収集エンドポイントの設定やログ収集の設定項目はありませんでした。
※分析情報(VM insights)についてはこちらに纏めています

データ収集ルールを確認

分析情報(VM insights)を有効化するとデータ収集ルールも一緒にデプロイされます。

Azure Monitor のデータ収集ルール

データ収集ルール(Data collection rule)の設定は主にデータソースとリソースで構成されています。

    • データソース:取得間隔や収集対象のデータ
    • リソース:データ取得対象のリソース
データ収集ルール確認
モニターの左側のメニューでデータ収集ルールを選択します。
Log Analyticsワークスペースのエージェントからも確認出来ます。
データソースを選択するとパフォーマンスカウンターが設定されています。
パフォーマンスカウンターを選択すると取得対象のデータや取得間隔の設定が確認出来ます。
リソースを選択すると取得対象のリソースが確認出来ます。

仮想マシンに追加される拡張機能

分析情報を有効化すると仮想マシン(Azure VM)に拡張機能がインストールされます。

今回はマップ情報も有効化しているので2つの拡張機能がインストールされています。

拡張機能
拡張機能とアプリケーションのメニューで確認出来ます。
2つの拡張機能がインストールされています。

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

イベントログを収集する為にはデータ収集ルールを追加します。

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

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

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

リソースの追加

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

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

収集対象のログを制限

収集対象のログをXPathクエリを利用して制限する事が出来ます。

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

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

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

※XPathのクエリにはand条件やor条件も利用出来ます。

—広告—

イベントログをLog Analyticsで確認

ログイン(RDP接続時)時のイベントログ

RDP(リモートデスクトップ)接続時のログを例に確認しています。
こちらに纏めていますので併せて見て頂けると有難いです。

イベントログを確認

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

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

 
イベントID4624のイベントログを検索します。
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()を使う

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

EventData_xmlを確認すると要素ごとに分解されている事が確認出来ます。

イベントログの値を抽出

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

parse_xml()(戻り値)

イベントログ(SecurityのイベントID4624)のワークステーション名、ソースネットワークアドレス、ログオンタイプの値を取得してみます。
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のイベントログをAzure Monitorログ(Log Analyticsワークスペース)へ取り込んで検索する手順について纏めてみました。
イベントログのデータ本文の項目取得には少し手間がかかりますが、各サーバーから取り込んだデータKQLで一括して検索する事が出来るので非常に便利かと思います。

今後も色々試してみたいと思います。

RDP(リモートデスクトップ)接続元IPを例にイベントログについて纏めています。
併せて見て頂けると有難いです。

仮想マシン(Azure VM)の接続状況についてはこちらに纏めています。
ログを利用する方法、メトリックを利用する方法について纏めています。

スポンサーリンク