Application Insights pour les applications console .NET

Avertissement

Utilisez le package Microsoft.ApplicationInsights.WorkerService et les instructions associées d’Application Insights pour les applications de service Worker (applications non HTTP) pour les applications console. Il est compatible avec les versions de support à long terme (LTS) de .NET Core et .NET Framework ou ultérieures.

Application Insights vous permet de surveiller la disponibilité, les performances et l’utilisation de votre application web.

Bien démarrer

  • Dans le Portail Azure, créez une ressource Application Insights.

  • Prenez une copie de la chaîne de connexion. Recherchez la chaîne de connexion dans la liste déroulante Bases de la ressource que vous venez de créer.

  • Installez le package Microsoft.ApplicationInsights le plus récent.

  • Définissez la chaîne de connexion dans votre code avant de suivre toute données de télémétrie (ou définissez la variable d’environnement APPLICATIONINSIGHTS_CONNECTION_STRING). Après cela, vous devriez pouvoir suivre manuellement les données de télémétrie et les visualiser dans le portail Azure.

    // You may use different options to create configuration as shown later in this article
    TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
    configuration.ConnectionString = <Copy connection string from Application Insights Resource Overview>;
    var telemetryClient = new TelemetryClient(configuration);
    telemetryClient.TrackTrace("Hello World!");
    

    Notes

    Les données de télémétrie ne sont pas envoyées instantanément. Les éléments sont traités par lot et envoyés par le kit SDK Application Insights. Les applications console se terminent après l’appel de méthodes Track().

    La télémétrie peut ne pas être envoyée à moins que Flush() et Sleep/Delay ne soient effectués avant la fermeture de l'application, comme indiqué dans l'exemple complet plus loin dans cet article. Sleep n’est pas obligatoire si vous utilisez InMemoryChannel.

  • Installez la dernière version du package Microsoft.ApplicationInsights.DependencyCollector. Elle suit automatiquement le HTTP, le SQL ou d'autres appels de dépendance externes.

Vous pouvez initialiser et configurer Application Insights à partir du code ou à l’aide du fichier ApplicationInsights.config. Vérifiez que l’initialisation se produit dès que possible.

Notes

ApplicationInsights.config n’est pas pris en charge par les applications .NET Core.

Utiliser le fichier de configuration

Pour des applications basées sur .NET Framework, par défaut, le SDK Application Insights recherche le fichier ApplicationInsights.config dans le répertoire de travail au moment de la création de TelemetryConfiguration. La lecture du fichier config n’est pas pris en charge sur .NET Core.

TelemetryConfiguration config = TelemetryConfiguration.Active; // Reads ApplicationInsights.config file if present

Vous pouvez également spécifier un chemin du fichier de configuration :

using System.IO;
TelemetryConfiguration configuration = TelemetryConfiguration.CreateFromConfiguration(File.ReadAllText("C:\\ApplicationInsights.config"));
var telemetryClient = new TelemetryClient(configuration);

Vous pouvez obtenir un exemple complet du fichier de configuration en installant la version la plus récente du package Microsoft.ApplicationInsights.WindowsServer. Voici la configuration minimale pour la collecte de dépendances qui est équivalente à l’exemple de code :

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
  <ConnectionString>"Copy connection string from Application Insights Resource Overview"</ConnectionString>
  <TelemetryInitializers>
    <Add Type="Microsoft.ApplicationInsights.DependencyCollector.HttpDependenciesParsingTelemetryInitializer, Microsoft.AI.DependencyCollector"/>
  </TelemetryInitializers>
  <TelemetryModules>
    <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
      <ExcludeComponentCorrelationHttpHeadersOnDomains>
        <Add>core.windows.net</Add>
        <Add>core.chinacloudapi.cn</Add>
        <Add>core.cloudapi.de</Add>
        <Add>core.usgovcloudapi.net</Add>
        <Add>localhost</Add>
        <Add>127.0.0.1</Add>
      </ExcludeComponentCorrelationHttpHeadersOnDomains>
      <IncludeDiagnosticSourceActivities>
        <Add>Microsoft.Azure.ServiceBus</Add>
        <Add>Microsoft.Azure.EventHubs</Add>
      </IncludeDiagnosticSourceActivities>
    </Add>
  </TelemetryModules>
  <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
</ApplicationInsights>

Configurer la collecte de données de télémétrie à partir du code

Notes

La lecture du fichier config n’est pas pris en charge sur .NET Core.

  • Lors du démarrage de l’application, créez et configurez une instance DependencyTrackingTelemetryModule. Il doit être singleton et doit être conservé pour la durée de vie de l’application.

    var module = new DependencyTrackingTelemetryModule();
    
    // prevent Correlation Id to be sent to certain endpoints. You may add other domains as needed.
    module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.windows.net");
    //...
    
    // enable known dependency tracking, note that in future versions, we will extend this list. 
    // please check default settings in https://github.com/Microsoft/ApplicationInsights-dotnet-server/blob/develop/Src/DependencyCollector/DependencyCollector/ApplicationInsights.config.install.xdt
    
    module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.ServiceBus");
    module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.EventHubs");
    //....
    
    // initialize the module
    module.Initialize(configuration);
    
  • Ajouter des initialiseurs de télémétrie communs :

    // ensures proper DependencyTelemetry.Type is set for Azure RESTful API calls
    configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());
    

    Si vous avez créé une configuration avec un constructeur TelemetryConfiguration() simple, vous devez également activer la prise en charge des corrélations. Ce n’est pas nécessaire si vous lisez la configuration à partir du fichier, utilisé TelemetryConfiguration.CreateDefault() ou TelemetryConfiguration.Active.

    configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
    
  • Vous pouvez également vouloir installer et initialiser le module collecteur Compteur de performances comme décrit sur ce site web.

Exemple complet

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Extensibility;
using System.Net.Http;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();

            configuration.ConnectionString = "removed";
            configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());

            var telemetryClient = new TelemetryClient(configuration);
            using (InitializeDependencyTracking(configuration))
            {
                // run app...

                telemetryClient.TrackTrace("Hello World!");

                using (var httpClient = new HttpClient())
                {
                    // Http dependency is automatically tracked!
                    httpClient.GetAsync("https://microsoft.com").Wait();
                }

            }

            // before exit, flush the remaining data
            telemetryClient.Flush();

            // Console apps should use the WorkerService package.
            // This uses ServerTelemetryChannel which does not have synchronous flushing.
            // For this reason we add a short 5s delay in this sample.
            
            Task.Delay(5000).Wait();

            // If you're using InMemoryChannel, Flush() is synchronous and the short delay is not required.

        }

        static DependencyTrackingTelemetryModule InitializeDependencyTracking(TelemetryConfiguration configuration)
        {
            var module = new DependencyTrackingTelemetryModule();

            // prevent Correlation Id to be sent to certain endpoints. You may add other domains as needed.
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.windows.net");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.chinacloudapi.cn");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.cloudapi.de");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.usgovcloudapi.net");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("localhost");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("127.0.0.1");

            // enable known dependency tracking, note that in future versions, we will extend this list. 
            // please check default settings in https://github.com/microsoft/ApplicationInsights-dotnet-server/blob/develop/WEB/Src/DependencyCollector/DependencyCollector/ApplicationInsights.config.install.xdt

            module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.ServiceBus");
            module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.EventHubs");

            // initialize the module
            module.Initialize(configuration);

            return module;
        }
    }
}