다음을 통해 공유


.NET용 Application Insights Profiler 문제 해결

이 문서에서는 .NET용 Application Insights Profiler를 사용할 수 있도록 하는 문제 해결 단계 및 정보를 제공합니다.

적절한 .NET Profiler 엔드포인트를 사용하고 있나요?

현재 엔드포인트 수정이 필요한 유일한 지역은 Azure Government21Vianet에서 운영하는 Microsoft Azure입니다.

앱 설정 미국 정부 클라우드: 중국 클라우드
ApplicationInsightsProfilerEndpoint https://profiler.monitor.azure.us https://profiler.monitor.azure.cn
ApplicationInsightsEndpoint https://dc.applicationinsights.us https://dc.applicationinsights.azure.cn

앱이 올바른 버전에서 실행되고 있나요?

Profiler는 4.6.2 이후의 .NET Framework에서 지원됩니다.

웹앱이 ASP.NET Core 애플리케이션인 경우 지원되는 최신 ASP.NET Core 런타임에서 실행되어야 합니다.

적합한 Azure Service 요금제를 사용하고 있나요?

.NET용 프로파일러는 현재 무료 또는 공유 앱 서비스 계획에서 지원되지 않습니다. Profiler가 작동을 시작할 수 있는 기본 요금제 중 하나로 업드레이드하세요.

참고 항목

Azure Functions 소비 플랜은 지원되지 않습니다. Application Insights를 사용하여 라이브 Azure Functions 앱 프로파일링을 참조하세요.

적절한 시간 프레임 내에 .NET Profiler 데이터를 검색하고 있나요?

확인하려는 데이터가 생성된 지 2주 넘게 지난 경우에는 시간 필터의 범위를 제한한 후에 다시 시도해 보세요. 추적은 7일 후에 삭제됩니다.

.NET Profiler 샘플링 속도 및 오버헤드를 알고 있나요?

.NET Profiler는 Profiler를 사용하도록 설정된 애플리케이션을 호스팅하는 각 가상 머신에서 시간당 2분을 임의로 실행합니다.

참고 항목

.NET용 Application Insights Profiler가 적극적으로 실행되고 추적을 수집하는 경우 일반적으로 CPU 및 메모리 오버헤드의 5%에서 15% 사이를 서버에 추가합니다.

.NET Profiler에서 캡처한 데이터를 저장하는 데 추가 비용은 없습니다. 데이터는 15일 후에 자동으로 삭제됩니다.

게이트웨이에 액세스할 수 있나요?

방화벽 또는 프록시가 이 웹 페이지에 대한 액세스를 차단하고 있지 않은지 확인합니다.

시간 제한이 표시되거나 .NET Profiler가 실행 중인지 확인해야 합니까?

프로파일링 데이터는 Profiler가 실행되는 동안 발생한 요청에 첨부할 수 있을 때에만 업로드됩니다. .NET Profiler는 매시간 2분 동안 데이터를 수집합니다. 프로파일링 세션을 시작하여 Profiler를 트리거할 수도 있습니다.

Profiler는 Application Insights 리소스에 추적 메시지 및 사용자 지정 이벤트를 씁니다. 이러한 이벤트를 사용하여 Profiler가 실행되는 방식을 확인할 수 있습니다.

.NET Profiler에서 Application Insights 리소스로 보낸 추적 메시지 및 사용자 지정 이벤트를 검색합니다.

  1. Application Insights 리소스의 맨 위 메뉴에서 검색을 선택합니다.

    Application Insights 리소스에서 검색 단추를 선택하는 것을 보여 주는 스크린샷.

  2. 다음 검색 문자열을 사용하여 관련 데이터를 찾습니다.

    stopprofiler OR startprofiler OR upload OR ServiceProfilerSample
    

    앞서 언급한 검색 문자열의 검색 결과를 보여 주는 스크린샷.

    이전 검색 결과에는 두 개의 AI 리소스에서 검색한 두 가지 예가 포함됩니다.

    • Profiler가 실행되는 동안 애플리케이션에서 요청을 수신하지 않으면, 메시지를 통해 활동이 없어 업로드가 취소되었다고 설명합니다.

    • Profiler가 시작되었고, Profiler가 실행되는 동안 발생한 요청을 검색하면 사용자 지정 이벤트를 전송했습니다. ServiceProfilerSample 사용자 지정 이벤트가 표시되는 경우, 프로필이 캡처되었고 Application Insights 성능 창에서 해당 프로필을 사용할 수 있다는 뜻입니다.

    레코드가 표시되지 않으면 Profiler가 실행되지 않거나 응답하는 데 시간이 너무 오래 걸린 것입니다. Profiler가 Azure 서비스에서 사용하도록 설정되어 있는지 확인합니다.

