デバッグでアプリケーションインサイトを無効にする


99

デバッグ構成を使用しているときにアプリケーションインサイトを自動的に無効にし、リリース時にのみ有効にするにはどうすればよいですか?
デバッグ専用の別のインストルメンテーションキーを作成せずにこれを行うことは可能ですか?

私が持っているtrackevent文は、デバッグプリプロセッサチェックの内側に、それらを囲む、コードの上にすべての散乱理想的なソリューションではありません。

私の現在の解決策は、プロジェクトの出力ディレクトリにコピーされないようにファイルのを設定するBuild ActionことApplicationInsights.configですNoneが、これはアクティブなビルド構成に基づいて自動化できるプロセスではありません。

開発者モードがありますが、手動で変更する必要があります(構成ファイルを条件付きで設定でき、instrumentationkeyを空にして問題を解決できた場合)。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ポータルに効果的に記録されているかどうかを確認できませんでした。夜にやってみます。
アルベルトリヴェリ2015

アルベルト、私はこのようにテストしました-'コード'公開封印された部分クラス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"); } 'コード' ..そして動作しているようです。他のページも試します。最新情報をお
届けし

また、Visual Studio自体から、テレメトリーイベントが送信されたかどうかを確認できます。昨日投稿したVisual Studio 2015からApplication Insightsのイベント数を取得する方法
Abhijit Jana

それは私が書いたものであり、ビジュアルスタジオのイベントカウンターが増加しました。
Alberto Rivelli 2015

2
DisableTelemetryをtrueに設定し、インストルメンテーションキーを空にしても、テレメトリモジュールはデータを収集し続けます。データは送信されませんが、収集されます。App Insightsに対して記録されたこの問題を参照してください:github.com/Microsoft/ApplicationInsights-dotnet/issues/397デビュー出力を無効にする場合は、github.com / Microsoft / ApplicationInsights-dotnet / issues / 310にある手順に従ってください。
Guillaume LaHaye 2017年

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

通常、DB接続文字列、ストレージアカウント、およびSTAGとPRODの他の設定(FBアプリID、SendGridアカウント、アプリ設定など)があります。さらに、ローカルにはAzureストレージエミュレーターとローカルSQL Expressがあります。したがって、単一の構成で作業する方法はありません。3つの異なる構成が必要で、ローカルの構成ではテレメトリを無効にする必要があります。
セルゲイG.

それでも、複数の構成でカスタムシンボルを定義できます。次に、Conditional( "DEBUG")を使用する代わりに、Conditional( "WHATEVER")を実行できます。または、appSettingsから値を取得し、変換を使用して、ローカル以外の環境でそれを吹き飛ばすこともできます。
joelmdev

34

ASP.NET Coreプロジェクトの場合、App Insightsはデフォルトでオンになっており、実際には大量の情報がデバッグウィンドウに記録されます。

これを無効にするには、「ツール->オプション->プロジェクトとソリューション-> Webプロジェクト」に移動し、「Asp.Net Core Webプロジェクトのローカルアプリケーションインサイトを無効にする」にチェックを入れます。

以下は、ローカルアプリインサイトを無効にするための画像です。

画像

この問題の詳細については、こちらの公式の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
Yahoo Serious

16

私は両方のアプローチを使用することにしました。をに移動しInstrumentationKeyました。これWeb.configWeb.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 Webアプリケーションを実行すると、「Asp.Net Core Webプロジェクトのローカルアプリケーションインサイトを無効にする」でデバッグウィンドウの出力が消去されませんでした。

ただし、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のデバッグパネルからメッセージを非表示にすることを想定していますか。そうでない場合、機能しないようです
。-

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;

1
ここでは、これをやって依存性注入を経てTelemetryConfigurationの取得などのためのドキュメントです:docs.microsoft.com/en-us/azure/azure-monitor/app/...
ノア・スタール

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開発サーバーにアップロードしたときにイベントを発行します。

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.