다음을 통해 공유


추적 데이터 액세스

.NET TraceProcessing은 NuGet에서 다음 패키지 ID로 사용할 수 있습니다.

Microsoft.Windows.EventTracing.Processing.All

이 패키지를 사용하면 추적 파일의 데이터에 액세스할 수 있습니다. 추적 파일이 아직 없으면 Windows Performance Recorder를 사용하여 만들 수 있습니다.

다음 예제 콘솔 앱은 추적에 포함된 모든 프로세스의 명령줄에 액세스하는 방법을 보여줍니다.

using Microsoft.Windows.EventTracing;
using Microsoft.Windows.EventTracing.Processes;
using System;

class Program
{
    static void Main(string[] args)
    {
        if (args.Length != 1)
        {
            Console.Error.WriteLine("Usage: <trace.etl>");
            return;
        }

        using (ITraceProcessor trace = TraceProcessor.Create(args[0]))
        {
            IPendingResult<IProcessDataSource> pendingProcessData = trace.UseProcesses();

            trace.Process();

            IProcessDataSource processData = pendingProcessData.Result;

            foreach (IProcess process in processData.Processes)
            {
                Console.WriteLine(process.CommandLine);
            }
        }
    }
}

TraceProcessor 사용

추적을 처리하려면 TraceProcessor.Create를 호출합니다. 핵심 인터페이스는 ITraceProcessor이며 이 인터페이스를 사용하는 경우 다음과 같은 패턴이 포함됩니다.

  1. 첫째, 추적에서 사용할 데이터를 프로세서에 알려줍니다.
  2. 둘째, 추적을 처리합니다. 그리고
  3. 마지막으로, 결과에 액세스합니다.

어떤 종류의 데이터를 원하는지 프로세서에 미리 알려주면 모든 종류의 추적 데이터를 대량으로 처리하는 데 많은 시간을 소비할 필요가 없습니다. 오히려 TraceProcessor는 요청한 특정 종류의 데이터를 제공하는 데 필요한 작업만 수행합니다.

TraceProcessor와 사용하면 좋은 몇 가지 프로젝트 설정이 있습니다.

  1. exe를 64비트로 실행하는 것이 좋습니다.

    새 C# .NET Framework 콘솔 애플리케이션의 Visual Studio 기본값은 32비트 선호가 선택된 모든 CPU입니다. .NET의 기본값에는 이미 권장 설정이 있을 수 있습니다.

    추적 처리에는 메모리가 많이 사용될 수 있으므로(특히 대량 추적의 경우) TraceProcessor를 사용하는 exe에서 플랫폼 대상을 x64로 변경(또는 32비트 선호를 선택 취소)하는 것이 좋습니다. 이러한 설정을 변경하려면 프로젝트의 속성에서 빌드 탭을 참조하세요. 모든 구성에 대해 이러한 설정을 변경하려면 구성 드롭다운이 현재 구성만의 기본값이 아닌 모든 구성으로 설정되어 있는지 확인합니다.

  2. 이전 packages.config 모드가 아닌 최신 스타일의 PackageReference 모드에서 NuGet을 사용하는 것이 좋습니다.

    새 프로젝트의 기본값을 변경하려면 도구, NuGet 패키지 관리자, 패키지 관리자 설정, 패키지 관리, 기본 패키지 관리 형식을 참조하세요.

기본 제공 데이터 원본

.etl 파일은 추적에서 많은 종류의 데이터를 캡처할 수 있습니다. .etl 파일에 있는 데이터는 추적이 캡처될 때 사용하도록 설정된 공급자에 따라 달라집니다. 다음 목록은 TraceProcessor에서 사용할 수 있는 추적 데이터의 종류를 보여줍니다.

