디버그에서 애플리케이션 인사이트 비활성화


99

디버그 구성을 사용할 때 자동으로 애플리케이션 통찰력을 비활성화하고 릴리스에서만 활성화하려면 어떻게해야합니까?
디버그 용으로 만 다른 계측 키를 만들지 않고이 작업을 수행 할 수 있습니까? 코드 전체에 흩어져

있는 trackevent명령문을 디버그 전 처리기 검사 내에 포함하는 것은 이상적인 솔루션이 아닙니다.

나의 현재 솔루션은 설정하는 것입니다 Build ActionApplicationInsights.config에 파일을 None이 프로젝트의 출력 디렉터리에 복사되지 것 때문에, 그러나 이것은 활성 빌드 구성에 따라 자동화 할 수있는 과정이 아니다.

개발자 모드가 있지만 수동으로 변경해야합니다 (구성 파일을 조건부로 설정할 수있는 경우 문제가 해결 된 계측 키도 비움). 참조 http://apmtips.com/blog/2015/02/02/developer-mode/를

참조 : http://blogs.msdn.com/b/visualstudioalm/archive/2015/01/07/application-insights-support-for-multiple-environments-stamps-and-app-versions.aspx

답변:


69

TelemetryConfiguration.DisableTelemetry 속성 사용을 시도 할 수 있습니다 . 이런 식으로 ..

#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
#endif

직전에이 문을 추가하려고 시도했지만 WindowsAppInitializer.InitializeAsync();(나도 시도한 후) Visual Studio 응용 프로그램 통찰력 이벤트 카운터가 증가했습니다. 세션과 사용자가 너무 많아이 세션이 Azure Portal에 효과적으로 기록되었는지 확인할 수 없었습니다. 나는 밤에 시도 할 것이다.
Alberto Rivelli

