Application Insights 스냅샷 디버거를 사용하도록 설정하거나 스냅샷을 볼 때 발생하는 문제 해결
애플리케이션에 대해 Application Insights 스냅샷 디버거를 사용하도록 설정했지만 예외에 대한 스냅샷이 표시되지 않는 경우 다음 지침을 사용하여 문제를 해결할 수 있습니다.
스냅샷이 생성되지 않는 이유에는 여러 가지가 있을 수 있습니다. 먼저 스냅샷 상태 검사를 실행하여 가능한 일반적인 원인 중 일부를 식별할 수 있습니다.
지원되지 않는 시나리오
스냅샷 수집기가 지원되지 않는 시나리오:
시나리오 | 파생 작업 | 추천 |
---|---|---|
애플리케이션에서 스냅샷 수집기 SDK를 직접 사용하는 경우(.csproj) 고급 옵션 Interop을 사용하도록 설정했습니다. | 로컬 Application Insights SDK(스냅샷 수집기 원격 분석 포함)가 손실되므로 스냅샷을 사용할 수 없습니다. 시작 시 애플리케이션이 작동 중단될 수 있습니다 System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor .Application Insights 기능 Interop에 대한 자세한 내용은 설명서를 참조 하세요. |
고급 옵션 Interop을 사용하는 경우 Azure Portal을 통해 사용하도록 설정된 코드 없는 스냅샷 수집기 주입을 사용합니다. |
적절한 스냅샷 디버거 엔드포인트를 사용하고 있는지 확인합니다.
현재 엔드포인트 수정이 필요한 지역은 21Vianet에서 운영하는 Azure Government 및 Microsoft Azure뿐입니다.
Application Insights SDK를 사용하는 App Service 및 애플리케이션의 경우 스냅샷 디버거에 대해 지원되는 재정의를 사용하여 연결 문자열 업데이트해야 합니다.
연결 문자열 속성 | 미국 정부 클라우드: | 중국 클라우드 |
---|---|---|
SnapshotEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
다른 연결 재정의에 대한 자세한 내용은 Application Insights 설명서를 참조하세요.
함수 앱의 경우 지원되는 재정의를 host.json
사용하여 업데이트해야 합니다.
속성 | 미국 정부 클라우드: | 중국 클라우드 |
---|---|---|
AgentEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
host.json
미국 정부 클라우드 에이전트 엔드포인트로 업데이트된 예:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
},
"snapshotConfiguration": {
"isEnabled": true,
"agentEndpoint": "https://snapshot.monitor.azure.us"
}
}
}
}
스냅샷 상태 확인 사용
몇 가지 일반적인 문제로 인해 [디버그 스냅샷 열기]가 표시되지 않습니다. 오래된 스냅샷 수집기를 사용했거나(예: 일일 업로드 제한에 도달), 스냅샷을 업로드하는 데 시간이 오래 걸렸을 수도 있습니다. [스냅샷 상태 확인]을 사용하여 일반적인 문제를 해결합니다.
엔드투엔드 추적 보기의 예외 창에는 [스냅샷 상태 확인]으로 이동하는 링크가 있습니다.
채팅 모양의 대화형 인터페이스는 일반적인 문제를 찾아 수정하도록 안내합니다.
아직도 문제가 해결되지 않으면 다음 수동 문제 해결 단계를 참조하세요.
계측 키 확인
게시된 애플리케이션에서 올바른 계측 키를 사용하는 있는지 확인합니다. 일반적으로 계측 키는 ApplicationInsights.config 파일에서 읽습니다. 포털에 표시된 Application Insights 리소스에 대한 계측 키와 동일한 값인지 확인합니다.
참고 항목
2025년 3월 31일에 계측 키 수집에 대한 지원이 종료됩니다. 계측 키 수집은 계속 작동하지만 더 이상 기능에 대한 업데이트 또는 지원을 제공하지 않습니다. 연결 문자열로 전환하여 새로운 기능을 활용합니다.
TLS/SSL 클라이언트 설정 확인(ASP.NET)
Azure 앱 Service 또는 가상 머신의 IIS에서 호스트되는 ASP.NET 애플리케이션이 있는 경우 SSL 보안 프로토콜이 누락되어 애플리케이션이 스냅샷 디버거 서비스에 연결하지 못할 수 있습니다.
스냅샷 디버거 엔드포인트에는 TLS 버전 1.2이 필요함 SSL 보안 프로토콜 세트는 web.config
의 system.web
섹션에 있는 httpRuntime targetFramework
값으로 사용하도록 설정되는 특이점 중 하나입니다.
httpRuntime targetFramework
가 4.5.2 이하이면 TLS 1.2가 기본적으로 포함되지 않습니다.
참고 항목
httpRuntime targetFramework
값은 애플리케이션을 빌드할 때 사용되는 대상 프레임워크와 관련이 없습니다.
설정을 확인하려면 web.config 파일을 열고 system.web 섹션을 찾습니다. for httpRuntime
가 targetFramework
4.6 이상으로 설정되어 있는지 확인합니다.
<system.web>
...
<httpRuntime targetFramework="4.7.2" />
...
</system.web>
참고 항목
httpRuntime targetFramework
값을 수정하면 애플리케이션에 적용되는 런타임 특이점이 변경되어 다른 동작이 미묘하게 변경될 수 있습니다. 이러한 변경을 수행한 후에는 애플리케이션을 철저히 테스트해야 합니다. 호환성 변경 내용의 전체 목록은 대상 다시 지정 변경 내용을 참조하세요.
참고 항목
targetFramework
4.7 이상인 경우 Windows에서 사용 가능한 프로토콜을 결정합니다. Azure App Service에서는 TLS 1.2를 사용할 수 있습니다. 그러나 사용자 고유의 가상 머신을 사용하는 경우 OS에서 TLS 1.2를 사용하도록 설정해야 할 수 있습니다.
스냅샷 디버거 오버헤드 시나리오
스냅샷 디버거는 프로덕션 환경에서 사용하도록 설계되었습니다. 기본 설정에는 애플리케이션에 미치는 영향을 최소화하기 위한 속도 제한이 포함됩니다.
그러나 다음 시나리오에서처럼 스냅샷 디버거와 관련된 CPU, 메모리 및 I/O 오버헤드가 줄어들 수 있습니다.
애플리케이션에서 예외가 throw되는 경우:
문제 유형에 대한 서명을 만들고 스냅샷을 만들지 여부를 결정하면 CPU 및 메모리 오버헤드가 줄어듭니다.
최적 해제를 사용하도록 설정하면 예외를 throw한 메서드를 다시 JITting하는 오버헤드가 발생합니다. 이 문제는 다음에 해당 메서드가 실행될 때 발생합니다. 메서드의 크기에 따라 CPU 시간이 1ms에서 100ms 사이일 수 있습니다.
예외 처리기가 스냅샷을 만들기로 결정한 경우:
프로세스 스냅샷을 만드는 데 약 1초(P50 = 0.3초, P90 = 1.2초, P95 = 1.9초)가 소요되며, 이 기간 동안 예외를 throw한 스레드가 일시 중지됩니다. 다른 스레드는 차단되지 않습니다.
프로세스 스냅샷을 미니덤프로 변환하고 Application Insights에 업로드하는 데 몇 분 정도 걸립니다.
- 변환: P50 = 63 s, P90 = 187 s, P95 = 275 s.
- 업로드: P50 = 31 s, P90 = 75 s, P95 = 98 s.
이 작업은 별도의 프로세스에서 실행되는 스냅샷 업로더에서 수행됩니다. 스냅샷 업로더 프로세스는 일반 CPU 우선 순위 이하로 실행되며 낮은 우선 순위 I/O를 사용합니다.
미니덤프는 먼저 디스크에 기록되고 간격이 있는 디스크의 양은 원래 프로세스의 작업 집합과 거의 동일합니다. 미니덤프를 작성하면 메모리를 읽을 때 페이지 오류가 발생할 수 있습니다.
미니덤프는 업로드 중에 압축되며 스냅샷 업로더 프로세스에서 CPU와 메모리를 모두 사용합니다. CPU, 메모리 및 디스크 오버헤드는 프로세스 스냅샷의 크기에 비례합니다. 스냅샷 업로더는 스냅샷을 직렬로 처리합니다.
TrackException
이 호출될 경우:
스냅샷 디버거는 예외가 새로운 것인지 아니면 스냅샷이 만들어졌는지 확인합니다. 이렇게 하면 작은 CPU 오버헤드가 추가됩니다.
.NET Core 미리 보기 버전
.NET Core의 미리 보기 버전을 사용하는 경우나 애플리케이션이 종속 어셈블리를 통해 직접 또는 간접적으로 Application Insights SDK를 참조하는 경우 다른 환경의 스냅샷 디버거를 사용하도록 설정에 대한 지침을 따르세요.
진단 서비스 사이트 확장의 상태 페이지를 확인합니다.
스냅샷 디버거가 포털의 Application Insights 창을 통해 사용하도록 설정된 경우, 진단 서비스 사이트 확장을 통해 사용하도록 설정된 것입니다.
참고 항목
Application Insights 스냅샷 디버거의 코드 없는 설치는 .NET Core 지원 정책을 따릅니다. 지원되는 런타임에 대한 자세한 내용은 .NET Core 지원 정책을 참조하세요.
URL https://{site-name}.scm.azurewebsites.net/DiagnosticServices
로 이동하여 해당 확장의 상태 페이지를 확인할 수 있습니다.
참고 항목
상태 페이지 링크의 도메인은 클라우드에 따라 달라집니다.
이 도메인은 App Service용 Kudu 관리 사이트와 동일합니다. 상태 페이지에는 .NET Profiler 및 스냅샷 수집기 에이전트의 설치 상태가 표시됩니다. 예기치 않은 오류가 발생한 경우 이를 해결하는 방법을 보여 드립니다.
App Service에 대한 Kudu 관리 사이트를 사용하여 해당 상태 페이지의 기준 URL을 가져올 수 있습니다.
- Azure Portal에서 App Service 애플리케이션을 엽니다.
- 고급 도구를 선택하거나 Kudu를 검색합니다.
- 이동을 선택합니다.
- Kudu 관리 사이트로 이동하면 URL에서 다음
/DiagnosticServices
를 추가하고 enter 키를 누릅니다. 다음과 같이 끝납니다.https://<kudu-url>/DiagnosticServices
최신 버전의 NuGet 패키지로 업그레이드
스냅샷 디버거를 사용하도록 설정한 방법에 따라 다음 옵션을 참조하세요.
Portal의 Application Insights 창을 통해 스냅샷 디버거를 사용하도록 설정한 경우 애플리케이션이 이미 최신 NuGet 패키지를 실행하고 있을 것입니다.
Microsoft.ApplicationInsights.SnapshotCollector NuGet 패키지를 포함하여 스냅샷 디버거가 사용하도록 설정된 경우 Visual Studio의 NuGet 패키지 관리자를 사용하여 최신 버전의
Microsoft.ApplicationInsights.SnapshotCollector
를 사용하고 있는지 확인합니다.
최신 업데이트 및 버그 수정에 대해서는 릴리스 정보를 참조하세요.
업로더 로그 확인
스냅샷을 만들면 미니덤프 파일(.dmp)이 디스크에 만들어집니다. 별도의 업로더 프로세스에서 해당 미니덤프 파일을 만들어 관련 PDB와 함께 Application Insights 스냅샷 디버거 스토리지에 업로드합니다. 미니덤프가 성공적으로 업로드되면 디스크에서 삭제됩니다. 업로더 프로세스에 대한 로그 파일은 디스크에 유지됩니다. App Service 환경에서는 D:\Home\LogFiles
에서 이러한 로그를 찾을 수 있습니다. App Service에 대한 Kudu 관리 사이트를 사용하여 이러한 로그 파일을 찾을 수 있습니다.
- Azure Portal에서 App Service 애플리케이션을 엽니다.
- 고급 도구를 선택하거나 Kudu를 검색합니다.
- 이동을 선택합니다.
- 디버그 콘솔 드롭다운 목록에서 CMD를 선택합니다.
- LogFiles를 선택합니다.
이름이 Uploader_
또는 SnapshotUploader_
로 시작하고 확장명이 .log
인 파일이 하나 이상 있어야 합니다. 해당 아이콘을 선택하여 모든 로그 파일을 다운로드하거나 브라우저에서 엽니다.
파일 이름에는 App Service 인스턴스를 식별하는 고유한 접미사가 포함됩니다. App Service 인스턴스가 둘 이상의 컴퓨터에서 호스팅되는 경우 각 컴퓨터에 대한 별도의 로그 파일이 있습니다. 업로더에서 새 미니덤프 파일을 검색하면 로그 파일에 기록됩니다. 성공적인 스냅샷 및 업로드의 예는 다음과 같습니다.
SnapshotUploader.exe Information: 0 : Received Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: 139e411a23934dc0b9ea08a626db16c5.dm_
DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available 139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp, 214.42 MB (uncompressed)
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Upload successful. Compressed size 86.56 MB
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Extracting PDB info from D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp.
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Matched 2 PDB(s) with local files.
DateTime=2018-03-09T01:42:59.6809606Z
SnapshotUploader.exe Information: 0 : Stamp does not want any of our matched PDBs.
DateTime=2018-03-09T01:42:59.8059929Z
SnapshotUploader.exe Information: 0 : Deleted D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:59.8530649Z
참고 항목
이전 예제는 NuGet 패키지 버전 1.2.0에서 가져온 Microsoft.ApplicationInsights.SnapshotCollector
것입니다. 이전 버전에서 업로더 프로세스는 MinidumpUploader.exe
라고 하고 로그는 덜 자세하게 설명됩니다.
위 예에서 계측 키는 c12a605e73c44346a984e00000000000
입니다. 이 값은 애플리케이션의 계측 키와 일치해야 합니다.
미니덤프는 ID가 139e411a23934dc0b9ea08a626db16c5
인 스냅샷에 연결됩니다. 나중에 이 ID를 사용하여 Application Insights Analytics에서 연결된 예외 레코드 분석을 찾을 수 있습니다.
업로더는 약 15분에 한 번씩 새 PDB를 검색합니다. 예를 들면 다음과 같습니다.
SnapshotUploader.exe Information: 0 : PDB rescan requested.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Scanning D:\home\site\wwwroot for local PDBs.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Local PDB scan complete. Found 2 PDB(s).
DateTime=2018-03-09T01:47:19.4614027Z
SnapshotUploader.exe Information: 0 : Deleted PDB scan marker : D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\6368.pdbscan
DateTime=2018-03-09T01:47:19.4614027Z
App Service에서 호스팅되지 않는 애플리케이션의 경우 업로더 로그는 미니덤프와 동일한 폴더 %TEMP%\Dumps\<ikey>
(여기서 <ikey>
는 계측 키)에 저장됩니다.
Cloud Services 문제 해결
Cloud Services에서 기본 임시 폴더가 너무 작아서 미니 덤프 파일을 저장할 수 없게 되어 스냅샷이 손실될 수 있습니다.
필요한 공간은 애플리케이션의 전체 작업 집합과 동시 스냅샷 수에 따라 다릅니다.
32비트 ASP.NET 웹 역할의 작업 집합은 일반적으로 200MB ~ 500MB 사이입니다. 둘 이상의 동시 스냅샷을 허용합니다.
예를 들어 애플리케이션에서 총 작업 집합 1GB를 사용하는 경우 스냅샷을 저장할 디스크 공간이 2GB 이상 있는지 확인해야 합니다.
스냅샷용 전용 로컬 리소스가 있는 클라우드 서비스 역할을 구성하려면 다음 단계를 수행합니다.
클라우드 서비스 정의(.csdef) 파일을 편집하여 클라우드 서비스에 새 로컬 리소스를 추가합니다. 다음 예제에서는 크기가 5GB인
SnapshotStore
라는 리소스를 정의합니다.<LocalResources> <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" /> </LocalResources>
역할의 시작 코드를 수정하여
SnapshotStore
로컬 리소스를 가리키는 환경 변수를 추가합니다. 작업자 역할의 경우 역할의OnStart
메서드에 코드를 추가해야 합니다.public override bool OnStart() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); return base.OnStart(); }
웹 역할(ASP.NET)의 경우 웹 애플리케이션의
Application_Start
메서드에 코드를 추가해야 합니다.using Microsoft.WindowsAzure.ServiceRuntime; using System; namespace MyWebRoleApp { public class MyMvcApplication : System.Web.HttpApplication { protected void Application_Start() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); // TODO: The rest of your application startup code } } }
역할의 ApplicationInsights.config 파일을 업데이트하여
SnapshotCollector
에서 사용하는 임시 폴더 위치를 재정의합니다.<TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector"> <!-- Use the SnapshotStore local resource for snapshots --> <TempFolder>%SNAPSHOTSTORE%</TempFolder> <!-- Other SnapshotCollector configuration options --> </Add> </TelemetryProcessors>
섀도 복사본 폴더 재정의
Snapshot Collector가 시작되면 Snapshot Uploader 프로세스를 실행하기에 적합한 디스크에서 폴더를 찾으려고 시도합니다. 선택된 폴더는 섀도 복사본 폴더라고 합니다.
Snapshot Collector는 잘 알려진 위치 몇 곳에서 Snapshot Uploader 바이너리를 복사할 권한이 있는지 확인합니다. 다음 환경 변수가 사용됩니다.
- Fabric_Folder_App_Temp
- LOCALAPPDATA
- APPDATA
- TEMP
적당한 폴더를 찾을 수 없으면 Snapshot Collector는 "Could not find a suitable shadow copy folder."(적합한 섀도 복사본 폴더를 찾을 수 없습니다.)라는 오류를 보고합니다.
복사에 실패하면 Snapshot Collector는 ShadowCopyFailed
오류를 보고합니다.
업로더를 시작할 수 없으면 Snapshot Collector는 UploaderCannotStartFromShadowCopy
오류를 보고합니다. 메시지 본문에 System.UnauthorizedAccessException
이 포함되는 경우가 많습니다. 일반적으로 이 오류는 권한이 축소된 계정으로 애플리케이션이 실행되기 때문에 발생합니다. 계정에 섀도 복사본 폴더에 쓸 수 있는 권한은 있지만 코드를 실행할 수 있는 권한이 없습니다.
이러한 오류는 일반적으로 시작 중에 발생하므로 업로더를 시작하지 못했다는 오류가 자주 ExceptionDuringConnect
발생합니다.
이러한 오류를 해결하려면 ShadowCopyFolder
구성을 통해 섀도 복사본 폴더를 수동으로 지정하면 됩니다. 예를 들어 ApplicationInsights.config를 사용하는 경우 다음과 같습니다.
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
<!-- Override the default shadow copy folder. -->
<ShadowCopyFolder>D:\SnapshotUploader</ShadowCopyFolder>
<!-- Other SnapshotCollector configuration options -->
</Add>
</TelemetryProcessors>
또는 .NET Core 애플리케이션에서 appsettings.json을 사용하는 경우 다음과 같습니다.
{
"ApplicationInsights": {
"InstrumentationKey": "<your instrumentation key>"
},
"SnapshotCollectorConfiguration": {
"ShadowCopyFolder": "D:\\SnapshotUploader"
}
}
Application Insights 검색을 사용하여 스냅샷 예외 찾기
스냅샷이 생성될 때 throw되는 예외에는 스냅샷 ID로 태그가 지정됩니다. 예외가 Application Insights에 보고될 때 이 스냅샷 ID가 사용자 지정 속성으로 포함됩니다. Application Insights에서 검색을 사용하여 ai.snapshot.id
사용자 지정 속성으로 모든 레코드를 찾을 수 있습니다.
- Azure Portal에서 Application Insights 리소스로 이동합니다.
- 검색을 선택합니다.
- 검색 텍스트 상자에
ai.snapshot.id
를 입력하고 Enter 키를 누릅니다.
이 검색에서 결과를 반환하지 않으면 선택한 시간 범위의 Application Insights에 스냅샷이 보고되지 않습니다.
업로더 로그에서 특정 스냅샷 ID를 검색하려면 검색 상자에 해당 ID를 입력합니다. 업로드된 것을 알고 있는 스냅샷에 대한 레코드를 찾을 수 없는 경우 다음 단계를 따릅니다.
계측 키를 확인하여 올바른 Application Insights 리소스가 표시되어 있는지 다시 확인합니다.
업로더 로그에서 타임스탬프를 사용하여 해당 시간 범위를 포함하도록 검색의 시간 범위 필터를 조정합니다.
해당 스냅샷 ID가 포함된 예외가 여전히 보이지 않는 경우 Application Insights에 예외 레코드가 보고되지 않은 것입니다. 스냅샷을 만든 후 예외 레코드를 보고하기 전에 애플리케이션의 작동이 중단된 경우에 이 상황이 발생할 수 있습니다. 이 경우 Diagnose and solve problems
에서 App Service 로그를 검사하여 예기치 않은 다시 시작 또는 처리되지 않은 예외가 있는지 확인합니다.
네트워크 프록시 또는 방화벽 규칙 편집
애플리케이션에서 프록시 또는 방화벽을 통해 인터넷에 연결하는 경우 스냅샷 디버거 서비스와 통신할 수 있도록 규칙을 업데이트해야 할 수 있습니다.
Application Insights 스냅샷 디버거에서 사용하는 IP는 Azure Monitor 서비스 태그에 포함됩니다. 자세한 내용은 서비스 태그 설명서를 참조하세요.
스냅샷을 사용할 때 청구 비용이 있나요?
스냅샷 디버거와 관련된 구독에 대한 요금은 없습니다. 수집된 스냅샷 파일은 Application Insights SDK에서 수집한 원격 분석과는 별도로 저장되며 스냅샷 수집 또는 스토리지에 대한 요금은 없습니다.