.NET Profiler가 켜졌지만 캡처된 추적은 없습니다.

Profiler가 사용하도록 설정되어 있어도 특히 다음과 같은 상황에서는 추적을 캡처하거나 업로드하지 못할 수 있습니다.

  1. 사용자의 애플리케이션에 수신 요청이 없습니다.
    수동으로 애플리케이션을 호출하거나 가용성 테스트 또는 부하 테스트를 만들 수 있습니다.

  2. Application Insights에서 수신 원격 분석이 확인되지 않음:

  3. 샘플링에 대한 프로파일러 설정이 꺼짐:
    여전히 프로파일러 추적을 사용할 수 없는 경우 프로파일러 샘플링 설정을 확인합니다.

    1. Application Insights>성능 블레이드를 엽니다.
    2. 프로파일러를 클릭합니다.
    3. 트리거 단추를 클릭합니다.
    4. 트리거 설정에서 샘플링 토글이 켜져 있는지 확인합니다.
  4. 아직도 추적 정보가 업로드되지 않았나요?
    지원 요청을 만들거나 Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.

병렬 스레드에서 이중 계산

두 개 이상의 병렬 스레드가 요청과 연결된 경우 스택 뷰어의 총 시간 메트릭이 요청 기간보다 더 길 수 있습니다. 이 경우 총 스레드 시간은 실제로 경과된 시간보다 깁니다.

예를 들어, 다른 스레드가 완료될 때까지 하나의 스레드가 대기 중일 수 있습니다. 뷰어는 이러한 상황의 검색을 시도하여 불필요한 대기를 생략합니다. 이렇게 하면 중요할 수도 있는 정보를 생략하는 문제 대신, 너무 많은 정보가 표시되는 문제가 발생합니다.

추적에 병렬 스레드가 표시되면 대기 중인 스레드를 확인하여 요청에 대한 실행 부하 과다 경로를 식별합니다. 일반적으로 대기 상태로 빠르게 전환되는 스레드는 다른 스레드에서 대기 중입니다. 다른 스레드에 집중하고 대기 중인 스레드 대기 시간을 무시합니다.

특정 Azure 서비스에서 .NET Profiler 문제 해결

다음 섹션에서는 Azure App Service 또는 Azure Cloud Services에서 Profiler를 사용하기 위한 문제 해결 단계를 안내합니다.

Azure App Service

.NET 프로파일러가 제대로 작동하려면 다음을 확인합니다.

  • 웹앱에는 올바른 설정으로 Application Insights가 활성화되어 있습니다.

  • ApplicationInsightsProfiler3 WebJob이 실행되고 있는지 확인 웹 작업을 확인하려면 다음 단계를 수행합니다.

    1. Kudu로 이동합니다. Azure Portal에서 다음을 수행합니다.

      1. App Service 인스턴스의 왼쪽 창에서 고급 도구를 선택합니다.
      2. 이동을 선택합니다.
    2. 맨 위 메뉴에서 도구>WebJobs 대시보드를 선택합니다. 웹 작업 창이 열립니다.

      ApplicationInsightsProfiler3이 표시되지 않으면 App Service 애플리케이션을 다시 시작합니다.

      작업의 이름, 상태 및 마지막 런타임이 표시된 WebJobs 창을 보여 주는 스크린샷.

    3. 로그를 비롯한 WebJob 세부 정보를 확인하려면 ApplicationInsightsProfiler3 링크를 선택합니다. 지속적인 웹 작업 세부 정보 창이 열립니다.

      연속 WebJob 세부 정보 창을 보여 주는 스크린샷.

