Deaktivieren Sie Anwendungseinblicke beim Debuggen


99

Wie kann ich Application Insights bei Verwendung einer Debug-Konfiguration automatisch deaktivieren und nur bei Veröffentlichung aktivieren?
Ist dies möglich, ohne einen anderen Instrumentierungsschlüssel nur für das Debuggen zu erstellen?

Ich habe trackeventAnweisungen im ganzen Code verteilt, sie in eine Debug-Präprozessor-Prüfung einzuschließen, ist keine ideale Lösung.

Meine aktuelle Lösung ist die festlegen Build Actionder ApplicationInsights.configDatei auf , Nonedamit sie nicht kopiert wird in das Ausgabeverzeichnis des Projektes, aber das ist nicht ein Prozess, der auf der Basis der aktiven Build - Konfiguration automatisiert werden kann.

Es gibt einen Entwicklermodus, der jedoch manuell geändert werden muss (wenn es möglich war, die Konfigurationsdatei unter bestimmten Bedingungen festzulegen, wurde auch das gelöste Problem mit dem Instrumentierungsschlüssel geleert). Siehe http://apmtips.com/blog/2015/02/02/developer-mode/

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

Antworten:


69

Sie können versuchen, die TelemetryConfiguration.DisableTelemetry- Eigenschaft zu verwenden .

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

Ich habe versucht, diese Aussage kurz zuvor hinzuzufügen WindowsAppInitializer.InitializeAsync();(ich habe es auch danach versucht), aber der Ereigniszähler für Einblicke in Visual Studio-Anwendungen hat zugenommen. Ich konnte nicht sehen, ob diese Sitzung effektiv im Azure-Portal aufgezeichnet wurde, da zu viele Sitzungen und Benutzer vorhanden sind. Ich werde es in der Nacht versuchen.
Alberto Rivelli

Alberto, ich habe so getestet - 'Code' öffentlich versiegelte Teilklasse MainPage: Page {TelemetryClient Telemetry; public MainPage () {this.InitializeComponent (); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetry = new TelemetryClient (); } private void button_Click (Objektabsender, RoutedEventArgs e) {telemetry.TrackEvent ("Event Custom"); } 'Code' .. und scheint zu funktionieren. Ich werde auch einige andere Seiten ausprobieren. wird Sie auf dem
Laufenden

Außerdem können Sie im Visual Studio selbst überprüfen, ob die Telemetrieereignisse gesendet werden oder nicht. Ich habe gerade diesen gestrigen Tag gepostet. So erhalten Sie die Anzahl der Application Insights-Ereignisse von Visual Studio 2015
Abhijit Jana

Das habe ich geschrieben, der Zähler für Visual Studio-Events hat zugenommen.
Alberto Rivelli

2
Selbst wenn DisableTelemetry auf true gesetzt ist und ein leerer Instrumentierungsschlüssel vorhanden ist, erfassen die Telemetriemodule weiterhin Daten. Die Daten werden nicht gesendet, aber gesammelt. Siehe dieses Problem, das für App Insights protokolliert wurde: github.com/Microsoft/ApplicationInsights-dotnet/issues/397 Wenn Sie die Debütausgabe deaktivieren möchten, können Sie die unter github.com/Microsoft/ApplicationInsights-dotnet/issues/310 beschriebenen Schritte ausführen
Guillaume LaHaye

61

Als Ergänzung zu den anderen Lösungen würde ich vorschlagen, Folgendes hinzuzufügen Global.asax: Sagen wir :

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;
}

Dies hat den Vorteil, dass keine Änderungen an den Konfigurationen erforderlich sind und es mit einigen Tools wie ReSharper besser funktioniert, die es besser verstehen als #-directives.


1
Normalerweise stellen wir die DEBUG-Konfiguration für das Staging und die RELEASE-Konfiguration für die Produktion bereit. In beiden Fällen kann EIGENE Telemetrie aktiviert sein. Durch Ihre Änderung wird die Telemetrie für die Staging-Umgebung deaktiviert.
Sergey G.

1
@Sergey Ich würde vorschlagen, eine einzelne Konfiguration und dort eine STAGING-Variable zu definieren. Somit können Sie besser zwischen lokalem Debuggen unterscheiden. Eine andere Möglichkeit wäre, ein neues Symbol LOCAL zu definieren und es im ConditionalAttribut -attribute zu ersetzen .
Alexander Schmidt

Normalerweise haben wir unterschiedliche DB-Verbindungszeichenfolgen, Speicherkonten und andere Einstellungen für STAG und PROD (wie FB-App-ID, SendGrid-Konto, App-Einstellungen usw.). Darüber hinaus haben wir lokal den Azure-Speicheremulator und lokalen SQL Express. Es gibt also keine Möglichkeit, mit einer einzelnen Konfiguration zu arbeiten. Wir benötigen 3 verschiedene Konfigurationen und die lokale sollte die deaktivierte Telemetrie haben.
Sergey G.

Sie können weiterhin ein benutzerdefiniertes Symbol für mehr als eine Ihrer Konfigurationen definieren. Anstatt Conditional ("DEBUG") zu verwenden, können Sie Conditional ("WHATEVER") ausführen. Alternativ können Sie einen Wert aus appSettings abrufen und mithilfe von Transformationen in nicht lokalen Umgebungen wegblasen.
Joelmdev

34

Für ASP.NET Core-Projekte sind die App Insights standardmäßig aktiviert, wodurch tatsächlich eine Menge Informationen im Debug-Fenster protokolliert werden.

