最近、Event Tracing for Windows (ETW) について調査しています。
で、今回から何回か続けて、ETW について書いて行きます。
ETW とは
ETW とは、アプリケーションやシステム(ドライバーなど)が、その動作上発生した何らかのイベントを、報告し、記録し、読み出し、処理するための仕組みです。
Windows 2000 で導入された後、Windows Vista で大きな更新が行われました。
このシリーズでは、より新しい、Vista 世代の ETW について採り上げていきます。
ETW は、アプリケーションのログを残すのにももちろん使えますが、OS やドライバーのログ、SQL Server のトレース ログ等にも利用されます。
また、Microsoft 製のネットワーク キャプチャ ソフトである Microsoft Message Analyzer なども、ETW の上に構築されています。
ということは、どういうネットワーク パケットが流れてきたかという情報を ETW に報告しているということです(Message Analyzer を使って ETW をモニタリングすることもできます)。
ETW の応用範囲の広さがわかると思います。
ETW と周辺技術
Windows には ETW 以外にも、いくつかのイベント処理技術があります。
MSDN では、Windows Events というカテゴリーにまとめられています。
簡単に、これらの技術について解説しましょう。
Event Tracing
タイトルに for Windows がついていませんが、これが ETW のことです。
今後詳しく採り上げていきますので、ここでは割愛します。
Event Logging
よく知られたイベント ログの仕組みです。
こちらのイベント ログは、Windows NT の頃から存在する古い仕組みです。
Windows Event Log
これもイベント ログに関する技術です。
Windows Vista から登場した新しいイベント ログの仕組みで、ETW をベースとしています。
Windows Event Collector
これは、あるコンピューターで発生したイベントを、別のコンピューターで読み取るための仕組みです。
HTTP (WinRM) 経由で通信を行い、複数のコンピューターのイベントを、一台のコンピューターで集中管理することができます。
これについては、この ETW 連載の最後に採り上げる予定です。
2 つのイベント ログ
前述の通り、Windows には新旧 2 つのイベント ログの仕組みがあります。
これらには、それぞれ異なる API が用意されています。
ここでは、代表的な API を比べてみましょう。
Event Logging(旧) | Windows Event Log(新) | |
---|---|---|
Win32 API | ReportEvent 関数 | EventWrite 関数 |
.NET Framework | EventLog クラス | EventSource クラス |
PowerShell | Get-EventLog コマンド | Get-WinEvent コマンド |
なお、Event Logging(旧イベント ログ)には、イベント ログを読み書きするための API が用意されていますが、Windows Event Log(新イベント ログ)の方には、書きこみ API は用意されていません。
新イベント ログにイベントを書きこむためには、ETW の API を利用します。