데이터 없음 문제 해결: .NET 및 .NET Core용 Application Insights
아티클
이 문서에서는 .NET 및 .NET Core용 Application Insights를 사용할 때 데이터가 없거나 표시되지 않는 경우 문제를 해결하는 데 도움이 되는 문제 해결 정보를 제공합니다.
참고
이 문서는 최근에 Log Analytics 대신 Azure Monitor 로그라는 용어를 사용하도록 업데이트되었습니다. 로그 데이터는 여전히 Log Analytics 작업 영역에 저장되며 동일한 Log Analytics 서비스에서 수집 및 분석됩니다. Azure Monitor에서 로그의 역할을 더 잘 반영하도록 용어를 업데이트하고 있습니다. 자세한 내용은 Azure Monitor 용어 변경을 참조 하세요.
일부 원격 분석이 누락됨
예제 시나리오:
Application Insights에서 내 앱이 생성하는 이벤트의 일부만 표시됩니다.
동일한 부분이 일관되게 표시되는 경우 적응 샘플링때문일 것입니다. 이 원인을 확인하려면 개요>검색을 선택하고 요청 또는 기타 이벤트의 인스턴스를 확인합니다. 전체 속성 세부 정보를 보려면 속성 섹션의 맨 아래에 있는 줄임표(...)를 선택합니다. 요청 수가 1보다 크면 샘플링이 작동합니다.
요금제의 데이터 속도 제한 에 도달한 것일 수 있습니다. 이러한 제한은 분당으로 적용됩니다.
데이터가 누락된 경우 백 엔드에서 데이터가 거부될 수 있습니다. 이 상황은 다음과 같은 원인을 포함하여 다양한 이유로 발생할 수 있습니다.
필수 필드가 없습니다.
하나 이상의 필드가 크기 제한을 초과합니다.
SDK는 예외를 throw하는 대신 자동으로 실패합니다.
Fiddler와 같은 도구 또는 HTTP 트래픽을 검사하는 다른 도구를 사용하여 성공적인 원격 분석 업로드를 확인할 수 있습니다. 백 엔드는 성공적인 업로드를 나타내기 위해 "200 OK" HTTP 상태 코드를 반환합니다. 또는 SDK 로그를 사용하여 백 엔드가 데이터를 거부하는지 확인할 수 있습니다.
앱이 중지되려고 할 때 콘솔 앱 또는 웹앱에서 데이터 손실이 발생합니다.
SDK 채널은 원격 분석을 버퍼에 유지하고 일괄 처리로 보냅니다. 애플리케이션이 종료되는 경우 Flush()를 명시적으로 호출해야 할 수 있습니다. 동작은 Flush() 사용되는 실제 채널 에 따라 달라집니다.
.NET Core/.NET Framework 콘솔 애플리케이션에 따라 콘솔 앱에서 명시적으로 호출한 다음 절전 모드를 호출 Flush() 해야 합니다.
Application Insights SDK에서 수집된 요청 수가 내 애플리케이션의 IIS 로그 수와 일치하지 않습니다.
iiS(인터넷 정보 서비스)는 IIS에 도달하고 애플리케이션에 도달하는 총 요청과 본질적으로 다를 수 있는 모든 요청의 수를 기록합니다. 이 동작으로 인해 SDK에서 수집한 요청 수가 총 IIS 로그 수와 일치한다고 보장되지는 않습니다.
내 서버에서 데이터 없음
예제 시나리오:
웹 서버에 앱을 설치했는데 이제 원격 분석이 표시되지 않습니다. 내 개발 컴퓨터에서 정상 작동
Azure 앱 Service 또는 가상 머신의 IIS에서 호스트되는 ASP.NET 애플리케이션이 있는 경우 SSL 보안 프로토콜이 누락되어 애플리케이션이 스냅샷 디버거 서비스에 연결하지 못할 수 있습니다.
스냅샷 디버거 엔드포인트에는 TLS 버전 1.2이 필요함 SSL 보안 프로토콜 집합은 web.config 파일 섹션에서 요소의 targetFramework 특성 값에 <system.web> 의해 <httpRuntime> 활성화되는 단점 중 하나입니다. 대상 프레임워크가 4.5.2 이하인 경우 TLS 1.2는 기본적으로 포함되지 않습니다.
참고
<httpRuntime> 요소의 targetFramework 특성 값은 애플리케이션을 빌드할 때 사용되는 대상 프레임워크와 독립적입니다.
설정을 확인하려면 web.config 파일을 열고 섹션을 찾습니다<system.web>. for <httpRuntime> 가 targetFramework 4.6 이상으로 설정되어 있는지 확인합니다.
요소 값을 targetFramework 수정하면 <httpRuntime> 애플리케이션에 적용되는 런타임 단점이 변경되고 다른 미묘한 동작이 변경될 수 있습니다. 이 변경 후 애플리케이션을 철저히 테스트해야 합니다. 호환성 변경 내용의 전체 목록은 변경 내용 다시 대상 지정을 참조하세요.
대상 프레임워크가 4.7 이상인 경우 Windows는 사용 가능한 프로토콜을 결정합니다. Azure App Service에서는 TLS 1.2를 사용할 수 있습니다. 그러나 사용자 고유의 가상 머신을 사용하는 경우 OS에서 TLS 1.2를 사용하도록 설정해야 할 수 있습니다.
FileNotFoundException: “파일 또는 어셈블리 Microsoft.AspNet TelemetryCorrelation을 로드할 수 없습니다.”
제대로 업그레이드하지 못하면 예기치 않은 예외 또는 원격 분석이 수집되지 않을 수 있습니다.
Visual Studio에 "Application Insights 추가" 옵션이 없음
시나리오 예:
솔루션 탐색기 기존 프로젝트를 마우스 오른쪽 단추로 클릭하면 Application Insights 옵션이 표시되지 않습니다.
도구는 모든 유형의 .NET 프로젝트를 지원하지 않습니다. 웹 및 WCF(Windows Communication Foundation) 프로젝트가 지원됩니다. 데스크톱 또는 서비스 애플리케이션과 같은 다른 프로젝트 형식의 경우 Application Insights SDK를 프로젝트에 수동으로 추가할 수 있습니다.
Visual Studio에서 앱을 디버깅하는 동안 Application Insights 단추를 선택합니다.
서버 데이터 없음(데이터가 하나도 없음)
시나리오 예:
내 앱을 실행한 다음 Microsoft Azure에서 Application Insights 서비스를 열었지만 모든 차트에는 "수집하는 방법 알아보기", "구성되지 않음" 또는 페이지 보기 및 사용자 데이터만 표시되지만 서버 데이터는 표시되지 않습니다.
Visual Studio의 디버그 모드에서 애플리케이션을 실행합니다(F5). 애플리케이션을 사용하여 일부 원격 분석을 생성합니다. Visual Studio 출력 창에서 기록된 이벤트를 볼 수 있는지 확인합니다.
Application Insights 포털에서 개요>검색을 선택합니다. 일반적으로 데이터는 여기에 처음으로 나타납니다.
새로 고침을 선택합니다. 창은 주기적으로 새로 고쳐지지만 수동으로 새로 고칠 수도 있습니다. 시간 범위가 커지면 새로 고침 간격이 길어집니다.
연결 문자열 일치하는지 확인합니다. Application Insights 포털의 앱에 대한 기본 창의 Essentials 드롭다운 목록에서 연결 문자열을 확인합니다. 그런 다음 Visual Studio의 프로젝트에서 ApplicationInsights.config를 열고 요소를 찾습니다<ConnectionString>. 두 문자열이 같은지 확인합니다. 문자열이 일치하지 않으면 다음 작업 중 하나를 수행합니다.
Application Insights를 검색하여 선택한 다음, 올바른 문자열이 있는 앱 리소스를 찾습니다 .
Visual Studio
Visual Studio 솔루션 탐색기 프로젝트를 마우스 오른쪽 단추로 클릭하고 Application Insights 구성을>선택합니다. 올바른 리소스에 원격 분석을 보내도록 앱을 다시 설정합니다.
일치하는 문자열을 찾을 수 없는 경우 Visual Studio에서 포털에 로그인하는 데 사용하는 것과 동일한 로그인 자격 증명을 사용하고 있는지 확인합니다.
Azure Portal에서 Service Health를 검색하고 선택합니다. 맵에 경고 표시가 있는 경우 상태가 될 때까지 기다립니다. 그런 다음 Application Insights 애플리케이션 창을 닫고 다시 엽니다.
TelemetryClient 인스턴스 또는 TelemetryContext에서 연결 문자열을 변경할 수 있는 코드를 서버 쪽 SDK에 작성했습니까? 또는 너무 촘촘하게 걸러내는 필터 또는 샘플링 구성을 작성했습니까?
ApplicationInsights.config를 편집한 경우 TelemetryInitializers> 및 <TelemetryProcessors> 요소의 <구성을 주의 깊게 확인합니다. 형식 또는 매개 변수를 잘못 명명하면 SDK에서 빈 데이터를 보내게 될 수 있습니다.
페이지 보기, 브라우저 및 사용량에 대한 데이터 없음
시나리오 예:
서버 응답 시간 및 서버 요청 차트에 데이터가 표시되지만 페이지 보기 로드 시간 또는 브라우저 또는 사용량 창에 데이터가 없습니다.
프록시를 사용하여 회사 네트워크에서 보내야 하는 경우 web.config에서 defaultProxy> 요소를 설정합니다<.
Application Insights를 사용하도록 설정할 때 성능에 미치는 영향
애플리케이션에서 Application Insights SDK를 사용하도록 설정하면 높은 CPU 사용량, 메모리 누수, 스레드 누수 또는 TCP 포트 소모와 같은 성능 문제가 발생할 수 있습니다. 이러한 문제는 일반적으로 개체를 누수하는 애플리케이션에서 발생합니다 Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration . 유출된 각 인스턴스는 두 개의 추가 스레드를 만들어 시간이 지남에 따라 프로세스의 스레드 수가 지속적으로 증가합니다. 스레드 수가 증가하는 것을 관찰하는 경우 TelemetryConfiguration 개체의 누수를 확인하는 것이 중요합니다.
TelemetryConfiguration 누수의 일반적인 원인
개체 누수의 주요 원인은 두 가지입니다.TelemetryConfiguration
코드에서 명시적 만들기: 코드 내에서 개체를 만드는 TelemetryConfiguration 경우 웹 요청당 실수로 만들어지지 않았는지 확인합니다. 대신 공유 전역 인스턴스를 사용합니다. .NET Framework 애플리케이션의 TelemetryConfiguration.Active경우 . .NET Core 애플리케이션의 경우 기본 구성을 가져오는 데 사용합니다 TelemetryConfiguration.CreateDefault() .
부적절한 서비스 공급자 사용: .NET Core 애플리케이션 services.BuildServiceProvider() 에서 .ConfigureServices BuildServiceProvider 메서드는 구성을 초기화하고 읽는 새 서비스 공급자를 만들어 매번 새 TelemetryConfiguration 개체를 만듭니다. 이러한 패턴은 누출로 이어질 수 있으며 이 코딩 방법에 대한 Visual Studio 경고에 설명된 대로 권장되지 않습니다.
데이터를 보는 데 사용했지만 중지되었습니다.
데이터 요소의 월간 할당량에 도달했습니까? 설정>할당량 및 가격 책정을 열어 확인합니다. 그렇다면 계획을 업그레이드하거나 더 많은 용량을 지불할 수 있습니다. 가격 체계를 참조하세요.
최신 버전은 Microsoft.ApplicationInsights.AspNetCore 2.14.0이며 버전 2.14.0을 Microsoft.ApplicationInsights 나타냅니다. 이러한 이유로 설치할 버전은 Microsoft.ApplicationInsights.AspNetCore 2.14.0이어야 합니다.