.NET Profiler가 여전히 작동하지 않는 경우 로그를 다운로드하고 Azure 지원 티켓을 제출합니다.

진단 서비스 사이트 확장 상태 페이지를 확인합니다.

포털의 Application Insights 창을 통해 .NET Profiler를 사용하도록 설정한 경우 진단 서비스 사이트 확장에서 관리됩니다. https://{site-name}.scm.azurewebsites.net/DiagnosticServices로 이동하여 이 확장의 상태 페이지를 확인할 수 있습니다.

참고 항목

상태 페이지 링크의 도메인은 클라우드에 따라 다릅니다. 이 도메인은 App Service용 Kudu 관리 사이트와 동일합니다.

상태 페이지에는 .NET Profiler 및 스냅샷 디버거 에이전트의 설치 상태가 표시됩니다. 예기치 않은 오류가 발생한 경우 문제를 해결하는 방법에 대한 단계와 함께 표시됩니다.

App Service용 Kudu 관리 사이트를 사용하여 해당 상태 페이지의 기준 URL을 가져올 수 있습니다.

  1. Azure Portal에서 App Service 애플리케이션을 엽니다.
  2. 고급 도구를 선택합니다.
  3. 이동을 선택합니다.
  4. Kudu 관리 사이트에서 다음을 수행합니다.
    1. URL에 /DiagnosticServices를 추가합니다.
    2. Enter를 선택합니다.

https://<kudu-url>/DiagnosticServices와 같이 끝납니다.

상태 페이지는 다음 예제와 유사하게 표시됩니다.

진단 서비스 상태 페이지를 보여 주는 스크린샷.

참고 항목

.NET용 Application Insights Profiler의 코드리스 설치는 .NET Core 지원 정책을 따릅니다. 지원되는 런타임에 대한 자세한 내용은 .NET Core 지원 정책을 참조하세요.

수동 설치

.NET Profiler를 구성하면 웹앱의 설정이 업데이트됩니다. 필요한 경우 업데이트를 수동으로 적용할 수 있습니다.

너무 많은 활성 프로파일링 세션

Azure App Service에는 한 번에 하나의 프로파일링 세션으로만 제한됩니다. 이 제한은 App Service 요금제에서 실행되는 모든 애플리케이션 및 배포 슬롯의 VM 수준에서 적용됩니다. 이 제한은 진단 및 해결 문제, Kudu 및 .NET용 Application Insights Profiler를 통해 시작된 프로파일링 세션에도 동일하게 적용됩니다.

다른 프로파일러가 이미 실행 중일 때 .NET Profiler가 세션을 시작하려고 하면 애플리케이션 로그 및 연속 WebJob 로그에 ApplicationInsightsProfiler3오류가 기록됩니다.

로그에 다음 메시지 중 하나가 표시될 수 있습니다.

  • Microsoft.ServiceProfiler.Exceptions.TooManyETWSessionException
  • Error: StartProfiler failed. Details: System.Runtime.InteropServices.COMException (0xE111005E): Exception from HRESULT: 0xE111005E

오류 코드 0xE111005E 는 다른 세션이 이미 실행 중이므로 프로파일링 세션을 시작할 수 없다는 것을 나타냅니다.

오류를 방지하려면 일부 웹앱을 다른 App Service 계획으로 이동하거나 일부 애플리케이션에서 Profiler를 사용하지 않도록 설정합니다. 배포 슬롯을 사용하는 경우 사용되지 않는 슬롯을 중지해야 합니다.

배포 오류: 디렉터리가 비어 있지 않음 'D:\home\site\wwwroot\App_Data\jobs'

.NET Profiler를 사용하도록 설정된 Web Apps 리소스에 웹앱을 다시 배포하는 경우 다음 메시지가 표시될 수 있습니다.

"디렉터리가 비어 있지 않음 'D:\home\site\wwwroot\App_Data\jobs'"

