ETW ロギング・ドライバ

ETW ロギング・ドライバはコンテナのログを ETW イベントとして転送します。ETW は Windows におけるイベント・トレース(追跡)であり、Windows 上のアプリケーションをトレースする共通フレームワークです。各 ETW イベントにはログとコンテクスト情報の両方があります。クライアントは ETW リスナーを通して、これらのイベントを確認できます。

ETW はロギング・ドライバを {a3693192-9ed6-46d2-a981-f8226c8363bd} のような GUID 識別子で Windows に登録します。クライアントは新しい ETW リスナーを作成し、ロギング・ドライバが送信するイベントを受信・登録できます。

使い方

ここでは大部分の Windows にインストール済みの logman ユーティリティ・プログラムを使い、これらのイベントのリッスン例を扱います。

  1. logmanstart-etsDockerContainerLogs-p{a3693192-9ed6-46d2-a981-f8226c8363bd}00-otrace.etl
  2. コンテナを etwlog ドライバと一緒に起動します。 docker run コマンドに --log-driver=etwlogs を追加します。
  3. logmanstop-etsDockerContainerLogs
  4. 実行するとイベントを含む etl ファイルを作成します。人間が読める形式に変換する方法の1つが tracerpt-ytrace.etl の実行です。

各 ETW イベントには、次の形式のように構造化されたメッセージを含みます。

container_name:%s,image_name:%s,container_id:%s,image_id:%s,source:[stdout|stderr],log:%s

各メッセージの詳細は以下の通りです。

フィールド説明
container_name開始のコンテナ名。
image_nameコンテナのイメージ名。
container_id64文字のコンテナ ID。
image_idコンテナ・イメージのフル ID。
sourcestdout (標準出力)または stderr (標準エラー出力)。
logコンテナのログ・メッセージ。

以下はイベント・メッセージの例です。

container_name: backstabbing_spence,
image_name: windowsservercore,
container_id: f14bb55aa862d7596b03a33251c1be7dbbec8056bbdead1da8ec5ecebbe29731,
image_id: sha256:2f9e19bd998d3565b4f345ac9aaf6e3fc555406239a4fb1b1ba879673713824b,
source: stdout,
log: Hello world!

クライアントはこのメッセージ文字列をログメッセージごとにパース可能です。また、コンテクスト情報も同様です。ETW イベント無いのタイムスタンプも利用可能です。

注釈

ETW プロバイダはメッセージ文字列のみ転送するだけであり、特別な ETW イベント構造ではありません。そのため、システムが ETW イベントの読み込み・受信のため、マニフェスト・ファイルを登録する必要がありません。