Désactiver les informations sur les applications dans le débogage

99

Comment puis-je désactiver automatiquement les insights d'application lors de l'utilisation d'une configuration de débogage et l'activer uniquement lors de la publication?
Est-il possible de faire cela sans créer une autre clé d'instrumentation uniquement pour le débogage?

J'ai des trackeventdéclarations éparpillées dans tout le code, les enfermer dans une vérification de préprocesseur de débogage n'est pas une solution idéale.

Ma solution actuelle est de définir le Build Actiondu ApplicationInsights.configfichier Noneafin qu'il soit pas copié dans le répertoire de sortie du projet, mais ce n'est pas un processus qui peut être automatisé en fonction de la configuration de construction active.

Il existe un mode développeur mais doit être modifié manuellement (s'il était possible de définir conditionnellement le fichier de configuration, le vidage de l'instrumentationkey a également résolu le problème). Voir http://apmtips.com/blog/2015/02/02/developer-mode/

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

Alberto Rivelli
la source

Réponses:

69

Vous pouvez essayer d'utiliser la propriété TelemetryConfiguration.DisableTelemetry Quelque chose comme ça.

#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
Abhijit Jana
la source
J'ai essayé d'ajouter cette déclaration juste avant WindowsAppInitializer.InitializeAsync();(j'ai également essayé après) mais le compteur d'événements de Visual Studio Application Insights a augmenté. Je n'ai pas pu voir si cette session a été effectivement enregistrée dans le portail Azure car il y a trop de sessions et d'utilisateurs. J'essaierai pendant la nuit.
Alberto Rivelli
Alberto, j'ai testé comme ceci - «code» classe partielle scellée publique MainPage: Page {TelemetryClient telemetry; public MainPage () {this.InitializeComponent (); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetry = new TelemetryClient (); } private void button_Click (expéditeur de l'objet, RoutedEventArgs e) {telemetry.TrackEvent ("Event Custom"); } 'code' .. et semble fonctionner. J'essaierai également d'autres pages. vous tiendra au courant
Abhijit Jana
En outre, à partir de Visual Studio lui-même, vous pouvez vérifier si les événements de télémétrie sont envoyés ou non. Je viens de publier ce jour Comment obtenir le nombre d'événements Application Insights à partir de Visual Studio 2015
Abhijit Jana
C'est ce que j'ai écrit, le compteur d'événements du studio visuel a augmenté.
Alberto Rivelli
2
Même avec DisableTelemetry défini sur true et une clé d'instrumentation vide, les modules de télémétrie continueront à collecter des données. Les données ne seront pas envoyées, mais elles seront collectées. Consultez ce problème consigné sur App Insights: github.com/Microsoft/ApplicationInsights-dotnet/issues/397 Si vous souhaitez désactiver la première sortie, vous pouvez suivre les étapes trouvées sur github.com/Microsoft/ApplicationInsights-dotnet/issues/310
Guillaume LaHaye
61

En plus des autres solutions, je suggérerais d'ajouter ce qui suit, disons au 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;
}

L'avantage de ceci est qu'il ne nécessite aucun changement dans les configurations et qu'il fonctionne mieux avec certains outils comme ReSharper qui le comprendront mieux que #-directives.

Alexander Schmidt
la source
1
Nous déployons généralement la configuration DEBUG dans la configuration intermédiaire et la configuration RELEASE dans la production. Les deux peuvent avoir la télémétrie OWN activée. Ainsi, votre modification désactivera la télémétrie pour l'environnement de préparation.
Sergey G.15
1
@Sergey Je suggérerais de définir une configuration unique et de définir une variable STAGING ici. Ainsi, vous pouvez mieux distinguer le débogage localement. Une autre option serait de définir un nouveau symbole LOCAL et de le remplacer dans l' Conditionalattribut.
Alexander Schmidt
généralement, nous avons différentes chaînes de connexion DB, comptes de stockage et autres paramètres pour STAG et PROD (comme l'ID d'application FB, le compte SendGrid, les paramètres d'application, etc.). De plus - localement, nous avons un émulateur de stockage Azure et SQL Express local. Il n'y a donc aucun moyen de travailler avec une seule configuration. Nous avons besoin de 3 configurations différentes et la configuration locale doit avoir la télémétrie désactivée.
Sergey G.
Vous pouvez toujours définir un symbole personnalisé sur plus d'une de vos configurations. Ensuite, au lieu d'utiliser Conditionnel ("DEBUG"), vous pouvez faire Conditionnel ("WHATEVER"). Vous pouvez également récupérer une valeur dans appSettings et utiliser des transformations pour la faire sauter dans des environnements non locaux.
joelmdev
34

Pour les projets ASP.NET Core, App Insights est activé par défaut, ce qui enregistre en fait une tonne d'informations dans la fenêtre de débogage.

Pour le désactiver, allez dans "OUTILS -> Options -> Projets et solutions -> Projets Web" et cochez "Désactiver Application Insights locale pour les projets Web Asp.Net Core".

Vous trouverez ci-dessous l'image pour désactiver les informations sur les applications locales.

Image

Pour plus d'informations sur le problème, vous pouvez voir le problème officiel de github ici

Siva Chamarthi
la source
22

Comme expliqué dans la question, ne pas déployer ou déployer un ApplicationInsights.config sans <instrumentationkey>key</instrumentationkey>bloquer la génération d'événements. Vous pouvez ensuite mettre la clé d'instrumentation dans le code (uniquement à la libération dans mon cas)

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

Chaque TelemetryClientcréé après cet appel aura la bonne clé et suivra les événements afin que vous n'ayez pas à changer le code à tous les endroits. Ne pas appeler la méthode ci-dessus ou laisser le paramètre vide bloquera les événements car aucune clé n'est configurée.

Fondamentalement, le ApplicationInsights.configfichier remplace tout code qui définit la clé d'instrumentation, en supprimant l' <instrumentationkey>key</instrumentationkey>intérieur, il vous permettra d'utiliser le code pour configurer la clé. Si vous supprimez complètement le fichier, cela ne fonctionne pas.

Voici la confirmation: "Si vous souhaitez définir la clé de manière dynamique - par exemple si vous souhaitez envoyer les résultats de votre application à différentes ressources - vous pouvez omettre la clé du fichier de configuration et la définir dans le code à la place."

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

Alberto Rivelli
la source
1
Voir ce blog comment utiliser cela avec un autreApplicationInsights.Debug/Release.config
Yahoo Serious
16

J'ai décidé d'utiliser les deux approches. J'ai déplacé le InstrumentationKeyvers le Web.configet il sera remplacé par la transformation de Web.Release.configou Web.Debug.config. (n'oubliez pas de le supprimer du ApplicationInsights.configfichier). Ensuite, j'ai appelé cette méthode duApplication_Start()

