Usługa Application Insights dla aplikacji konsolowych platformy .NET

Ostrzeżenie

Użyj pakietu Microsoft.ApplicationInsights.WorkerService i skojarzonych instrukcji z usługi Application Insights dla aplikacji usługi Worker Service (aplikacji innych niż HTTP) dla aplikacji konsolowych. Jest ona zgodna z wersjami platformy .NET Core i .NET Framework lub nowszymi wersjami long term support (LTS).

Usługa Application Insights umożliwia monitorowanie aplikacji internetowej pod kątem dostępności, wydajności i użycia.

Rozpoczęcie pracy

  • W Azure Portal utwórz zasób usługi Application Insights.

  • Wykonaj kopię parametrów połączenia. Znajdź parametry połączenia na liście rozwijanej Podstawy nowo utworzonego zasobu.

  • Zainstaluj najnowszy pakiet Microsoft.ApplicationInsights .

  • Ustaw parametry połączenia w kodzie przed śledzeniem dowolnej telemetrii (lub ustaw zmienną APPLICATIONINSIGHTS_CONNECTION_STRING środowiskową). Następnie powinno być możliwe ręczne śledzenie danych telemetrycznych i wyświetlanie ich w 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!");
    

    Uwaga

    Dane telemetryczne nie są wysyłane natychmiast. Elementy są wsadowe i wysyłane przez zestaw SDK usługi ApplicationInsights. Aplikacje konsolowe zakończą działanie po wywołaniu Track() metod.

    Dane telemetryczne mogą nie być wysyłane, chyba że Flush() zostaną wykonane przedDelaySleep/zakończeniem działania aplikacji, jak pokazano w pełnym przykładzie w dalszej części tego artykułu. Sleep nie jest wymagane, jeśli używasz polecenia InMemoryChannel.

  • Zainstaluj najnowszą wersję pakietu Microsoft.ApplicationInsights.DependencyCollector . Automatycznie śledzi wywołania HTTP, SQL lub innych wywołań zależności zewnętrznych.

Usługę Application Insights można zainicjować i skonfigurować za pomocą kodu lub przy użyciu ApplicationInsights.config pliku. Upewnij się, że inicjowanie odbywa się tak szybko, jak to możliwe.

Uwaga

ApplicationInsights.config nie jest obsługiwane przez aplikacje platformy .NET Core.

Korzystanie z pliku konfiguracji

W przypadku aplikacji opartych na .NET Framework zestaw SDK usługi Application Insights domyślnie wyszukuje ApplicationInsights.config plik w katalogu roboczym podczas TelemetryConfiguration tworzenia. Odczytywanie pliku konfiguracji nie jest obsługiwane na platformie .NET Core.

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

Możesz również określić ścieżkę do pliku konfiguracji:

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

Pełny przykład pliku konfiguracji można uzyskać, instalując najnowszą wersję pakietu Microsoft.ApplicationInsights.WindowsServer . Oto minimalna konfiguracja kolekcji zależności, która jest równoważna przykładowi kodu:

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

Konfigurowanie zbierania danych telemetrycznych na podstawie kodu

Uwaga

Odczytywanie pliku konfiguracji nie jest obsługiwane na platformie .NET Core.

  • Podczas uruchamiania DependencyTrackingTelemetryModule aplikacji utwórz i skonfiguruj wystąpienie. Musi być pojedynczy i musi być zachowany przez cały okres istnienia aplikacji.

    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);
    
  • Dodaj typowe inicjatory telemetrii:

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

    Jeśli utworzono konfigurację przy użyciu zwykłego TelemetryConfiguration() konstruktora, należy dodatkowo włączyć obsługę korelacji. Nie jest to konieczne , jeśli odczytasz konfigurację z pliku lub użyto TelemetryConfiguration.CreateDefault() pliku lub TelemetryConfiguration.Active.

    configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
    
  • Możesz również zainstalować i zainicjować moduł modułu zbierającego Licznik wydajności zgodnie z opisem w tej witrynie internetowej.

Pełny przykład

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