Um es zu deaktivieren, gehen Sie zu "WERKZEUGE -> Optionen -> Projekte und Lösungen -> Webprojekte" und aktivieren Sie "Lokale Application Insights für Asp.Net Core-Webprojekte deaktivieren".

Unten sehen Sie das Bild zum Deaktivieren lokaler App Insights.

Bild

Weitere Informationen zu diesem Problem finden Sie in der offiziellen Github-Ausgabe hier


22

Wie in der Frage erläutert, wird keine ApplicationInsights.config bereitgestellt oder bereitgestellt, ohne <instrumentationkey>key</instrumentationkey>dass Blockereignisse generiert werden. Sie können dann den Instrumentierungsschlüssel in den Code einfügen (in meinem Fall nur bei Veröffentlichung).

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

Jeder, TelemetryClientder nach diesem Aufruf erstellt wird, hat den richtigen Schlüssel und verfolgt Ereignisse, sodass Sie den Code nicht an allen Stellen ändern müssen. Wenn Sie die obige Methode nicht aufrufen oder den Parameter leer lassen, werden Ereignisse blockiert, da kein Schlüssel konfiguriert ist.

Grundsätzlich ApplicationInsights.configüberschreibt die Datei jeden Code, der den Instrumentierungsschlüssel festlegt. Wenn Sie den <instrumentationkey>key</instrumentationkey>darin enthaltenen Code entfernen , können Sie den Schlüssel mit Code konfigurieren. Wenn Sie die Datei vollständig entfernen, funktioniert es nicht.

Hier ist die Bestätigung: "Wenn Sie den Schlüssel dynamisch festlegen möchten, z. B. wenn Sie Ergebnisse aus Ihrer Anwendung an verschiedene Ressourcen senden möchten, können Sie den Schlüssel in der Konfigurationsdatei weglassen und stattdessen im Code festlegen."

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


1
Sehen Sie diesen Blog, wie man dies mit einem separaten verwendetApplicationInsights.Debug/Release.config
Yahoo Serious

16

Ich habe mich für beide Ansätze entschieden. Ich habe das InstrumentationKeynach verschoben Web.configund es wird durch die Transformation von Web.Release.configoder ersetzt Web.Debug.config. (Vergessen Sie nicht, es aus der ApplicationInsights.configDatei zu entfernen ). Dann habe ich diese Methode aus dem aufgerufenApplication_Start()

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

das ist heute veraltet, wie machen wir das heute richtig?
l - '' '' '

15

Beim Ausführen einer ASP.NET Core 2.1-Webanwendung mit Visual Studio 2017 (15.9.2) wurde durch "Deaktivieren lokaler Anwendungserkenntnisse für Asp.Net Core-Webprojekte" die Ausgabe in meinem Debug-Fenster nicht gelöscht.

Das Hinzufügen von Folgendem zu Configure () in Startup.cs hat den Job jedoch erledigt.

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

Beachten Sie, dass IsTracingDisabled die Schlüssellösung war , aber ich habe DisableTelemetry für ein gutes Maß verlassen! Außerdem ist es hilfreich, beide Zeilen nebeneinander zu haben, wenn Sie nach ähnlichen Referenzen zwischen .NET Framework- und .NET Core-Projekten in derselben Lösung suchen.


2
das ist heute veraltet, wie machen wir das heute richtig?
l - '' '' '

11

Ich hatte gerade das gleiche Problem.

Wir wollten die Einstellung in der web.config steuern und haben daher in unseren App-Einstellungen einen DisableAITelemetry-Schlüssel hinzugefügt:

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

Bei Live- und Demo-Builds wird kein Wert eingefügt (daher wird standardmäßig false verwendet).

Wir könnten es dann lösen, indem wir Folgendes hinzufügen:

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

10

Etwas anderes Spiel bei einigen anderen Lösungen. Fügen Sie dies in Ihre global.asax ein:

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

Die Debug-Ausgabe von App Insights wird deaktiviert, wenn sie unter dem Debugger ausgeführt wird. Sie kann jedoch unter Strg + F5-Szenarien und auf Testservern veröffentlichten Debug-Builds zugelassen werden


10

In einer ASP.NET Core-Anwendung können Sie Startus.cs Folgendes hinzufügen, um Application Insights in der Entwicklungsumgebung zu deaktivieren:

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

Wenn Sie dies direkt nach dem builder.AddApplicationInsightsSettings();Befehl zum Konstruktor hinzufügen, werden keine AI-Protokolle mehr angezeigt, die Ihre Debug-Konsole verstopfen.


Nein ... hat für mich keinen Unterschied gemacht (mit ASP.Net Core 2.1). Im Ausgabefenster wird immer noch ein Berg von "Application Insights Telemetry" -Nachrichten angezeigt.
Mike Gledhill

7

Wir haben festgestellt, dass der einfachste Weg, um zu verhindern, dass es in das Debug-Protokoll zurückverfolgt wird, so einfach ist wie:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

5

Microsoft.ApplicationInsights.AspNetCore Version 2.1

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

Soll dies die Application Insights Telemetry (unconfigured)Nachrichten aus dem Debug-Bereich in Visual Studio verbergen - denn wenn ja, scheint es nicht zu funktionieren :-(
Simon_Weaver

3
Ich bin mir nicht sicher, was diese Art von Nachricht ist. Ich glaube, Sie möchten TelemetryDebugWriter.IsTracingDisabled = true;diese entfernen.
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
das ist heute veraltet, wie machen wir das heute richtig?
l - '' '' '

0

Seit .NET Core 3.1:

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

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

1
Hier sind die Dokumente dazu, einschließlich des Abrufs
Noah Stahl
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.