Application Insights pro konzolové aplikace .NET

Upozornění

Pro konzolové aplikace použijte balíček Microsoft.ApplicationInsights.WorkerService a přidružené pokyny z Application Insights pro aplikace pracovních procesů (aplikace jiné než HTTP). Je kompatibilní s verzemi dlouhodobé podpory (LTS) rozhraní .NET Core a .NET Framework nebo novějšími.

Application Insights umožňuje monitorovat dostupnost, výkon a využití webové aplikace.

Začínáme

  • V Azure Portal vytvořte prostředek Application Insights.

  • Pořiďte kopii připojovacího řetězce. Připojovací řetězec vyhledejte v rozevíracím seznamu Základy nového prostředku, který jste vytvořili.

  • Nainstalujte nejnovější balíček Microsoft.ApplicationInsights .

  • Před sledováním jakékoli telemetrie (nebo APPLICATIONINSIGHTS_CONNECTION_STRING nastavením proměnné prostředí) nastavte v kódu připojovací řetězec. Potom byste měli být schopni ručně sledovat telemetrii a zobrazovat ji v 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!");
    

    Poznámka

    Telemetrie se neodesílají okamžitě. Položky jsou dávkově odesílány sadou ApplicationInsights SDK. Aplikace konzoly se ukončí po volání Track() metod.

    Telemetrická data se nemusí odesílat, pokud Flush() se aplikace ukončí, aDelaySleep/pokud se neskončí, jak je znázorněno v úplném příkladu dále v tomto článku. Sleep není potřeba, pokud používáte InMemoryChannel.

  • Nainstalujte nejnovější verzi balíčku Microsoft.ApplicationInsights.DependencyCollector . Automaticky sleduje volání HTTP, SQL nebo některé jiné externí závislosti.

Application Insights můžete inicializovat a konfigurovat z kódu nebo pomocí ApplicationInsights.config souboru . Ujistěte se, že inicializace probíhá co nejdříve.

Poznámka

aplikace .NET Core nepodporujíApplicationInsights.config.

Použití konfiguračního souboru

V případě aplikací založených na rozhraní .NET Framework sada Application Insights SDK ve TelemetryConfiguration výchozím nastavení hledá ApplicationInsights.config při vytváření soubor v pracovním adresáři. Čtení konfiguračního souboru není v .NET Core podporované.

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

Můžete také zadat cestu ke konfiguračnímu souboru:

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

Úplný příklad konfiguračního souboru získáte instalací nejnovější verze balíčku Microsoft.ApplicationInsights.WindowsServer . Tady je minimální konfigurace pro shromažďování závislostí, která je ekvivalentní příkladu kódu:

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

Konfigurace shromažďování telemetrie z kódu

Poznámka

Čtení konfiguračního souboru není v .NET Core podporované.

  • Během spouštění aplikace vytvořte a nakonfigurujte DependencyTrackingTelemetryModule instanci. Musí být jednoúčelový a musí být zachován po celou dobu životnosti aplikace.

    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);
    
  • Přidejte běžné inicializátory telemetrie:

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

    Pokud jste vytvořili konfiguraci pomocí prostého TelemetryConfiguration() konstruktoru, musíte navíc povolit podporu korelace. Není potřeba, pokud jste načetli konfiguraci ze souboru nebo použili TelemetryConfiguration.CreateDefault() nebo TelemetryConfiguration.Active.

    configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
    
  • Můžete také nainstalovat a inicializovat modul kolektoru čítače výkonu, jak je popsáno na tomto webu.

Úplný příklad

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