ETW ロギング・ドライバ

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

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

使い方

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

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

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

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

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

フィールド 説明
container_name 開始のコンテナ名。
image_name コンテナのイメージ名。
container_id 64文字のコンテナ ID。
image_id コンテナ・イメージのフル ID。
source stdout (標準出力)または 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 イベントの読み込み・受信のため、マニフェスト・ファイルを登録する必要がありません。