Application Insights för .NET-konsolprogram

Varning

Använd paketet Microsoft.ApplicationInsights.WorkerService och tillhörande instruktioner från Application Insights för Worker Service-program (icke-HTTP-program) för konsolprogram. Den är kompatibel med LTS-versioner (Long Term Support) av .NET Core och .NET Framework eller senare.

Med Application Insights kan du övervaka webbprogrammet för tillgänglighet, prestanda och användning.

Kom igång

  • I Azure Portal skapar du en Application Insights-resurs.

  • Ta en kopia av anslutningssträngen. Hitta anslutningssträngen i listrutan Essentials för den nya resursen som du skapade.

  • Installera det senaste Microsoft.ApplicationInsights-paketet .

  • Ange anslutningssträngen i koden innan du spårar telemetri (eller anger APPLICATIONINSIGHTS_CONNECTION_STRING miljövariabeln). Därefter bör du kunna spåra telemetri manuellt och se den i Azure Portal.

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

    Anteckning

    Telemetri skickas inte direkt. Objekt batchhanteras och skickas av ApplicationInsights SDK. Konsolappar avslutas efter anrop Track() .

    Telemetri kanske inte skickas om inte Flush() och Sleep/Delay görs innan appen avslutas, vilket visas i det fullständiga exemplet senare i den här artikeln. Sleep krävs inte om du använder InMemoryChannel.

  • Installera den senaste versionen av paketet Microsoft.ApplicationInsights.DependencyCollector . Den spårar automatiskt HTTP, SQL eller några andra externa beroendeanrop.

Du kan initiera och konfigurera Application Insights från koden eller med hjälp ApplicationInsights.config av filen. Kontrollera att initieringen sker så tidigt som möjligt.

Anteckning

ApplicationInsights.config stöds inte av .NET Core-program.

Använda konfigurationsfilen

För .NET Framework-baserade program letar Application Insights SDK som standard efter ApplicationInsights.config filen i arbetskatalogen när TelemetryConfiguration den skapas. Läsning av konfigurationsfilen stöds inte på .NET Core.

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

Du kan också ange en sökväg till konfigurationsfilen:

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

Du kan få ett fullständigt exempel på konfigurationsfilen genom att installera den senaste versionen av paketet Microsoft.ApplicationInsights.WindowsServer . Här är den minimala konfigurationen för beroendeinsamling som motsvarar kodexemplet:

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

Konfigurera telemetrisamling från kod

Anteckning

Läsning av konfigurationsfilen stöds inte på .NET Core.

  • Under programstarten skapar och konfigurerar du en DependencyTrackingTelemetryModule instans. Den måste vara singleton och måste bevaras under programmets livslängd.

    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);
    
  • Lägg till vanliga telemetriinitierare:

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

    Om du har skapat en konfiguration med en oformaterad TelemetryConfiguration() konstruktor måste du även aktivera korrelationsstöd. Det behövs inte om du läser konfigurationen från en fil eller använder TelemetryConfiguration.CreateDefault() eller TelemetryConfiguration.Active.

    configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
    
  • Du kanske också vill installera och initiera insamlaren för prestandaräknare enligt beskrivningen på den här webbplatsen.

Fullständigt exempel

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