이 오류는 스크립트 또는 Azure Pipelines에서 웹 배포를 실행하는 경우에 발생합니다. 웹 배포 작업에 다음과 같은 배포 매개 변수를 추가하여 해결합니다.

-skip:Directory='.*\\App_Data\\jobs\\continuous\\ApplicationInsightsProfiler.*' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs\\continuous$' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs$'  -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data$'

이러한 매개 변수는 .NET용 Application Insights Profiler에서 사용하는 폴더를 삭제하고 재배포 프로세스를 차단 해제합니다. 현재 실행 중인 Profiler 인스턴스에는 영향을 주지 않습니다.

.NET용 Application Insights Profiler가 실행되고 있나요?

Profiler는 웹앱에서 연속 WebJob으로 실행됩니다. Azure Portal에서 웹앱 리소스를 열 수 있습니다. WebJobs 창에서 ApplicationInsightsProfiler의 상태를 확인합니다. 실행되지 않는 경우 로그를 열어 자세한 정보를 찾습니다.

VM 및 Azure Cloud Services

Azure Diagnostics에서 .NET Profiler가 올바르게 구성되었는지 확인하려면 다음을 수행합니다.

  1. 배포된 Azure Diagnostics 구성의 콘텐츠가 올바른지 확인합니다.

  2. Azure Diagnostics가 Profiler 명령줄에서 적절한 iKey를 전달하는지 확인합니다.

  3. 프로파일러 로그 파일을 확인하여 .NET Profiler가 실행되었지만 오류가 반환되었는지 확인합니다.

Azure Diagnostics를 구성하는 데 사용된 설정을 확인하려면 다음 단계를 수행합니다.

  1. 가상 머신(VM)에 로그인합니다.

  2. 이 위치에서 로그 파일을 엽니다. 플러그 인 버전이 컴퓨터에 최신 버전일 수 있습니다.

    VM의 경우:

    c:\WindowsAzure\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
    

    Azure Cloud Services의 경우:

    c:\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
    
  3. 파일에서 WadCfg 문자열을 검색하여 Azure Diagnostics를 구성하기 위해 VM에 전달된 설정을 찾습니다.

  4. .NET Profiler 싱크에서 사용하는 iKey가 올바른지 확인합니다.

  5. Profiler를 시작하는 명령줄을 확인합니다. 명령줄 인수는 다음 파일에 있습니다(드라이브는 c: 또는 d:일 수 있고 디렉터리가 숨겨져 있을 수 있음).

    VM의 경우:

    C:\ProgramData\ApplicationInsightsProfiler\config.json
    

    Azure Cloud Services의 경우:

    D:\ProgramData\ApplicationInsightsProfiler\config.json
    
  6. Profiler 명령줄의 ikey가 올바른지 확인합니다.

  7. 이전 config.json 파일에 있는 경로를 사용하여 BootstrapN.log라는 Profiler 로그 파일을 확인합니다. 표시되는 항목은 다음과 같습니다.

    • Profiler에서 사용 중인 설정을 나타내는 디버그 정보
    • Profiler의 상태 및 오류 메시지

    값은 다음 파일에서 찾을 수 있습니다.

    VM의 경우:

    C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
    

    Azure Cloud Services의 경우:

    C:\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
    
  8. 애플리케이션이 요청을 수신하는 동안 .NET Profiler가 실행 중인 경우 다음 메시지가 나타납니다. "iKey에서 활동이 검색되었습니다."

  9. 추적을 업로드할 때 "추적 업로드를 시작합니다."라는 메시지가 표시됩니다.

네트워크 프록시 또는 방화벽 규칙 편집

애플리케이션이 프록시 또는 방화벽을 통해 인터넷에 연결하는 경우 .NET Profiler와 통신하도록 규칙을 업데이트해야 할 수 있습니다.

.NET용 Application Insights Profiler에서 사용하는 IP는 Azure Monitor 서비스 태그에 포함됩니다. 자세한 내용은 서비스 태그 설명서를 참조하세요.

지원

여전히 도움이 필요한 경우 Azure Portal에서 지원 티켓을 제출합니다. 오류 메시지의 상관 관계 ID를 포함합니다.