이벤트 추적 정보

ETW(Windows용 이벤트 추적)는 커널 또는 애플리케이션 정의 이벤트를 로그 파일에 기록할 수 있는 효율적인 커널 수준 추적 기능입니다. 실시간으로 또는 로그 파일에서 이벤트를 사용하고 이를 사용하여 애플리케이션을 디버그하거나 애플리케이션에서 성능 문제가 발생하는 위치를 확인할 수 있습니다.

ETW를 사용하면 동적으로 이벤트 추적을 사용하거나 사용하지 않도록 설정하여 컴퓨터 또는 애플리케이션을 다시 시작하지 않고도 프로덕션 환경에서 자세한 추적을 수행할 수 있습니다.

이벤트 추적 API는 세 가지 개별 구성 요소로 나뉩니다.

다음 다이어그램은 이벤트 추적 모델을 보여줍니다.

이벤트 추적 모델

컨트롤러

컨트롤러는 로그 파일의 크기와 위치를 정의하고, 이벤트 추적 세션을 시작 및 중지하고, 공급자가 세션에 이벤트를 로그하고, 버퍼 풀의 크기를 관리하고, 세션에 대한 실행 통계를 가져올 수 있도록 하는 애플리케이션입니다. 세션 통계에는 사용된 버퍼 수, 전달된 버퍼 수, 손실된 이벤트 및 버퍼 수가 포함됩니다.

자세한 내용은 이벤트 추적 세션 제어를 참조하세요.

공급자

공급자는 이벤트 추적 계측을 포함하는 애플리케이션입니다. 공급자가 자체 등록한 후 컨트롤러는 공급자에서 이벤트 추적을 사용하거나 사용하지 않도록 설정할 수 있습니다. 공급자는 사용 또는 사용 안 함의 해석을 정의합니다. 일반적으로 사용 가능한 공급자는 이벤트를 생성하지만 비활성화된 공급자는 이벤트를 생성하지 않습니다. 이렇게 하면 항상 이벤트를 생성할 필요 없이 애플리케이션에 이벤트 추적을 추가할 수 있습니다.

ETW 모델은 컨트롤러와 공급자를 별도의 애플리케이션으로 구분하지만 애플리케이션에는 두 구성 요소가 모두 포함될 수 있습니다.

자세한 내용은 이벤트 제공을 참조하세요.

공급자 형식입니다.

MOF(클래식) 공급자, WPP 공급자, 매니페스트 기반 공급자 및 TraceLogging 공급자의 네 가지 기본 유형이 있습니다. 레거시 시스템을 지원할 필요가 없는 Windows Vista 이상용 애플리케이션을 작성하는 경우 매니페스트 기반 공급자 또는 TraceLogging 공급자를 사용해야 합니다.

MOF(클래식) 공급자:

  • RegisterTraceGuidsTraceEvent 함수를 사용하여 이벤트를 등록하고 작성합니다.
  • MOF 클래스를 사용하여 소비자가 이벤트를 사용하는 방법을 알 수 있도록 이벤트를 정의합니다.
  • 한 번에 하나의 추적 세션에서만 사용하도록 설정할 수 있습니다.

WPP 공급자:

  • RegisterTraceGuidsTraceEvent 함수를 사용하여 이벤트를 등록하고 작성합니다.
  • 소스 코드에서 전처리기의 WPP 계측 검색에서 유추된 디코딩 정보를 포함하는 연결된 TMF 파일(이진 파일의 .pdb로 컴파일됨)이 있어야 합니다.
  • 한 번에 하나의 추적 세션에서만 사용하도록 설정할 수 있습니다.

매니페스트 기반 공급자:

  • EventRegisterEventWrite를 사용하여 이벤트를 등록하고 작성합니다.
  • 매니페스트를 사용하여 소비자가 이벤트를 사용하는 방법을 알 수 있도록 이벤트를 정의합니다.
  • 최대 8개의 추적 세션을 동시에 사용하도록 설정할 수 있습니다.

TraceLogging 공급자:

  • TraceLoggingRegisterTraceLoggingWrite를 사용하여 이벤트를 등록하고 작성합니다.
  • 자체 설명 이벤트를 사용하여 이벤트 자체에 해당 이벤트를 사용하는 데 필요한 모든 정보를 포함할 수 있습니다.
  • 최대 8개의 추적 세션을 동시에 사용하도록 설정할 수 있습니다.

모든 이벤트 공급자는 기본적으로 API의 이벤트 추적 제품군을 사용합니다(레거시 기술의 경우 TraceEvent , 최신 기술에는 EventWrite/EventWriteEx ). 이벤트 공급자는 이벤트 페이로드에 저장하는 필드 유형과 연결된 이벤트 디코딩 정보를 저장하는 위치가 다릅니다.

소비자

소비자는 이벤트 원본으로 하나 이상의 이벤트 추적 세션을 선택하는 애플리케이션입니다. 소비자는 여러 이벤트 추적 세션에서 동시에 이벤트를 요청할 수 있습니다. 시스템은 이벤트를 시간순으로 전달합니다. 소비자는 로그 파일 또는 실시간으로 이벤트를 제공하는 세션에서 저장된 이벤트를 받을 수 있습니다. 이벤트를 처리할 때 소비자는 시작 및 종료 시간을 지정할 수 있으며 지정된 시간 프레임에서 발생하는 이벤트만 배달됩니다.

자세한 내용은 이벤트 소비를 참조하세요.

누락된 이벤트

Perfmon, 시스템 진단 및 기타 시스템 도구는 이벤트 로그에서 누락된 이벤트를 보고하고 ETW(Windows용 이벤트 추적)에 대한 설정이 최적이 아닐 수 있음을 나타낼 수 있습니다. 이벤트는 여러 가지 이유로 손실될 수 있습니다.

  • 총 이벤트 크기가 64K보다 큽니다. 여기에는 ETW 헤더와 데이터 또는 페이로드가 포함됩니다. 애플리케이션에서 이벤트 크기를 구성하므로 사용자는 이러한 누락된 이벤트를 제어할 수 없습니다.

  • ETW 버퍼 크기가 총 이벤트 크기보다 작습니다. 이벤트 크기는 이벤트를 로깅하는 애플리케이션에 의해 구성되므로 사용자는 이러한 누락된 이벤트를 제어할 수 없습니다.

  • 실시간 로깅의 경우 실시간 소비자는 이벤트를 충분히 빠르게 사용하지 않거나 전혀 존재하지 않으며 백업 파일이 채워집니다. 이벤트 로그 서비스가 중지되고 이벤트가 기록될 때 시작되는 경우 발생할 수 있습니다. 사용자는 이러한 누락된 이벤트를 제어할 수 없습니다.

  • 파일에 로깅할 때 디스크가 너무 느려서 로깅 속도를 따라갈 수 없습니다.

이러한 이유로 이벤트를 생성하는 애플리케이션 또는 서비스의 공급자에게 이러한 문제를 보고하세요. 이러한 문제는 애플리케이션 개발자 또는 서비스가 이벤트를 로깅하는 경우에만 해결할 수 있습니다. 이벤트 로그 서비스에서 누락된 이벤트가 보고되는 경우 이벤트 로그 서비스 구성에 문제가 있을 수 있습니다. 사용자는 이벤트 로그 서비스에서 사용할 최대 디스크 공간을 늘리는 기능이 제한되어 누락된 이벤트 수를 줄일 수 있습니다.