ETW ロギング・ドライバ¶
ETW ロギング・ドライバはコンテナのログを ETW イベントとして転送します。ETW は Windows におけるイベント・トレース(追跡)であり、Windows 上のアプリケーションをトレースする共通フレームワークです。各 ETW イベントにはログとコンテクスト情報の両方があります。クライアントは ETW リスナーを通して、これらのイベントを確認できます。
ETW はロギング・ドライバを {a3693192-9ed6-46d2-a981-f8226c8363bd}
のような GUID 識別子で Windows に登録します。クライアントは新しい ETW リスナーを作成し、ロギング・ドライバが送信するイベントを受信・登録できます。
使い方¶
ここでは大部分の Windows にインストール済みの logman ユーティリティ・プログラムを使い、これらのイベントのリッスン例を扱います。
logman start -ets DockerContainerLogs -p {a3693192-9ed6-46d2-a981-f8226c8363bd} 0 0 -o trace.etl
コンテナを etwlog ドライバと一緒に起動します。 docker run コマンドに
--log-driver=etwlogs
を追加します。logman stop -ets DockerContainerLogs
実行するとイベントを含む etl ファイルを作成します。人間が読める形式に変換する方法の1つが
tracerpt -y trace.etl
の実行です。
各 ETW イベントには、次の形式のように構造化されたメッセージを含みます。
container_name: %s, image_name: %s, container_id: %s, image_id: %s, source: [stdout | stderr], log: %s
各メッセージの詳細は以下の通りです。
フィールド |
説明 |
---|---|
|
開始のコンテナ名。 |
|
コンテナのイメージ名。 |
|
64文字のコンテナ ID。 |
|
コンテナ・イメージのフル ID。 |
|
|
|
コンテナのログ・メッセージ。 |
以下はイベント・メッセージの例です。
container_name: backstabbing_spence,
image_name: windowsservercore,
container_id: f14bb55aa862d7596b03a33251c1be7dbbec8056bbdead1da8ec5ecebbe29731,
image_id: sha256:2f9e19bd998d3565b4f345ac9aaf6e3fc555406239a4fb1b1ba879673713824b,
source: stdout,
log: Hello world!
クライアントはこのメッセージ文字列をログメッセージごとにパース可能です。また、コンテクスト情報も同様です。ETW イベント無いのタイムスタンプも利用可能です。
注釈
ETW プロバイダはメッセージ文字列のみ転送するだけであり、特別な ETW イベント構造ではありません。そのため、システムが ETW イベントの読み込み・受信のため、マニフェスト・ファイルを登録する必要がありません。
参考
- ETW logging driver