코드 설명 관련 WPA 항목
trace.UseClassicEvents() 스키마 정보를 포함하지 않는 추적에서 클래식 ETW 이벤트를 제공합니다. 제네릭 이벤트 테이블(이벤트 유형이 Classic 또는 WPP인 경우)
trace.UseConnectedStandbyData() 연결된 대기 상태로 들어오고 나가는 시스템에 대한 추적의 데이터를 제공합니다. CS 요약 테이블
trace.UseCpuIdleStates() CPU C 상태에 대한 추적의 데이터를 제공합니다. CPU 유휴 상태 테이블(유형이 실제인 경우)
trace.UseCpuSamplingData() 명령 포인터의 주기적인 샘플링을 기반으로 CPU 사용량에 대한 추적의 데이터를 제공합니다. CPU 사용량(샘플링) 테이블
trace.UseCpuSchedulingData() 컨텍스트 전환 및 준비된 스레드 이벤트를 포함하여 CPU 스레드 스케줄링에 대한 추적의 데이터를 제공합니다. CPU 사용량(정확함) 테이블
trace.UseDevicePowerData() 디바이스 D 상태에 대한 추적의 데이터를 제공합니다. 디바이스 DState 테이블
trace.UseDirectXData() DirectX 활동에 대한 추적의 데이터를 제공합니다. GPU 사용률 테이블
traceUseDiskIOData() 디스크 I/O 활동에 대한 추적의 데이터를 제공합니다. 디스크 사용량 테이블
trace.UseEnergyEstimationData() 에너지 예측 엔진에서 예측된 프로세스별 에너지 사용량에 대한 추적의 데이터를 제공합니다. 에너지 예측 엔진 요약(프로세스별) 테이블
trace.UseEnergyMeterData() EMI(Energy Meter Interface)에서 측정된 에너지 사용량에 대한 추적의 데이터를 제공합니다. 에너지 예측 엔진(Emi 기반) 테이블
trace.UseFileIOData() 파일 I/O 활동에 대한 추적의 데이터를 제공합니다. 파일 I/O 테이블
trace.UseGenericEvents() 추적의 manifested 및 TraceLogging 이벤트를 제공합니다. 제네릭 이벤트 테이블(이벤트 유형이 Manifested 또는 TraceLogging인 경우)
trace.UseHandles() 활성 커널 핸들에 대한 추적의 부분 데이터를 제공합니다. 핸들 테이블
trace.UseHardFaults() 하드 페이지 폴트에 대한 추적의 데이터를 제공합니다. 하드 폴트 테이블
trace.UseHeapSnapshots() 프로세스 힙 사용에 대한 추적의 데이터를 제공합니다. 힙 스냅샷 테이블
trace.UseHypercalls() 추적 중에 발생한 Hyper-V hypercall에 대한 데이터를 제공합니다.
trace.UseImageSections() 이미지의 섹션에 대한 추적의 데이터를 제공합니다. CPU 사용량(샘플링) 테이블의 섹션 이름 열
trace.UseInterruptHandlingData() ISR(인터럽트 서비스 루틴) 및 DPC(지연된 프로시저 호출) 활동에 대한 추적의 데이터를 제공합니다. DPC/ISR 테이블
trace.UseMarks() 추적에서 표시(레이블 지정된 타임스탬프)를 제공합니다. 표시 테이블
trace.UseMemoryUtilizationData() 총 시스템 메모리 사용률에 대한 추적의 데이터를 제공합니다. 메모리 사용률 테이블
trace.UseMetadata() 추가 처리 없이 사용할 수 있는 추적 메타데이터를 제공합니다. 시스템 구성, 추적 및 일반
trace.UsePlatformIdleStates() 시스템의 대상 및 실제 플랫폼 유휴 상태에 대한 추적의 데이터를 제공합니다. 플랫폼 유휴 상태 테이블
trace.UsePoolAllocations() 커널 풀 메모리 사용량에 대한 추적의 데이터를 제공합니다. 풀 요약 테이블
trace.UsePowerConfigurationData() 시스템 전원 구성에 대한 추적의 데이터를 제공합니다. 시스템 구성, 전원 설정
trace.UsePowerDependencyCoordinatorData() 유효 전력 종속성 코디네이터 단계에 대한 추적의 데이터를 제공합니다. 알림 단계 요약 테이블
trace.UseProcesses() 추적 중 활성 프로세스는 물론 이미지와 PDB에 대한 데이터를 제공합니다. 프로세스 테이블; 이미지 테이블; 기호 허브
trace.UseProcessorCounters() PCM(프로세서 카운터 모니터)의 프로세서 성능 카운터 값에 대한 추적의 데이터를 제공합니다.
trace.UseProcessorFrequencyData() 프로세서가 실행된 빈도에 대한 추적의 데이터를 제공합니다. 프로세서 빈도 테이블(유형이 실제인 경우)
trace.UseProcessorProfileData() 활성 프로세서 전원 프로필에 대한 추적의 데이터를 제공합니다. 프로세서 프로필 테이블
trace.UseProcessorParkingData() 어떤 프로세서가 파킹 또는 파킹 해제되었는지에 대한 추적 데이터를 제공합니다. 프로세서 파킹 상태 테이블
trace.UseProcessorParkingLimits() 파킹 해제된 프로세서의 최대 허용 수에 대한 추적 데이터를 제공합니다. 코어 파킹 상한 상태 테이블
trace.UseProcessorQualityOfServiceData() 각 프로세서의 서비스 품질 수준에 대한 추적 데이터를 제공합니다. 프로세서 Qos 클래스 테이블
trace.UseProcessorThrottlingData() 프로세서 최대 빈도 제한에 대한 추적의 데이터를 제공합니다. 프로세서 제약 조건 테이블
trace.UseReadyBootData() 준비 부팅의 부팅 프리페칭 활동에 대한 추적의 데이터를 제공합니다. 준비 부팅 이벤트 테이블
trace.UseReferenceSetData() 각 프로세스에 사용되는 가상 메모리 페이지에 대한 추적의 데이터를 제공합니다. 참조 집합 테이블
trace.UseRegionsOfInterest() xml 구성 파일에 지정된 대로 추적에서 명명된 관심 영역 간격을 제공합니다. 관심 영역 테이블
trace.UseRegistryData() 추적하는 동안 레지스트리 활동에 대한 데이터를 제공합니다. 레지스트리 테이블
trace.UseResidentSetData() 실제 메모리에 상주했던 각 프로세스의 가상 메모리 페이지에 대한 추적의 데이터를 제공합니다. 상주 집합 테이블
trace.UseRundownData() 추적 런다운 데이터 수집이 발생한 간격에 대한 추적 데이터를 제공합니다. 그래프 타임라인의 음영 처리된 영역
trace.UseScheduledTasks() 추적 중에 실행된 예약된 작업에 대한 데이터를 제공합니다. 예약된 작업 테이블
trace.UseServices() 활성 상태이거나 추적 중에 상태가 캡처된 서비스에 대한 데이터를 제공합니다. 서비스 테이블; 시스템 구성, 서비스
trace.UseStacks() 추적 중에 기록된 스택에 대한 데이터를 제공합니다.
trace.UseStackEvents() 추적 중에 기록된 스택과 연결된 이벤트에 대한 데이터를 제공합니다. 스택 테이블
trace.UseStackTags() 추적의 스택을 XML 구성 파일에 지정된 대로 스택 태그로 그룹화하는 매퍼를 제공합니다. 스택 태그 및 스택(프레임 태그)과 같은 열
trace.UseSymbols() 추적에 대한 기호를 로드하는 기능을 제공합니다. 기호 경로 구성, 기호 로드
trace.UseSyscalls() 추적 중에 발생한 syscall에 대한 데이터를 제공합니다. Syscall 테이블
trace.UseSystemMetadata() 추적에서 시스템 차원의 일반 메타데이터를 제공합니다. 시스템 구성
trace.UseSystemPowerSourceData() 활성 시스템 전원(AC 및 DC)에 대한 추적의 데이터를 제공합니다. 시스템 전원 테이블
trace.UseSystemSleepData() 전체 시스템 전원 상태에 대한 추적의 데이터를 제공합니다. 전원 전환 테이블
trace.UseTargetCpuIdleStates() 대상 CPU C 상태에 대한 추적의 데이터를 제공합니다. CPU 유휴 상태 테이블(유형이 대상인 경우)
trace.UseTargetProcessorFrequencyData() 대상 프로세서 빈도에 대한 추적의 데이터를 제공합니다. 프로세서 빈도 테이블(유형이 대상인 경우)
trace.UseThreads() 추적 중 활성 스레드에 대한 데이터를 제공합니다. 스레드 수명 테이블
trace.UseTraceStatistics() 추적의 이벤트에 대한 통계를 제공합니다. 시스템 구성, 추적 통계
trace.UseUtcData() UTC(범용 원격 분석 클라이언트)를 사용하여 Microsoft 원격 분석 활동에 대한 추적의 데이터를 제공합니다. Utc 테이블
trace.UseWindowInFocus() 포커스가 있는 활성 UI 창의 변경 내용에 대한 추적의 데이터를 제공합니다. 포커스가 있는 창 테이블
trace.UseWindowsTracePreprocessorEvents() 추적에서 Windows 소프트웨어 추적 전처리기(WPP) 이벤트를 제공합니다. WPP 추적 테이블; 제네릭 이벤트 테이블(이벤트 유형이 WPP인 경우)
trace.UseWinINetData() WinINet(Windows Internet)을 통한 인터넷 활동에 대한 추적의 데이터를 제공합니다. 다운로드 세부 정보 테이블
trace.UseWorkingSetData() 각 프로세스 또는 커널 범주에 대한 작업 집합에 있던 가상 메모리의 페이지에 대한 추적의 데이터를 제공합니다. 가상 메모리 스냅샷 테이블

ITraceSource의 확장 메서드에서 사용 가능한 모든 추적 데이터를 참조하거나 IntelliSense에 표시된 “trace.”에서 사용 가능한 메서드를 확인하세요.

다음 단계

이 개요에서는 TraceProcessor 및 이것이 액세스할 수 있는 기본 제공 데이터 원본을 사용하여 추적 데이터에 액세스하는 방법을 알아보았습니다.

다음 단계에서는 TraceProcessor를 확장하여 사용자 지정 추적 데이터에 액세스하는 방법을 알아봅니다.