Condividi tramite


Application Insights per le applicazioni console .NET

Avviso

Usare il pacchetto Microsoft.ApplicationInsights.WorkerService e le istruzioni associate da Application Insights per le applicazioni del servizio di lavoro (applicazioni non HTTP) per le applicazioni console. È compatibile con le versioni LTS (Long Term Support) di .NET Core e .NET Framework o versioni successive.

Application Insights consente di monitorare la disponibilità, le prestazioni e l'uso dell'applicazione Web.

Introduzione

  • Nella portale di Azure creare una risorsa di Application Insights.

  • Eseguire una copia della stringa di connessione. Trovare la stringa di connessione nell'elenco a discesa Informazioni di base della nuova risorsa creata.

  • Installare il pacchetto Microsoft.ApplicationInsights più recente.

  • Impostare la stringa di connessione nel codice prima di tenere traccia dei dati di telemetria (o impostare la APPLICATIONINSIGHTS_CONNECTION_STRING variabile di ambiente). Successivamente, dovrebbe essere possibile tenere traccia dei dati di telemetria manualmente e visualizzarlo nel portale di 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!");
    

    Nota

    I dati di telemetria non vengono inviati immediatamente. Gli elementi vengono inseriti in batch e inviati da ApplicationInsights SDK. Le app console terminano dopo aver chiamato i Track() metodi.

    I dati di telemetria potrebbero non essere inviati a meno che Flush() non vengano eseguiti primaDelaySleep/dell'uscita dall'app, come illustrato nell'esempio completo più avanti in questo articolo. Sleep non è obbligatorio se si usa InMemoryChannel.

  • Installare la versione più recente del pacchetto Microsoft.ApplicationInsights.DependencyCollector . Tiene traccia automaticamente di chiamate HTTP, SQL o altre chiamate di dipendenza esterna.

È possibile inizializzare e configurare Application Insights dal codice o usando ApplicationInsights.config il file . Verificare che l'inizializzazione venga eseguita non appena possibile.

Nota

ApplicationInsights.config non è supportato dalle applicazioni .NET Core.

Usare il file di configurazione

Per le applicazioni basate su .NET Framework, per impostazione predefinita, Application Insights SDK cerca il ApplicationInsights.config file nella directory di lavoro quando TelemetryConfiguration viene creato. La lettura del file di configurazione non è supportata in .NET Core.

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

È anche possibile specificare un percorso del file di configurazione:

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

È possibile ottenere un esempio completo del file di configurazione installando la versione più recente del pacchetto Microsoft.ApplicationInsights.WindowsServer . Ecco la configurazione minima per la raccolta di dipendenze equivalente all'esempio di codice:

<?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>

Configurare la raccolta di dati di telemetria dal codice

Nota

La lettura del file di configurazione non è supportata in .NET Core.

  • Durante l'avvio dell'applicazione, creare e configurare un'istanza DependencyTrackingTelemetryModule di . Deve essere singleton e deve essere mantenuto per la durata dell'applicazione.

    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);
    
  • Aggiungere inizializzatori di telemetria comuni:

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

    Se è stata creata la configurazione con un costruttore normale TelemetryConfiguration() , è necessario abilitare anche il supporto della correlazione. Non è necessario se si legge la configurazione da un file o se si usa TelemetryConfiguration.CreateDefault() o TelemetryConfiguration.Active.

    configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
    
  • È anche possibile installare e inizializzare il modulo dell'agente di raccolta contatore delle prestazioni come descritto in questo sito Web.

Esempio completo

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