스냅샷 디버거를 사용하여 .NET 애플리케이션에서 예외 디버그
사용하도록 설정하면 스냅샷 디버거는 라이브 .NET 애플리케이션에서 예외가 발생할 때 소스 코드 및 변수의 디버그 스냅샷을 자동으로 수집합니다. Application Insights의 스냅샷 디버거:
- 웹앱에서 시스템 생성 로그를 모니터링합니다.
- 상위 throw 예외에 대한 스냅샷을 수집합니다.
- 프로덕션에서 문제를 진단하는 데 필요한 정보를 제공합니다.
스냅샷 디버거 및 스냅샷 업로더 프로세스에 대해 자세히 알아봅니다.
지원되는 애플리케이션 및 환경
이 섹션에서는 지원되는 애플리케이션 및 환경을 나열합니다.
애플리케이션
스냅샷 컬렉션을 다음에 사용할 수 있습니다.
- .NET Framework 4.6.2 및 최신 버전.
- Windows의 경우 .NET 6.0 이상.
환경
다음 환경이 지원됩니다.
- Azure App Service
- Azure Functions
- OS 제품군 4 이상을 실행하는 Azure Cloud Services
- Windows Server 2012 R2 이상에서 실행되는 Azure Service Fabric
- Windows Server 2012 R2 이상에서 실행되는 Azure Virtual Machines 및 Azure Virtual Machine Scale Sets
- Windows Server 2012 R2 이상 또는 Windows 8.1 이상을 실행하는 온-프레미스 가상 머신 또는 물리적 머신
참고 항목
클라이언트 응용 프로그램(예: WPF, Windows Forms 또는 UWP)은 지원되지 않습니다.
스냅샷 디버거를 사용하기 위한 필수 구성 요소
패키지 및 구성
- 애플리케이션에 Snapshot Collector NuGet 패키지를 포함합니다.
ApplicationInsights.config
에서 컬렉션 매개 변수를 구성합니다.
사용 권한
- 대상 Application Insights 스냅샷에 대한 Application Insights 스냅샷 디버거 역할에 추가되었는지 확인합니다.
스냅샷 디버거 작동 방식
스냅샷 디버거는 Application Insights 원격 분석 프로세서로 구현됩니다. 애플리케이션이 실행되면 스냅샷 디버거 원격 분석 프로세서가 애플리케이션의 시스템 생성 로그 파이프라인에 추가됩니다.
Important
스냅샷에는 변수 및 매개 변수 값의 개인 데이터 또는 기타 중요한 정보가 포함될 수 있습니다. 스냅샷 데이터는 Application Insights 리소스와 동일한 지역에 저장됩니다.
스냅샷 디버거 프로세스
스냅샷 디버거 프로세스는 TrackException
메서드로 시작하고 끝납니다. 프로세스 스냅샷은 실행 중인 프로세스의 일시 중단된 복제본이므로 사용자는 중단을 거의 경험하지 않습니다. 일반적인 시나리오에서는 다음을 수행합니다.
애플리케이션에서
TrackException
이 발생합니다.스냅샷 디버거는
AppDomain.CurrentDomain.FirstChanceException
이벤트를 구독하여 발생하는 예외를 모니터링합니다.문제 ID에 대한 카운터가 증가합니다.
- 카운터가
ThresholdForSnapshotting
값에 도달하면 문제 ID가 수집 계획에 추가됩니다.
참고 항목
ThresholdForSnapshotting
기본 최소값은 1입니다. 이 값을 사용하면 앱은 스냅샷이 생성되기 전에 동일한 예외를 두 번 트리거해야 합니다.- 카운터가
예외 이벤트의 문제 ID가 계산되어 수집 계획의 문제 ID와 비교됩니다.
문제 ID 간에 일치하는 항목이 있는 경우 실행 중인 프로세스의 스냅샷이 만들어집니다.
- 스냅샷에는 고유 식별자가 할당되고, 예외는 해당 식별자로 스탬프 처리됩니다.
참고 항목
스냅샷을 만드는 속도는
SnapshotsPerTenMinutesLimit
설정으로 제한됩니다. 기본적으로 10분마다 하나의 스냅샷으로 제한됩니다.FirstChanceException
처리기가 반환되면 throw된 예외가 정상으로 처리됩니다.예외는
TrackException
메서드에 다시 도달하고 스냅샷 식별자와 함께 Application Insights에 보고됩니다.
참고 항목
Visual Studio에서 디버그하는 동안 스냅샷을 생성하려면 IsEnabledInDeveloperMode
를 true
로 설정합니다.
스냅샷 업로더 프로세스
스냅샷 디버거 프로세스가 계속 실행되어 중단 없이 사용자에게 트래픽을 제공하는 동안 스냅샷은 스냅샷 업로더 프로세스로 전달됩니다. 일반적인 시나리오에서 스냅샷 업로더는 다음과 같습니다.
미니덤프를 만듭니다.
관련 기호(.pdb) 파일과 함께 미니덤프를 Application Insights에 업로드합니다.
참고 항목
하루에 최대 50개의 스냅샷을 업로드할 수 있습니다.
스냅샷 디버거를 사용하도록 설정했지만 스냅샷이 표시되지 않는 경우 문제 해결 가이드를 참조하세요.
스냅샷 디버거 업그레이드
스냅샷 디버거는 미리 설치된 기본 제공 Application Insights 사이트 확장을 통해 자동 업그레이드합니다.
스냅샷 디버거를 최신 상태로 유지하기 위해 Application Insights 사이트 확장을 수동으로 추가하는 것은 더 이상 사용되지 않습니다.
간접비
스냅샷 디버거는 프로덕션 환경에서 사용하도록 설계되었습니다. 기본 설정에는 애플리케이션에 미치는 영향을 최소화하기 위한 속도 제한이 포함됩니다.
그러나 다음과 같이 스냅샷 디버거와 관련된 CPU, 메모리 및 I/O 오버헤드가 줄어들 수 있습니다.
- 애플리케이션에서 예외가 throw되는 경우
- 예외 처리기가 스냅샷을 만들기로 결정한 경우
TrackException
이 호출될 경우
스냅샷 디버거에서 캡처한 데이터를 저장하는 데는 추가 비용이 없습니다.
스냅샷 디버거 오버헤드가 발생할 수 있는 예제 시나리오를 참조하세요.
제한 사항
이 섹션에서는 스냅샷 디버거의 제한 사항에 대해 설명합니다.
데이터 보존
디버그 스냅샷은 15일 동안 저장됩니다. 기본 데이터 보존 정책은 애플리케이션 단위로 설정됩니다. 이 값을 늘려야 하는 경우 Azure Portal에서 지원 사례를 열어 증가를 요청할 수 있습니다. Application Insights 인스턴스마다 하루에 최대 50개의 스냅샷이 허용됩니다.
기호 게시
스냅샷 디버거에서는 다음을 수행하기 위해 프로덕션 서버에 기호 파일이 필요합니다.
- 변수 디코딩
- Visual Studio에서 디버깅 환경 제공
기본적으로 Visual Studio 2017 버전 15.2+는 App Service에 게시할 때 릴리스 빌드에 대한 기호를 게시합니다.
이전 버전에서는 기호가 릴리스 모드에서 게시되도록 게시 프로필
.pubxml
파일에 다음 줄을 추가해야 합니다.<ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
Azure Compute 및 기타 형식의 경우 기호 파일이 다음 중 하나인지 확인합니다.
- 기본 애플리케이션
.dll
(일반적으로wwwroot/bin
)의 동일한 폴더 또는 - 현재 경로에서 사용할 수 있습니다.
사용할 수 있는 다른 기호 옵션에 대한 자세한 내용은 Visual Studio 설명서를 참조하세요. 최상의 결과를 위해 전체, 이식 가능 또는 포함을 사용하는 것이 좋습니다.
최적화된 빌드
JIT 컴파일러에 의해 적용된 최적화로 인해 릴리스 빌드에서 로컬 변수를 볼 수 없는 경우도 있습니다.
그러나 App Service에서 스냅샷 디버거는 수집 계획의 일부인 throw 메서드를 최적화 해제할 수 있습니다.
팁
최적화 해제 지원을 받으려면 Application Insights 사이트 확장을 App Service 인스턴스에 설치합니다.
다음 단계
애플리케이션에 대해 Application Insights 스냅샷 디버거를 사용으로 설정합니다.