public static void RegisterTelemetryInstrumentationKey()
{
    if (string.IsNullOrWhiteSpace(WebConfigurationManager.AppSettings["TelemetryInstrumentationKey"])
    {
        TelemetryConfiguration.Active.DisableTelemetry = true;
    }
    else
    {
        TelemetryConfiguration.Active.InstrumentationKey = AppSettings.TelemetryInstrumentationKey;
    }
}
Sergey G.
la source
c'est obsolète aujourd'hui, comment le faisons-nous aujourd'hui correctement?
l --'''''--------- '' '' '' '' '' ''
15

L'exécution d'une application Web ASP.NET Core 2.1 avec Visual Studio 2017 (15.9.2) le «Désactiver Application Insights local pour les projets Web Asp.Net Core» n'a pas effacé la sortie dans ma fenêtre de débogage.

Cependant, l'ajout de ce qui suit à Configure () dans Startup.cs a fait le travail;

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

Notez que IsTracingDisabled était la solution clé , mais je suis parti dans DisableTelemetry pour faire bonne mesure! De plus, avoir les deux lignes côte à côte est utile lors de la recherche de références similaires entre des projets .NET Framework et .NET Core dans la même solution.

alv
la source
2
c'est obsolète aujourd'hui, comment le faisons-nous aujourd'hui correctement?
l --'''''--------- '' '' '' '' '' ''
11

J'ai juste eu le même problème.

Nous voulions contrôler le paramètre dans le fichier web.config, nous avons donc ajouté une clé DisableAITelemetry dans les paramètres de notre application:

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

Avec les versions en direct et de démonstration, nous n'inclurons pas de valeur (pour qu'elle soit par défaut false).

Nous pourrions alors le résoudre en ajoutant ceci:

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

Jeu légèrement différent sur certaines des autres solutions. Mettez ceci dans votre global.asax:

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

Il désactivera la sortie de débogage des informations d'application lors de l'exécution sous le débogueur, mais l'autorisera sous les scénarios Ctrl + F5 et les versions de débogage publiées sur les serveurs de test

Josh
la source
10

Dans une application ASP.NET Core, vous pouvez ajouter les éléments suivants à Startus.cs pour désactiver Application Insights dans l'environnement de développement:

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

Ajoutez ceci au constructeur, juste après la builder.AddApplicationInsightsSettings();commande et vous ne verrez plus les journaux AI obstruer votre console de débogage.

saluer
la source
Non ... n'a fait aucune différence pour moi (avec ASP.Net Core 2.1). Toujours obtenir une montagne de messages «Application Insights Telemetry» dans la fenêtre Sortie.
Mike Gledhill
7

Nous avons trouvé le moyen le plus simple de l'empêcher de suivre dans le journal de débogage est aussi simple que:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
Peter Jarrett
la source
5

Microsoft.ApplicationInsights.AspNetCore version 2.1

services.AddApplicationInsightsTelemetry(options =>
{
    options.EnableDebugLogger = false;
});
JJS
la source
Est-ce censé masquer les Application Insights Telemetry (unconfigured)messages du panneau de débogage dans Visual Studio - car si tel est le cas, cela ne semble pas fonctionner :-(
Simon_Weaver
3
Je ne sais pas quel est ce genre de message. Je pense que vous cherchez TelemetryDebugWriter.IsTracingDisabled = true;à les supprimer.
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
//...
}
SZL
la source
1
c'est obsolète aujourd'hui, comment le faisons-nous aujourd'hui correctement?
l --'''''--------- '' '' '' '' '' ''
0

Depuis .NET Core 3.1:

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

var telemetryClient = new TelemetryClient(telemetryConfiguration);   // Use this instance
TelemetryDebugWriter.IsTracingDisabled = true;
feu de soie
la source
2
Voici la documentation pour ce faire, y compris l'obtention de la TelemetryConfiguration via l'injection de dépendances: docs.microsoft.com/en-us/azure/azure-monitor/app/…
Noah Stahl
0

À partir d'ASP.NET Core 3.1:

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

(ce qui précède peut être appelé de n'importe où, mais le plus tôt dans le cycle de vie de votre application, mieux c'est).

Les deux peuvent être utilisés ensemble pour supprimer toute activité Application Insights dans votre code. Je garde avec une #if DEBUGdirective pour m'assurer qu'AppInsights ne fait rien sur ma machine locale, mais émet des événements lorsqu'il est téléchargé sur notre serveur de développement Azure:

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

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
Ian Kemp
la source