Application Insights für .NET-Konsolenanwendungen

Warnung

Verwenden Sie das Microsoft.ApplicationInsights.WorkerService-Paket und die zugehörigen Anweisungen aus Application Insights für Workerdienstanwendungen (nicht-HTTP-Anwendungen) für Konsolenanwendungen. Es ist mit LTS-Versionen (Long Term Support) von .NET Core und .NET Framework oder höher kompatibel.

Mit Application Insights können Sie Ihre Webanwendung auf Verfügbarkeit, Leistung und Nutzung überwachen.

Erste Schritte

  • Erstellen Sie im Azure-Portal eine Application Insights-Ressource.

  • Speichern Sie eine Kopie der Verbindungszeichenfolge. Die Verbindungszeichenfolge finden Sie in der Dropdownliste Essentials der neuen Ressource, die Sie erstellt haben.

  • Installieren Sie das neueste Microsoft.ApplicationInsights-Paket.

  • Legen Sie die Verbindungszeichenfolge in Ihrem Code fest, bevor Sie Telemetriedaten nachverfolgen (oder legen Sie die Umgebungsvariable APPLICATIONINSIGHTS_CONNECTION_STRING fest). Anschließend sollten Sie Telemetriedaten manuell nachverfolgen und im Azure-Portal anzeigen können.

    // 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!");
    

    Hinweis

    Telemetriedaten werden nicht sofort gesendet. Elemente werden vom Application Insights-SDK zusammengefasst und gesendet. Konsolenanwendungen werden nach dem Aufrufen von Track() Methoden beendet.

    Telemetriedaten können erst gesendet, wenn Flush() und Sleep/Delay durchgeführt wurden, bevor die Anwendung beendet wird, wie im vollständigen Beispiel weiter unten in diesem Artikel gezeigt. Sleep ist nicht erforderlich, wenn Sie InMemoryChannel verwenden.

  • Installieren Sie die neueste Version des Microsoft.ApplicationInsights.DependencyCollector-Pakets. Es verfolgt automatisch HTTP-, SQL- und einige andere externe Abhängigkeitsaufrufe.

Sie können Application Insights im Code initialisieren und konfigurieren oder dazu die Datei ApplicationInsights.config verwenden. Stellen Sie sicher, dass die Initialisierung so früh wie möglich erfolgt.

Hinweis

ApplicationInsights.config wird von .NET Core-Anwendungen nicht unterstützt.

Verwenden der Konfigurationsdatei

Für eine auf .NET Framework basierende Anwendung sucht das Application Insights-SDK standardmäßig im Arbeitsverzeichnis nach der Datei ApplicationInsights.config, wenn TelemetryConfiguration erstellt wird. Das Lesen der Konfigurationsdatei wird unter .NET Core nicht unterstützt.

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

Sie können auch einen Pfad zur Konfigurationsdatei angeben:

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

Ein vollständiges Beispiel der Konfigurationsdatei erhalten Sie, wenn Sie die neueste Version des Pakets Microsoft.ApplicationInsights.WindowsServer installieren. Dies ist die minimale Konfiguration für die Abhängigkeitssammlung, die dem Codebeispiel entspricht:

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

Konfigurieren der Telemetrieerfassung im Code

Hinweis

Das Lesen der Konfigurationsdatei wird unter .NET Core nicht unterstützt.

  • Erstellen und konfigurieren Sie beim Starten der Anwendung eine DependencyTrackingTelemetryModule-Instanz. Diese muss ein Singleton sein und für die Lebensdauer der Anwendung beibehalten werden.

    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);
    
  • Fügen Sie gebräuchliche Telemetrieinitialisierer hinzu:

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

    Wenn Sie die Konfiguration mit einem einfachen TelemetryConfiguration()-Konstruktor erstellt haben, müssen Sie außerdem Korrelationsunterstützung aktivieren. Dies ist nicht erforderlich, wenn Sie die Konfiguration aus einer Datei lesen bzw. TelemetryConfiguration.CreateDefault() oder TelemetryConfiguration.Active verwendet haben.

    configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
    
  • Sie können auch das Modul für die Erfassung von Leistungsindikatoren installieren und initialisieren (siehe Beschreibung auf dieser Website).

Vollständiges Beispiel

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