WindowsServer

イベントログ全般タブにあるデータ(EventDate)を取得する方法 アクセスログからアカウント名とソースIPアドレスを抽出しよう

じんくろです

システムを運用する中でイベントログの確認、取得は必須事項であるとも言えます。 何か問題が起きたときや作業終了時の正常性確認など、確認するときは様々です。

確かにイベントログは解析するにあたり、非常に有力で多くの手がかり情報を書き記しておりますが、 反面、整理する際に苦労しているのも事実です。
入社したときはシステム運用・保守を担当しておりましたが、よく取得したログをExcelにまとめて 整理していましたね。。。

今回はログ取得をする中で、下記のようなイベントログの中身を取り出す方法を
本ページでご紹介いたします。

私自身、業務においてアクセスした際のアカウント名を取得する際に利用させていただきました。

まずイベントログですが、「表示」というタブを押すとXML形式で表示されます。


イベントログには <System>要素と<EventDate> 要素があります。 要素は、それぞれ独立した名前で Property として取得できます。

例ではセキュリティログのID4624を持つイベントログに対し、 要素の「version」「Keywords」の値をPropertyで指定して 取得しています。

なお、下記オプションをつけて今回の記事掲載用に見やすくしております。 必要に応じて適宜修正していただけたらと思います。

  • -MaxEvents: 取得するイベントログ数を指定
  • -wrap:    出力文字の折り返し表示
  • |ft:      Format-Table (フォーマットテーブル)表形式で表示
  • -autosize:  出力する文字列の幅を自動整理
Get-WinEvent -FilterHashtable @{LogName="Security"; ID=4624} -MaxEvents 5 | Select-Object -Property version,Keywords |ft -wrap -autosize

<System>要素はPropetyで取得したい値を指定すれば取得できることを確認しました。

では、次に  <EventDate>要素ですが、<System>要素と同じ手順では取得ができないため、配列を使って分解する必要があります。

今回取得したい情報はアカウント名とソースIPアドレス情報なので指定する値は
「targetUserName」と「IpAddress」になります。

つまり、”$_.properties[5].value”、”$_.properties[18].value”をコマンドに設定してやれば取得ができることになります。

Get-WinEvent -FilterHashtable @{LogName="Security"; ID=4624} -MaxEvents 15 | Select-Object -Property @{n="Accountname";expression={$_.properties[5].value}},@{n="IPAddress";expression={$_.properties[18].value}} |ft -wrap -autosize

いい感じに取れていますね。イベントログID:4624はログオン時のログなのでこのコマンドを用いれば、どのアカウントがどのIPアドレスでログインしたかがわかるというわけです。

ただし、ログの保管期間によって変動はしますが、本コマンドでログ取得する際、多少サーバーに負荷がかかるようです。

すでに実稼働しているサーバーの場合は注意してコマンドを実行するように
してください。まずは「 -MaxEvents 」で取得するイベントログ数を指定して
負荷状況も様子見していただけるといいかもしれませんね!

それではまた。

-WindowsServer