Application Insights для консольных приложений .NET

Предупреждение

Используйте пакет Microsoft.ApplicationInsights.WorkerService и связанные инструкции из Application Insights для приложений службы рабочих ролей (не HTTP) для консольных приложений. Она совместима с версиями .NET Core с долгосрочной поддержкой (LTS) и платформа .NET Framework или более поздней версии.

Application Insights позволяет отслеживать доступность, производительность и использование вашего веб-приложения.

Начало работы

  • В портал Azure создайте ресурс Application Insights.

  • Скопируйте строку подключения. Найдите строку подключения в раскрывающемся списке Основные компоненты созданного ресурса.

  • Установите последнюю версию пакета Microsoft.ApplicationInsights .

  • Задайте строку подключения в коде перед отслеживанием каких-либо данных телеметрии (или задайте APPLICATIONINSIGHTS_CONNECTION_STRING переменную среды). После этого вы сможете вручную отслеживать данные телеметрии и просматривать их в портал 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!");
    

    Примечание

    Данные телеметрии не отправляются мгновенно. Элементы пакетируются и отправляются пакетом SDK Для ApplicationInsights. Консольные приложения завершаю работу после вызова Track() методов.

    Данные телеметрии могут быть отправлены Flush()DelaySleep/только после завершения работы приложения, как показано в полном примере далее в этой статье. Sleep не требуется, если вы используете InMemoryChannel.

  • Установите последнюю версию пакета Microsoft.ApplicationInsights.DependencyCollector . Он автоматически отслеживает HTTP, SQL или другие вызовы внешних зависимостей.

Вы можете инициализировать и настроить Application Insights из кода или с помощью ApplicationInsights.config файла. Выполните инициализацию как можно раньше.

Примечание

ApplicationInsights.config не поддерживается приложениями .NET Core.

Использование файла конфигурации

Для приложений на основе платформа .NET Framework по умолчанию пакет SDK Application Insights ищет ApplicationInsights.config файл в рабочем каталоге при TelemetryConfiguration создании. Чтение файла конфигурации не поддерживается в .NET Core.

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

Можно также указать путь к файлу конфигурации:

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

Полный пример файла конфигурации можно получить, установив последнюю версию пакета Microsoft.ApplicationInsights.WindowsServer . Ниже приведена минимальная конфигурация для коллекции зависимостей, эквивалентная примеру кода:

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

Настройка сбора данных телеметрии из кода

Примечание

Чтение файла конфигурации не поддерживается в .NET Core.

  • Во время запуска приложения создайте и настройте DependencyTrackingTelemetryModule экземпляр . Он должен быть одноэлементным и сохраняться в течение времени существования приложения.

    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);
    
  • Добавьте общие инициализаторы телеметрии:

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

    Если вы создали конфигурацию с помощью обычного TelemetryConfiguration() конструктора, необходимо дополнительно включить поддержку корреляции. Он не требуется, если вы считываете конфигурацию из файла или используете TelemetryConfiguration.CreateDefault() или TelemetryConfiguration.Active.

    configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
    
  • Также может потребоваться установить и инициализировать модуль сборщика счетчиков производительности, как описано на этом веб-сайте.

Полный пример

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