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 イベントの読み込み・受信のため、マニフェスト・ファイルを登録する必要がありません。