Alberto, 나는 다음과 같이 테스트했다- '코드'공개 봉인 부분 클래스 MainPage : Page {TelemetryClient telemetry; public MainPage () {this.InitializeComponent (); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetry = new TelemetryClient (); } private void button_Click (object sender, RoutedEventArgs e) {telemetry.TrackEvent ( "Event Custom"); } 'code'.. 작동하는 것 같습니다. 나는 다른 페이지도 시도 할 것입니다. 당신은 업데이트 계속됩니다
Abhijit 야나에게

또한 Visual Studio 자체에서 원격 분석 이벤트가 전송되었는지 여부를 확인할 수 있습니다. 난 그냥이 yestarday을 게시 하는 방법 비주얼 스튜디오 2015에서 응용 프로그램 통찰력 이벤트의 수를 얻을 수
Abhijit 야나

그것이 제가 쓴 글이며, 비주얼 스튜디오 이벤트 카운터가 증가했습니다.
Alberto Rivelli

2
DisableTelemetry가 true로 설정되고 계측 키가 비어 있어도 원격 분석 모듈은 데이터를 계속 수집합니다. 데이터는 전송되지 않지만 수집됩니다. App Insights에 대해 기록 된이 문제를 참조하십시오. github.com/Microsoft/ApplicationInsights-dotnet/issues/397 데뷔 출력을 비활성화하려면 github.com/Microsoft/ApplicationInsights-dotnet/issues/310에있는 단계를 따르세요.
Guillaume LaHaye

61

다른 솔루션에 추가로 다음을 추가하는 것이 좋습니다 Global.asax.

protected void Application_Start()
{    
    DisableApplicationInsightsOnDebug();
    // do the other stuff
}

/// <summary>
/// Disables the application insights locally.
/// </summary>
[Conditional("DEBUG")]
private static void DisableApplicationInsightsOnDebug()
{
    TelemetryConfiguration.Active.DisableTelemetry = true;
}

이것의 장점은 구성을 변경할 필요가 없으며 지시문보다 더 잘 이해할 수있는 ReSharper와 같은 일부 도구에서 더 잘 작동한다는 것 #입니다.


1
일반적으로 DEBUG 구성을 스테이징에 배포하고 RELEASE 구성을 프로덕션에 배포합니다. 둘 다 OWN 원격 분석을 활성화 할 수 있습니다. 따라서 변경 사항은 스테이징 환경에 대한 원격 분석을 비활성화합니다.
Sergey G.

1
@Sergey 단일 구성을 정의하고 STAGING 변수를 정의하는 것이 좋습니다. 따라서 로컬에서 디버깅을 더 잘 구별 할 수 있습니다. 또 다른 옵션은 새 기호 LOCAL을 정의하고 Conditional-attribute 에서 대체하는 것입니다 .
Alexander Schmidt

일반적으로 STAG 및 PROD에 대한 다른 DB 연결 문자열, 스토리지 계정 및 기타 설정 (FB 앱 ID, SendGrid 계정, 앱 설정 등)이 있습니다. 또한 로컬에는 Azure 스토리지 에뮬레이터와 로컬 SQL Express가 있습니다. 따라서 단일 구성으로 작업 할 방법이 없습니다. 세 가지 구성이 필요하며 로컬 구성에는 원격 분석이 비활성화되어 있어야합니다.
Sergey G.

둘 이상의 구성에서 사용자 정의 기호를 정의 할 수 있습니다. 그런 다음 Conditional ( "DEBUG")을 사용하는 대신 Conditional ( "WHATEVER")를 수행 할 수 있습니다. 또는 appSettings에서 값을 가져오고 변환을 사용하여 로컬이 아닌 환경에서이를 날려 버릴 수 있습니다.
joelmdev

34

ASP.NET Core 프로젝트의 경우 App Insights는 기본적으로 켜져 있으며 실제로 디버그 창에 많은 정보를 기록합니다.

비활성화하려면 "도구-> 옵션-> 프로젝트 및 솔루션-> 웹 프로젝트"로 이동하여 "Asp.Net Core 웹 프로젝트에 대한 로컬 Application Insights 비활성화"를 선택하십시오.

아래는 로컬 앱 인사이트를 비활성화하는 이미지입니다.

영상

이 문제에 대한 자세한 내용은 여기 에서 공식 github 문제를 볼 수 있습니다.


22

<instrumentationkey>key</instrumentationkey>블록 이벤트가 생성 되지 않고 ApplicationInsights.config를 배포하거나 배포하지 않는 질문에 설명 된대로 . 그런 다음 계측 키를 코드에 넣을 수 있습니다 (제 경우에는 릴리스시에만)

#if !DEBUG
    Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key";
#endif

TelemetryClient이 호출 후에 생성 된 모든 항목 은 올바른 키를 가지며 이벤트를 추적하므로 모든 위치에서 코드를 변경할 필요가 없습니다. 위의 메서드를 호출하지 않거나 매개 변수를 비워두면 키가 구성되지 않았기 때문에 이벤트가 차단됩니다.

기본적으로 ApplicationInsights.config파일은 계측 키를 설정하는 모든 코드를 재정의하므로 <instrumentationkey>key</instrumentationkey>내부를 제거하면 코드를 사용하여 키를 구성 할 수 있습니다. 파일을 완전히 제거하면 작동하지 않습니다.

확인은 다음과 같습니다. "키를 동적으로 설정하려면 (예 : 애플리케이션의 결과를 다른 리소스로 전송하려는 경우) 구성 파일에서 키를 생략하고 대신 코드에서 설정할 수 있습니다."

참조 : https://azure.microsoft.com/en-us/documentation/articles/app-insights-configuration-with-applicationinsights-config/#_instrumentationkey


1
참조 이 블로그를 별도 이것을 사용하는 방법ApplicationInsights.Debug/Release.config
야후 심각한

16

두 가지 방법을 모두 사용하기로 결정했습니다. I는 이동 된 InstrumentationKey받는 Web.config그것은로부터 변환에 의해 대체 될 것이다 Web.Release.config또는 Web.Debug.config. ( ApplicationInsights.config파일 에서 제거하는 것을 잊지 마십시오 ). 그런 다음이 메서드를Application_Start()

public static void RegisterTelemetryInstrumentationKey()
{
    if (string.IsNullOrWhiteSpace(WebConfigurationManager.AppSettings["TelemetryInstrumentationKey"])
    {
        TelemetryConfiguration.Active.DisableTelemetry = true;
    }
    else
    {
        TelemetryConfiguration.Active.InstrumentationKey = AppSettings.TelemetryInstrumentationKey;
    }
}

이것은 오늘날 쓸모가 없습니다. 오늘 우리는 이것을 어떻게 올바르게 수행합니까?
l --''''''--------- '' '' '' '' '' ''

15

Visual Studio 2017 (15.9.2)에서 ASP.NET Core 2.1 웹 애플리케이션을 실행하면 "Asp.Net Core 웹 프로젝트에 대한 로컬 Application Insights 사용 안 함"이 디버그 창에서 출력을 지우지 않았습니다.

그러나 Startup.cs의 Configure ()에 다음을 추가하면 작업이 수행되었습니다.

if (_env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    TelemetryConfiguration.Active.DisableTelemetry = true;
    TelemetryDebugWriter.IsTracingDisabled = true;
}

IsTracingDisabled가 핵심 솔루션 이었지만 좋은 측정을 위해 DisableTelemetry를 사용했습니다! 또한 동일한 솔루션에서 .NET Framework 및 .NET Core 프로젝트 간의 유사한 참조를 검색 할 때 두 줄을 나란히 배치하는 것이 유용합니다.


2
이것은 오늘날 쓸모가 없습니다. 오늘 우리는 이것을 어떻게 올바르게 수행합니까?
l --''''''--------- '' '' '' '' '' ''

11

나는 방금 같은 문제를 겪었습니다.

web.config의 설정을 제어하고 싶었으므로 앱 설정에 DisableAITelemetry 키를 추가했습니다.

  <appSettings>
    <add key="DisableAITelemetry" value="true" />
  </appSettings>

라이브 및 데모 빌드에서는 값을 포함하지 않습니다 (기본값은 false로 설정 됨).

다음을 추가하여 해결할 수 있습니다.

bool disable;
string disableAiTelemetry = ConfigurationManager.AppSettings["DisableAITelemetry"];
bool.TryParse(disableAiTelemetry, out disable);
TelemetryConfiguration.Active.DisableTelemetry = disable;

10

일부 다른 솔루션에서는 약간 다른 플레이가 있습니다. 이것을 global.asax에 넣으십시오.

Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached;

디버거에서 실행할 때 앱 인사이트 디버그 출력을 끄지 만 Ctrl + F5 시나리오에서 허용하고 테스트 서버에 게시 된 디버그 빌드에서 허용합니다.


10

ASP.NET Core 애플리케이션에서 Startus.cs에 다음을 추가하여 개발 환경에서 Application Insights를 끌 수 있습니다.

if (env.IsDevelopment()) {
    TelemetryConfiguration.Active.DisableTelemetry = true;
}

builder.AddApplicationInsightsSettings();명령 바로 뒤에 이것을 생성자에 추가하면 더 이상 AI 로그가 디버그 콘솔을 막는 것을 볼 수 없습니다.


아니요 ... (ASP.Net Core 2.1에서) 나에게 어떤 차이도 만들지 않았습니다. 출력 창에 "Application Insights Telemetry"메시지가 계속 표시됩니다.
Mike Gledhill

7

디버그 로그를 추적하는 것을 방지하는 가장 쉬운 방법은 다음과 같이 간단합니다.

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

5

Microsoft.ApplicationInsights.AspNetCore 버전 2.1

services.AddApplicationInsightsTelemetry(options =>
{
    options.EnableDebugLogger = false;
});

이것은 숨길 건가요 Application Insights Telemetry (unconfigured)가 :-( 작동하지 않도록 경우 때문에 - Visual Studio에서 디버그 패널에서 메시지
Simon_Weaver

3
그런 메시지가 뭔지 잘 모르겠습니다. 나는 당신이 TelemetryDebugWriter.IsTracingDisabled = true;그것들을 제거 하기 를 찾고 있다고 믿습니다 .
JJS

3
         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            #region Disable Application Insights debug informations
#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
            TelemetryDebugWriter.IsTracingDisabled = true;
#endif
            #endregion
//...
}

1
이것은 오늘날 쓸모가 없습니다. 오늘 우리는 이것을 어떻게 올바르게 수행합니까?
l --''''''--------- '' '' '' '' '' ''

0

.NET Core 3.1 이후 :

var telemetryConfiguration = TelemetryConfiguration.CreateDefault();
telemetryConfiguration.DisableTelemetry = true;

var telemetryClient = new TelemetryClient(telemetryConfiguration);   // Use this instance
TelemetryDebugWriter.IsTracingDisabled = true;

2
종속성 주입을 통한 TelemetryConfiguration 가져 오기를 포함하여이를 수행하기위한 문서는 다음과 같습니다. docs.microsoft.com/en-us/azure/azure-monitor/app/…
Noah Stahl

0

ASP.NET Core 3.1부터 :

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    configuration.DisableTelemetry = true;
}
TelemetryDebugWriter.IsTracingDisabled = true;

(위의 내용은 어디서나 호출 할 수 있지만 애플리케이션 수명주기가 빠를수록 좋습니다.)

둘 다 함께 사용하여 코드에서 모든 Application Insights 활동을 억제 할 수 있습니다. #if DEBUGAppInsights가 내 로컬 컴퓨터에서 아무 작업도 수행하지 않지만 Azure dev 서버에 업로드 될 때 이벤트를 내보내도록 하는 지시문으로 보호 합니다.

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    if (app.IsDevelopment())
    {
#if DEBUG
        configuration.DisableTelemetry = true;

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.