wevtutil でイベントログをフィルタリングするサンプル
イベントビューワーは重すぎてイライラするので、wevtutil でサクっとフィルタリングできないかなと思って調べてみた。
- 前提
- (1) 特定のイベントIDのみ
- (2) 特定のレベル(情報とかエラーとか)のみ
- (3) 比較演算子を使う(例:指定値以下のEventIDのみ)
- (4) OR 演算子を使う
- (5) 発生時刻で絞り込む
- 参考
- おわりに
前提
サンプル中で使ってる wevtutil のオプションは以下のとおり。
wevtutil qe System /c:1 /f:Text /rd:true qe ← イベントログからデータを取得する際に指定するオプション System ← Systemログから取ってくる /c:1 ← 取得件数。1なら1件 /f:Text ← 出力形式。デフォは XML で読み辛いので読みやすい Text に /rd:true ← 新しい日付のログを先に表示するオプション
(1) 特定のイベントIDのみ
$ wevtutil qe System /c:1 /f:Text /rd:true /q:*[System[(EventID=6006)]] Event[0]: ... Event ID: 6006 ... イベント ログ サービスが停止されました。
EventID を指定する。
(2) 特定のレベル(情報とかエラーとか)のみ
$ wevtutil qe System /c:1 /f:Text /rd:true /q:*[System[(Level=1)]] Event[0]: Level: 重大 $ wevtutil qe System /c:1 /f:Text /rd:true /q:*[System[(Level=2)]] Event[0]: Level: エラー $ wevtutil qe System /c:1 /f:Text /rd:true /q:*[System[(Level=3)]] Event[0]: Level: 警告 $ wevtutil qe System /c:1 /f:Text /rd:true /q:*[System[(Level=4)]] Event[0]: Level: 情報
Level1 が一番深刻なやつで、Level4 が一番軽いやつ。Level5 以上は無いみたい。
(3) 比較演算子を使う(例:指定値以下のEventIDのみ)
$ wevtutil qe System /c:5 /f:Text /rd:true "/q:*[System[(EventID<=15)]]" Event[0]: Event ID: 14 Event[1]: Event ID: 14 Event[2]: Event ID: 14 Event[3]: Event ID: 6 Event[4]: Event ID: 6
EventID が 15 以下のログを 5 件ほど取得。ここでは ID=14 と ID=6 の分がヒットしている。
(4) OR 演算子を使う
$ wevtutil qe System /c:2 /f:Text /rd:true "/q:*[System[(EventID=6006 or EventID=13)]]" Event[0]: Event ID: 13 Event[1]: Event ID: 6006
(5) 発生時刻で絞り込む
$ wevtutil qe System /f:Text /rd:true "/q:*[System[TimeCreated[@SystemTime>='2018-04-16T00:00:00' and @SystemTime<='2018-04-18T00:00:00']]]" Event[0]: Log Name: System Date: 2018-04-18T08:55:14.421 Event[1]: Date: 2018-04-18T08:55:10.659 ... Event[310]: Date: 2018-04-16T09:03:22.529 Event[311]: Date: 2018-04-16T09:01:22.581
18/04/16~18/04/18 の範囲でログを取っている……つもりだけど時刻部分( T00:00:00
)がちゃんと解釈されてないっぽい(2018-04-16T08:00:00 のログとかもあるのに表示されてない)。
どうやら GMTベースで指定する必要がある みたいだ。つまり JST の場合だと 9 時間を差っ引いた値で指定する必要がある、と。
(余談) 上記ブログ、他にもタメになることが書いてある。たとえばクエリを手探りで書くのは難しいからイベントビューアーの「現在のログをフィルター」を使って出力させてみるとわかりやすい、とか。
参考
- Event ID について知りたい
- Windows Security Log Encyclopedia
- Windows Events Keyword Search
- 公式のデータベースは存在しないみたい...
- フィルタ周りに仕様
- Consuming Events (Windows)
- 難解なので読むなら気合いが要る
- Wevtutil(特にフィルタ周り)の解説記事
おわりに
これくらいあればそこそこフィルタリングできるのではないかと思う。重たいイベントビューワーからおさらばできて快適。
p.s. 下手にフィルタの書き方で苦戦するくらいなら、
$ wevtutil qe System /f:Text /rd:true > system.txt
これでログ全部を system.txt に出してから、これをテキストエディタなり grep なりで調べる方が早いかもしれない。