2017-05-04 25 views
2

맞춤식 메트릭을 플러시하거나 플러시하지 않고 추적하려고했습니다. 그러나 메트릭은 Application Insights의 "Custom"섹션에 간헐적으로 나타납니다. 첫 번째 질문 : Telemetry가 Application Insight에 전송 되려면 매번 "TrackMetric (metric)"통화가 끝날 때마다 "flush()"를 실행해야합니까? 둘째 : 왜 이런 간헐적 인 행동이 있습니까? 한 번에 하나의 메트릭 만 작성하므로 Application Insights에 수천 개의 개별 호출로 과부하가 걸리는 것처럼 아닙니다.TelemetryClient가 Application Insights에서 일관되지 않은 결과를 생성합니다.

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var telemetryClient = new TelemetryClient() 
     { 
      Context = { InstrumentationKey = "{{hidden instrumentation key}}" } 
     }; 
     var metric = new MetricTelemetry 
     { 
      Name = "ImsWithContextMetric2", 
      Sum = 42.0 
     }; 
     telemetryClient.TrackMetric(metric); 
     telemetryClient.Flush(); 
    } 
} 

나는 또한 "사용 불가/사용되지 않는 메트릭"섹션에서 내가 추가 사용자 지정 메트릭이 나타나있는 응용 프로그램 통찰력이 이상한 행동을 받고 있어요 : 여기 내 코드 (이 간단한 콘솔 응용 프로그램에서입니다)입니다 . 그리고 추가하지 않은 메트릭은 "Custom CPU"아래에 "Process CPU (모든 코어)"라는 팝업이 나타납니다. 이 이상한 행동은?

enter image description here

답변

3

가 발생하는 이유 모든 아이디어는 "플러시()"원격 측정하기 위해서는 모든 싱글 "TrackMetric (미터법)"호출 이후에 전송되는 실행하는 데 필요한 애플리케이션 통찰력?

당신이 단명 수 있습니다 응용 프로그램 통찰력에 이벤트를 보낼 수있는 콘솔 응용 프로그램을 사용하고 있기 때문에, 확실히 한 번 잠시 .Flush()마다 전화를하는 것이 좋습니다. SDK는 InMemoryChannel을 사용하여 원격 측정을 보내고 메모리 내 대기열에서 사용하여 일괄 적으로 전송합니다. 따라서 데이터가 강제로 푸시되도록 .Flush()으로 전화하는 것이 매우 중요합니다. 좋은 연습은 이벤트 후 대기의 비트를 추가 할 수 있습니다 :

더 읽기

telemetryClient.Flush(); 
Thread.Sleep(1000); 
: Flushing data,

Ensure you don't use telemetry 그러나, 메트릭은 간헐적으로 "사용자 정의"에서 응용 프로그램 통찰력에 표시 섹션. 이 간헐적 인 행동이있는 이유는 무엇입니까? 한 번에 하나의 메트릭 만 작성하므로 Application Insights에 수천 개의 개별 호출로 과부하가 걸리는 것처럼 아닙니다.

때때로 Azure Portal에 표시되는 메트릭에 지연이 있습니다. 그것은 몇 분까지있을 수 있습니다. 그러나 올바르게 설정 한 경우 throttling limit을 초과하지 않으며 adaptive sampling이 비활성화 된 경우 원격 측정이 간헐적이어야하는 이유가 없습니다. 그러나 여전히 잘못된 점이 있으면 피어링 추적을 시작하고 (브라우저가 아닌 세션에서 캡처하고 있는지 확인) 통화가 dc.services.visualstudio.com으로 전달되는지 확인하십시오. 응답이 200 OK이고 항목이 서버에 승인되었는지 확인하십시오.

나는 또한 내가 추가 사용자 지정 메트릭은 섹션 "를 사용할 수 없음이/메트릭 사용되지 않는 '에 표시되는 응용 프로그램 통찰력이 이상한 행동을 받고 있어요

.

어떤 SDK 버전을 사용하고 있습니까? 방금 같은 시나리오를 시도했지만 맞춤 측정 항목이 올바르게 표시되었습니다.

그리고 심지어 "프로세스 CPU (모든 코어)"라는 추가하지 않은 메트릭은 "사용자 지정"섹션에 나타납니다.

"프로세스 CPU"는 CPU 사용을 추적하는 데 사용되는 performance counter입니다. 응용 프로그램이 IIS 또는 Azure에서 실행중인 경우에만 SDK가 이러한 카운터를 추적 할 수 있다고 생각합니다. Application Insights 리소스를 만들 때 내부적으로 추가 된 것 같습니다. 차트에 데이터가 없으므로 무시할 수 있습니다.

희망이 도움이됩니다.

+0

응답 해 주셔서 감사합니다. 귀하의 질문에 대한 답변으로, Microsoft.ApplicationInsights 라이브러리 2.3의 최신 버전을 사용하고 있습니다. 또한 Console에서 "flush()"를 호출 한 후 약 1 분 동안 계속 실행해야 콘솔이 일관되게 작동하는지 확인할 수 있습니까? – TheDude

+0

또한 "Adaptive Sampling"은 무엇이며 어떻게 사용합니까? 기본적으로 비활성화되어 있습니까? – TheDude

+0

예, 버퍼를 플러시 한 후에'Thread.Sleep()'을 추가해야합니다. 나는 그 대답에서 몇 가지 더 많은 참고 문헌을 추가했다. 앱의 적응 형 샘플링에 대해 걱정할 필요가 없습니다. 웹 앱이 아니기 때문에 기본적으로 활성화되지 않습니다. [여기] (https://docs.microsoft.com/en-us/azure/application-insights/app-insights-sampling) 방법에 대한 자세한 내용을 볼 수 있습니다. 나는 단지 그것을 가능한 원인으로 부르고 싶었습니다. '사용할 수 없거나 사용 중단 된 측정 항목'문제에 대해서는 [여기] (https://github.com/Microsoft/ApplicationInsights-dotnet-logging/issues) – degant