ETW 로깅 드라이버
ETW 로깅 드라이버 (ETW logging driver)
ETW(Event Tracing for Windows) 로깅 드라이버는 컨테이너 로그를 ETW 이벤트로 전달해요. ETW는 Windows의 이벤트 추적(Event Tracing in Windows)을 뜻하며, Windows에서 애플리케이션을 추적하는 공통 프레임워크예요. 각 ETW 이벤트는 로그와 그 컨텍스트 정보를 모두 담은 메시지를 포함해요. 클라이언트는 ETW 리스너를 만들어 이 이벤트를 들을 수 있어요.
이 로깅 드라이버가 Windows에 등록하는 ETW 공급자는 GUID 식별자 {a3693192-9ed6-46d2-a981-f8226c8363bd}를 가져요. 클라이언트는 ETW 리스너를 만들고 로깅 드라이버의 공급자의 이벤트를 듣도록 등록해요. 공급자와 리스너가 만들어지는 순서는 중요하지 않아요. 클라이언트는 공급자가 시스템에 등록되기 전에 ETW 리스너를 만들고 공급자의 이벤트를 듣기 시작할 수 있어요.
출처: 문서
본문
사용법 (Usage)
대부분의 Windows 설치에 포함된 logman 유틸리티 프로그램을 사용해 이 이벤트를 듣는 예시는 다음과 같아요:
logman start -ets DockerContainerLogs -p "{a3693192-9ed6-46d2-a981-f8226c8363bd}" 0x0 -o trace.etl- Docker run 명령에
--log-driver=etwlogs를 추가해 etwlogs 드라이버로 컨테이너를 실행하고 로그 메시지를 생성해요. logman stop -ets DockerContainerLogs- 이것은 이벤트를 담은 etl 파일을 생성해요. 이 파일을 읽기 가능한 형식으로 변환하는 한 가지 방법은
tracerpt -y trace.etl을 실행하는 거예요.
각 ETW 이벤트는 다음 형식의 구조화된 메시지 문자열을 포함해요:
container_name: %s, image_name: %s, container_id: %s, image_id: %s, source: [stdout | stderr], log: %s
메시지의 각 항목에 대한 세부 정보는 아래에서 찾을 수 있어요:
| Field | Description |
|---|---|
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 이벤트 안에서 사용할 수 있어요.
Note 이 ETW 공급자는 특별히 구조화된 ETW 이벤트가 아니라 메시지 문자열만 방출해요. 따라서 ETW 이벤트를 읽고 해석하기 위해 매니페스트 파일을 시스템에 등록할 필요가 없어요.