イベント トレースについて

Windows イベント トレーシング (ETW) は効率的なカーネル レベルのトレース機能です。これを使用すると、カーネルまたはアプリケーションで定義されたイベントをログ ファイルに記録できます。 リアルタイムまたはログ ファイルからイベントを使用し、それらを使用してアプリケーションをデバッグしたり、アプリケーションでパフォーマンスの問題が発生している場所を特定したりできます。

ETW を使用すると、イベント トレースを動的に有効または無効にできます。これにより、コンピューターやアプリケーションの再起動を必要とせずに、運用環境で詳細なトレースを実行できます。

イベント トレース API は、次の 3 つの異なるコンポーネントに分かれています。

  • イベント トレース セッションを開始および停止し、プロバイダーを有効にするコントローラー
  • イベントを提供するプロバイダー
  • イベントを使用するコンシューマー

次の図は、イベント トレース モデルを示しています。

イベント トレース モデル

Controllers

コントローラーは、ログ ファイルのサイズと場所を定義し、 イベント トレース セッションを開始および停止し、プロバイダーがセッションにイベントをログに記録し、バッファー プールのサイズを管理し、セッションの実行統計情報を取得できるようにするアプリケーションです。 セッション統計には、使用されるバッファーの数、配信されるバッファーの数、失われたイベントとバッファーの数が含まれます。

詳細については、「 イベント トレース セッションの制御」を参照してください。

プロバイダー

プロバイダーは、イベント トレース インストルメンテーションを含むアプリケーションです。 プロバイダー自体を登録した後、コントローラーはプロバイダーでイベント トレースを有効または無効にすることができます。 プロバイダーは、有効または無効の解釈を定義します。 一般に、有効なプロバイダーはイベントを生成しますが、無効なプロバイダーはイベントを生成しません。 これにより、イベントを常に生成することなく、アプリケーションにイベント トレースを追加できます。

ETW モデルはコントローラーとプロバイダーを別々のアプリケーションに分離しますが、アプリケーションには両方のコンポーネントを含めることができます。

詳細については、「 イベントの提供」を参照してください。

プロバイダーの種類

プロバイダーには、MOF (クラシック) プロバイダー、WPP プロバイダー、マニフェスト ベースのプロバイダー、トレース ログ プロバイダーの 4 種類のメインがあります。 レガシ システムをサポートする必要のない Windows Vista 以降のアプリケーションを作成する場合は、マニフェスト ベースのプロバイダーまたはトレース ログ プロバイダーを使用する必要があります。

MOF (クラシック) プロバイダー:

  • イベントを登録および書き込むには、 RegisterTraceGuids 関数と TraceEvent 関数を使用します。
  • MOF クラスを使用して、コンシューマーがイベントの使用方法を認識できるようにイベントを定義します。
  • 一度に有効にできるトレース セッションは 1 つだけです。

WPP プロバイダー:

  • イベントを登録および書き込むには、 RegisterTraceGuids 関数と TraceEvent 関数を使用します。
  • プリプロセッサによるソース コードでの WPP インストルメンテーションのスキャンから推論されたデコード情報を含む TMF ファイルを関連付けます (バイナリの .pdb にコンパイルされます)。
  • 一度に有効にできるトレース セッションは 1 つだけです。

マニフェスト ベースのプロバイダー:

  • EventRegisterEventWrite を使用して、イベントを登録および書き込みます。
  • マニフェストを使用して、コンシューマーがイベントの使用方法を認識できるようにイベントを定義します。
  • 最大 8 つのトレース セッションで同時に有効にすることができます。

トレース ログ プロバイダー:

  • イベントを登録および書き込むには、 TraceLoggingRegisterTraceLoggingWrite を使用します。
  • 自己記述型のイベントを使用して、イベント自体に、それらを使用するために必要なすべての情報が含まれるようにします。
  • 最大 8 つのトレース セッションで同時に有効にすることができます。

すべてのイベント プロバイダーは、基本的にイベント トレース ファミリの API を使用します (レガシ テクノロジの場合は TraceEvent 、新しいテクノロジの場合は EventWrite/EventWriteEx )。 イベント プロバイダーは、イベント ペイロードに格納するフィールドの種類と、関連するイベントデコード情報を格納する場所が異なります。

コンシューマー

コンシューマーは、イベントのソースとして 1 つ以上のイベント トレース セッションを選択するアプリケーションです。 コンシューマーは、複数のイベント トレース セッションから同時にイベントを要求できます。システムは、時系列順にイベントを配信します。 コンシューマーは、ログ ファイルに格納されているイベント、またはリアルタイムでイベントを配信するセッションからイベントを受信できます。 イベントを処理する場合、コンシューマーは開始時刻と終了時刻を指定でき、指定された期間に発生したイベントのみが配信されます。

詳細については、「 イベントの使用」を参照してください。

見つからないイベント

Perfmon、システム診断、およびその他のシステム ツールは、イベント ログに存在しないイベントを報告し、Windows イベント トレーシング (ETW) の設定が最適でない可能性があることを示します。 イベントは、さまざまな理由で失われる可能性があります。

  • イベントの合計サイズが 64,000 を超えています。 これには、ETW ヘッダーとデータまたはペイロードが含まれます。 イベント サイズはアプリケーションによって構成されているため、ユーザーはこれらの不足しているイベントを制御しません。

  • ETW バッファー サイズは、イベント の合計サイズよりも小さくなります。 イベント サイズはイベントをログに記録するアプリケーションによって構成されているため、ユーザーはこれらの不足しているイベントを制御しません。

  • リアルタイム ログ記録の場合、リアルタイム コンシューマーはイベントを十分に高速に消費していないか、完全に存在せず、バッキング ファイルがいっぱいになります。 これは、イベント ログ サービスが停止し、イベントのログ記録時に開始された場合に発生する可能性があります。 ユーザーは、これらの不足しているイベントを制御しません。

  • ファイルにログを記録する場合、ディスクの速度が遅すぎてログ記録速度に追いつけません。

これらの理由から、これらの問題は、イベントを生成しているアプリケーションまたはサービスのプロバイダーに報告してください。 これらの問題は、アプリケーション開発者またはサービスがイベントをログに記録することによってのみ修正できます。 不足しているイベントがイベント ログ サービスで報告されている場合は、イベント ログ サービスの構成に問題があることを示している可能性があります。 ユーザーは、イベント ログ サービスで使用される最大ディスク領域を増やす機能が制限されている場合があり、不足しているイベントの数が減る可能性があります。