Windows 7 のネットワーク トレース: アーキテクチャ

次の図は、Windows 7 の基本的なネットワーク トレース アーキテクチャを示しています。

ネットワーク トレース アーキテクチャの図

ネットワーク トレースでは、Windows で使用できる Event Tracing for Windows (ETW) フレームワークを利用します。 ネットワーク コンポーネント (Winsock、TCP/IP、NDIS、パケット キャプチャなど) は ETW トレース プロバイダーとして登録し、ネットワーク アクティビティに関連するイベントを出力します。 記録可能な有意性のアクティビティは、ETW にログに記録されるイベントにすることができます。 これらのネットワーク コンポーネントとパケット キャプチャのトレースは、ETW コントローラーとして機能する netsh トレース コンテキストを使用して有効にすることができます。

生成されたトレースは、イベント トレース ログ (ETL) ファイルに収集されます。 これらの ETL ファイルは、ネットワーク モニター 3.2 以降、イベント ビューアー、netsh トレース変換、Tracerpt.exeなど、さまざまなツールを使用して分析できます。

各 ETW イベントには共通のヘッダーがあり、ETW にはイベント プロパティ、タイム スタンプ、アクティビティ ID などの情報が格納されます。 (アクティビティ ID の詳細については、「 エンドツーエンド シナリオでの関連イベントの書き込み」を参照してください)。 アクティビティ ID は、イベントを関連付けるために使用されます。 ユーザー モードでは、アクティビティ ID はスレッドに格納され、1 つのスレッドに記録されたすべてのイベントに、同じアクティビティ ID で自動的にタグが付けられます。 カーネル モードでは、イベントがログに記録されるときにアクティビティ ID を明示的に渡す必要があります。 既定では、ETL ファイルは、特定のアクティビティ ID の下でイベントをグループ化するために関連付けされます。

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

ネットワーク トレースの ETW コンポーネント

ネットワーク トレースでは、ETW をプライマリ トレース メカニズムとして使用して、ネットワーク サブシステムの処理に関する情報を提供します。 ETW には、イベント トレース セッション、イベント プロバイダー、イベント コントローラー、イベント コンシューマーの 4 つのメイン コンポーネントがあります。

バッファリングとログ記録は、プロバイダーからの イベントを受け入れ、トレース ファイルを作成するイベント トレース セッションで行われます。

イベント プロバイダーは、ETW セッションにイベントを書き込む論理エンティティです。 イベント プロバイダーには、ユーザー モード アプリケーション、マネージド アプリケーション、ドライバー、またはその他のソフトウェア エンティティを指定できます。 イベント プロバイダーは ETW に登録し、ETW ログ API を呼び出してコード内のさまざまなポイントからイベントを書き込みます。 多くのオペレーティング システム コンポーネントでイベント インストルメンテーションが増加しているため、Windows の単純なアプリケーションやシナリオでも、イベント プロバイダーである複数のコンポーネントが含まれます。

イベント コントローラーは、イベント トレース セッションを開始および停止し、プロバイダーを有効にします。 イベント プロバイダーがイベント コントローラー アプリケーションによって動的に有効になっている場合、プロバイダーはイベント コントローラーによって指定された特定のイベント トレース セッションにイベントを送信します。 イベント プロバイダーによってイベント トレース セッションに送信される各イベントは、イベント メタデータとプロバイダーによってログに記録される追加のカスタム データを含む固定ヘッダーで構成されます。

イベント コンシューマーは、ログ ファイルを読み取るか、リアルタイム イベントのイベント トレース セッションをリッスンして処理するアプリケーションです。 イベント コンシューマーの 1 つの例として、Microsoft Network Monitor 3.2 があります。これには、Windows 7 のネットワーク トレースによって生成されたログ ファイルを読み取って表示する機能が含まれています。

イベントは時系列でイベント コンシューマーに配信され、イベントを特定の形式で表示するさまざまなイベント コンシューマー アプリケーションがあります。 イベントがセッションに記録されると、ETW はイベント ヘッダーに、タイムスタンプ、プロセスとスレッド ID、プロセッサ番号、ログ スレッドの CPU 使用率データなどの追加情報を追加します。 その後、このデータは、プロバイダーに含まれるカスタム データと共にイベント コンシューマーに渡されます。

新しい イベント ログ API を 使用するプロバイダーは、 イベント マニフェストと呼ばれる XML ファイルを提供する必要があります。 このファイルは、プロバイダーによって書き込まれたイベントのすべてのカスタム データとレイアウト情報を定義するためのメタデータを提供します。 その後、汎用コンシューマー アプリケーションでは 、トレース データ ヘルパー (TDH) API を使用してイベント メタデータを取得し、イベントをデコードして表示します。

Windows 7 のネットワーク トレースでは、イベント コントローラー/コンシューマー側には、全体的な Windows 診断およびサポート エクスペリエンスと統合されたエンド ツー エンドのシナリオ ベースのトレース サポートが含まれています。 シナリオでは、シナリオに関係するイベント プロバイダーのコレクションを定義します。 イベント コントローラー/コンシューマー側では、ネットワーク コンポーネント全体の特定のシナリオに関連するプロバイダーを含め、トレースを使用できるシナリオ (コンテキスト) を定義します。 イベント プロバイダー側には、ネットワーク スタック内のさまざまなコンポーネントからの標準化されたネットワーク トレース イベントが含まれており、ETW アクティビティ ID を介して関連付けることができます。 プロバイダーは、キーワード、レベル、タスク、オペコードなどの ETW 概念の使用を標準化する一般的なネットワーク スキーマを使用します。 スキーマでは、エラー イベント、パケット ドロップ イベント、スキーマ イベント、状態遷移イベントなど、多くのネットワーク コンポーネントに共通するイベントも定義されています。