Application Insights для приложений Worker Service (не HTTP)

Пакет SDK Application Insights для рабочей службы — это новый пакет SDK, который лучше всего подходит для рабочих нагрузок, отличных от HTTP, таких как обмен сообщениями, фоновые задачи и консольные приложения. Эти типы приложений не имеют понятия входящего HTTP-запроса, как традиционное веб-приложение ASP.NET/ASP.NET Core. По этой причине использование пакетов Application Insights для ASP.NET или ASP.NET Core приложений не поддерживается.

Новый пакет SDK сам не выполняет сбор данных телеметрии. Вместо этого он использует другие известные автоматические сборщики Application Insights, такие как DependencyCollector, PerfCounterCollector и ApplicationInsightsLoggingProvider. Этот пакет SDK предоставляет методы расширения для IServiceCollection включения и настройки сбора данных телеметрии.

Поддерживаемые сценарии

Пакет SDK Application Insights для службы Worker Service лучше всего подходит для приложений, работающих не по протоколу HTTP, независимо от того, где или как они выполняются. Если приложение работает и имеет сетевое подключение к Azure, можно собирать данные телеметрии. Мониторинг Application Insights поддерживается везде, где поддерживается .NET Core. Этот пакет можно использовать в недавно появившейся рабочей службе .NET Core, фоновых задачах в ASP.NET Core и консольных приложениях, таких как .NET Core и платформа .NET Framework.

Предварительные требования

У вас должна быть допустимая строка подключения Application Insights. Эта строка необходима для отправки любых данных телеметрии в Application Insights. Если необходимо создать новый ресурс Application Insights для получения строки подключения, см. статью Создание ресурса Application Insights.

Примечание

Поддержка приема ключей инструментирования будет завершена 31 марта 31, 2025 г. Функция продолжит работать, но не будет обновляться или поддерживаться. Перейдите на строки подключения, чтобы использовать новые возможности.

Использование пакета SDK Application Insights для службы рабочей роли

  1. Установите в приложение пакет Microsoft.ApplicationInsights.WorkerService. В следующем фрагменте кода показаны изменения, которые необходимо добавить в файл проекта .csproj :

        <ItemGroup>
            <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.13.1" />
        </ItemGroup>
    
  2. Настройте строку подключения в переменной APPLICATIONINSIGHTS_CONNECTION_STRING среды или в конфигурации (appsettings.json).

    Снимок экрана: строка подключения и обзор Application Insights.

  3. Получение экземпляра ILogger или TelemetryClient экземпляра из контейнера внедрения зависимостей (DI) путем вызова serviceProvider.GetRequiredService<TelemetryClient>(); или с помощью внедрения конструктора. Этот шаг активирует настройку модулей и автоматического TelemetryConfiguration сбора.

Конкретные инструкции для каждого типа приложений приведены в следующих разделах.

Приложение .NET Core LTS Worker Service

Полный пример доступен на веб-сайте NuGet.

  1. Скачайте и установите долгосрочную поддержку .NET Core (LTS).

  2. Создайте новый проект службы рабочей роли с помощью шаблона нового проекта Visual Studio или командной строки dotnet new worker.

  3. Установите в приложение пакет Microsoft.ApplicationInsights.WorkerService.

  4. Добавьте services.AddApplicationInsightsTelemetryWorkerService(); в метод CreateHostBuilder() класса Program.cs, как показано в следующем примере.

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>();
                    services.AddApplicationInsightsTelemetryWorkerService();
                });
    
  5. Измените в Worker.cs соответствии со следующим примером:

        using Microsoft.ApplicationInsights;
        using Microsoft.ApplicationInsights.DataContracts;
    
        public class Worker : BackgroundService
        {
            private readonly ILogger<Worker> _logger;
            private TelemetryClient _telemetryClient;
            private static HttpClient _httpClient = new HttpClient();
    
            public Worker(ILogger<Worker> logger, TelemetryClient tc)
            {
                _logger = logger;
                _telemetryClient = tc;
            }
    
            protected override async Task ExecuteAsync(CancellationToken stoppingToken)
            {
                while (!stoppingToken.IsCancellationRequested)
                {
                    _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
    
                    using (_telemetryClient.StartOperation<RequestTelemetry>("operation"))
                    {
                        _logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights");
                        _logger.LogInformation("Calling bing.com");
                        var res = await _httpClient.GetAsync("https://bing.com");
                        _logger.LogInformation("Calling bing completed with status:" + res.StatusCode);
                        _telemetryClient.TrackEvent("Bing call event completed");
                    }
    
                    await Task.Delay(1000, stoppingToken);
                }
            }
        }
    
  6. Задание строки подключения.

    Снимок экрана: строка подключения и обзор Application Insights.

    Примечание

    Рекомендуется указать строку подключения в конфигурации. В следующем примере кода показано, как указать строку подключения в appsettings.json. Проследите за тем, чтобы appsettings.json был скопирован в корневую папку приложения во время публикации.

        {
            "ApplicationInsights":
            {
                "ConnectionString" : "InstrumentationKey=00000000-0000-0000-0000-000000000000;"
            },
            "Logging":
            {
                "LogLevel":
                {
                    "Default": "Warning"
                }
            }
        }
    

Либо укажите строку подключения в переменной APPLICATIONINSIGHTS_CONNECTION_STRING среды.

Как правило, задает строку подключения для приложений, APPLICATIONINSIGHTS_CONNECTION_STRING развернутых в веб-приложениях в качестве веб-заданий.

Примечание

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

Фоновые задачи ASP.NET Core с размещенными службами

В этом документе описывается создание фоновых задач в приложении ASP.NET Core.

Полный пример доступен на этой странице GitHub.

  1. Установите в приложение пакет Microsoft.ApplicationInsights.WorkerService.

  2. Добавьте services.AddApplicationInsightsTelemetryWorkerService(); в метод ConfigureServices(), как показано в следующем примере:

        public static async Task Main(string[] args)
        {
            var host = new HostBuilder()
                .ConfigureAppConfiguration((hostContext, config) =>
                {
                    config.AddJsonFile("appsettings.json", optional: true);
                })
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddLogging();
                    services.AddHostedService<TimedHostedService>();
    
                    // connection string is read automatically from appsettings.json
                    services.AddApplicationInsightsTelemetryWorkerService();
                })
                .UseConsoleLifetime()
                .Build();
    
            using (host)
            {
                // Start the host
                await host.StartAsync();
    
                // Wait for the host to shutdown
                await host.WaitForShutdownAsync();
            }
        }
    

    Следующий код предназначен для TimedHostedService, где находится логика фоновой задачи:

        using Microsoft.ApplicationInsights;
        using Microsoft.ApplicationInsights.DataContracts;
    
        public class TimedHostedService : IHostedService, IDisposable
        {
            private readonly ILogger _logger;
            private Timer _timer;
            private TelemetryClient _telemetryClient;
            private static HttpClient httpClient = new HttpClient();
    
            public TimedHostedService(ILogger<TimedHostedService> logger, TelemetryClient tc)
            {
                _logger = logger;
                this._telemetryClient = tc;
            }
    
            public Task StartAsync(CancellationToken cancellationToken)
            {
                _logger.LogInformation("Timed Background Service is starting.");
    
                _timer = new Timer(DoWork, null, TimeSpan.Zero,
                    TimeSpan.FromSeconds(1));
    
                return Task.CompletedTask;
            }
    
            private void DoWork(object state)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
    
                using (_telemetryClient.StartOperation<RequestTelemetry>("operation"))
                {
                    _logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights");
                    _logger.LogInformation("Calling bing.com");
                    var res = httpClient.GetAsync("https://bing.com").GetAwaiter().GetResult();
                    _logger.LogInformation("Calling bing completed with status:" + res.StatusCode);
                    _telemetryClient.TrackEvent("Bing call event completed");
                }
            }
        }
    
  3. Задание строки подключения. Используйте то же appsettings.json , что и в предыдущем примере службы рабочей роли .NET Core LTS .

Консольное приложение .NET Core/платформа .NET Framework

Как упоминалось в начале этой статьи, новый пакет можно использовать для включения телеметрии Application Insights даже из обычного консольного приложения. Этот пакет предназначен для NetStandard2.0, поэтому его можно использовать для консольных приложений в .NET Core LTS или более поздней версии, а также платформа .NET Framework LTS или выше.

Полный пример доступен на этой странице GitHub.

  1. Установите в приложение пакет Microsoft.ApplicationInsights.WorkerService.

  2. Измените Файл Program.cs , как показано в следующем примере:

        using Microsoft.ApplicationInsights;
        using Microsoft.ApplicationInsights.DataContracts;
        using Microsoft.ApplicationInsights.WorkerService;
        using Microsoft.Extensions.DependencyInjection;
        using Microsoft.Extensions.Logging;
        using System;
        using System.Net.Http;
        using System.Threading.Tasks;
    
        namespace WorkerSDKOnConsole
        {
            class Program
            {
                static async Task Main(string[] args)
                {
                    // Create the DI container.
                    IServiceCollection services = new ServiceCollection();
    
                    // Being a regular console app, there is no appsettings.json or configuration providers enabled by default.
                    // Hence instrumentation key/ connection string and any changes to default logging level must be specified here.
                    services.AddLogging(loggingBuilder => loggingBuilder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>("Category", LogLevel.Information));
                    services.AddApplicationInsightsTelemetryWorkerService((ApplicationInsightsServiceOptions options) => options.ConnectionString = "InstrumentationKey=<instrumentation key here>");
    
                    // To pass a connection string
                    // - aiserviceoptions must be created
                    // - set connectionstring on it
                    // - pass it to AddApplicationInsightsTelemetryWorkerService()
    
                    // Build ServiceProvider.
                    IServiceProvider serviceProvider = services.BuildServiceProvider();
    
                    // Obtain logger instance from DI.
                    ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();
    
                    // Obtain TelemetryClient instance from DI, for additional manual tracking or to flush.
                    var telemetryClient = serviceProvider.GetRequiredService<TelemetryClient>();
    
                    var httpClient = new HttpClient();
    
                    while (true) // This app runs indefinitely. Replace with actual application termination logic.
                    {
                        logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
    
                        // Replace with a name which makes sense for this operation.
                        using (telemetryClient.StartOperation<RequestTelemetry>("operation"))
                        {
                            logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights");
                            logger.LogInformation("Calling bing.com");                    
                            var res = await httpClient.GetAsync("https://bing.com");
                            logger.LogInformation("Calling bing completed with status:" + res.StatusCode);
                            telemetryClient.TrackEvent("Bing call event completed");
                        }
    
                        await Task.Delay(1000);
                    }
    
                    // Explicitly call Flush() followed by sleep is required in console apps.
                    // This is to ensure that even if application terminates, telemetry is sent to the back-end.
                    telemetryClient.Flush();
                    Task.Delay(5000).Wait();
                }
            }
        }
    

Это консольное приложение также использует то же значение по умолчанию TelemetryConfiguration. Его можно настроить так же, как и в примерах, приведенных в предыдущих разделах.

Запуск приложения

Запустите приложение. Рабочие роли из всех предыдущих примеров каждую секунду вызывают HTTP для bing.com, а также создают несколько журналов с помощью ILogger. Эти строки заключены в StartOperation вызов TelemetryClient, который используется для создания операции. В этом примере RequestTelemetry называется "операция".

Application Insights собирает эти журналы ILogger с уровнем серьезности Warning или выше по умолчанию и зависимостями. Они коррелируются RequestTelemetry с отношением "родители-потомки". Корреляция также работает в пределах процесса или сети. Например, если вызов был выполнен к другому отслеживаемму компоненту, он также коррелирует с этим родительским компонентом.

Эту пользовательскую операцию RequestTelemetry можно рассматривать как эквивалент входящего веб-запроса в типичном веб-приложении. Нет необходимости использовать операцию, но она лучше всего подходит для модели данных корреляции Application Insights. RequestTelemetry действует как родительская операция, и все данные телеметрии, созданные в итерации рабочей роли, рассматриваются как логически принадлежащие той же операции.

Этот подход также гарантирует, что все созданные данные телеметрии , как автоматически, так и вручную, будут иметь одинаковые operation_id. Так как выборка основана на operation_id, алгоритм выборки сохраняет или удаляет все данные телеметрии из одной итерации.

В следующих разделах перечислены полные данные телеметрии, автоматически собираемые Application Insights.

Интерактивные метрики

Для быстрой проверки правильности настройки мониторинга Application Insights можно использовать динамические метрики. Хотя на портале и в аналитике может потребоваться несколько минут, динамические метрики показывают использование ЦП выполняющегося процесса практически в реальном времени. Могут также отображаться другие данные телеметрии, такие как запросы, зависимости и трассировки.

Журналы ILogger

Журналы, создаваемые с помощью ILogger с предупреждением серьезности или выше, записываются автоматически. Чтобы изменить это поведение, явно переопределите конфигурацию ведения журнала для поставщика ApplicationInsights, как показано в следующем коде. Следующая конфигурация позволяет Application Insights собирать все журналы с уровнем серьезности Information и выше.

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    },
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  }
}

Важно отметить, что в следующем примере поставщик Application Insights не будет собирать журналы Information. Он не фиксирует его, поскольку пакет SDK добавляет фильтр ведения журнала по умолчанию, который дает указание ApplicationInsights записывать только журналы с уровнем серьезности Warning и выше. Для Application Insights требуется явное переопределение.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

Дополнительные сведения см. в документации по ILogger , чтобы настроить уровни журналов, которые фиксируются Application Insights.

Зависимости

Сбор зависимостей по умолчанию включен. В статье Отслеживание зависимостей в Application Insights описываются автоматически собираемые зависимости, а также приведены инструкции по отслеживанию вручную.

EventCounter

Параметр EventCounterCollectionModule включен по умолчанию и отслеживает набор счетчиков по умолчанию из приложений .NET Core LTS. Набор отслеживаемых счетчиков приведен в руководстве по EventCounter. Он также содержит инструкции по настройке списка.

Отслеживание других данных телеметрии вручную

Хотя пакет SDK автоматически собирает данные телеметрии, как описано, в большинстве случаев вам потребуется отправить другие данные телеметрии в Application Insights. Рекомендуемый способ отслеживания других данных телеметрии — получение экземпляра TelemetryClient из метода внедрения зависимостей, а затем вызов одного из поддерживаемых TrackXXX() методов API. Еще одним типичным сценарием является настраиваемое отслеживание операций. Этот подход демонстрируется в предыдущих примерах рабочих ролей.

Настройка SDK Application Insights

Значение по умолчаниюTelemetryConfiguration, используемое пакетом SDK службы рабочей роли, аналогично автоматической конфигурации, используемой в приложении ASP.NET или ASP.NET Core, за вычетом инициализаторов телеметрии, используемых для обогащения данных телеметрии из HttpContext.

Вы можете настроить SDK Application Insights для Worker Service, изменив конфигурацию по умолчанию. Пользователи пакета SDK Application Insights для ASP.NET Core, вероятно, знакомы с процедурой изменения конфигурации с помощью встроенного метода внедрения зависимостей ASP.NET Core. Пакет SDK службы рабочей роли также основан на аналогичных принципах. Внесите почти все изменения конфигурации ConfigureServices() в разделе, вызвав соответствующие методы в IServiceCollection, как описано в следующем разделе.

Примечание

При использовании этого пакета SDK изменение конфигурации путем изменения TelemetryConfiguration.Active не поддерживается, и изменения не отражаются.

Использование ApplicationInsightsServiceOptions

Можно изменить несколько общих параметров, передавая ApplicationInsightsServiceOptions в AddApplicationInsightsTelemetryWorkerService, как в следующем примере.

using Microsoft.ApplicationInsights.WorkerService;

public void ConfigureServices(IServiceCollection services)
{
    var aiOptions = new ApplicationInsightsServiceOptions();
    // Disables adaptive sampling.
    aiOptions.EnableAdaptiveSampling = false;

    // Disables QuickPulse (Live Metrics stream).
    aiOptions.EnableQuickPulseMetricStream = false;
    services.AddApplicationInsightsTelemetryWorkerService(aiOptions);
}

ApplicationInsightsServiceOptions в этом пакете SDK находится в пространстве имен Microsoft.ApplicationInsights.WorkerService, а не Microsoft.ApplicationInsights.AspNetCore.Extensions, как в пакете SDK для ASP.NET Core.

В следующей таблице перечислены часто используемые параметры в ApplicationInsightsServiceOptions.

Параметр Описание Значение по умолчанию
EnableQuickPulseMetricStream Включение или отключение функции динамических метрик. True
EnableAdaptiveSampling Включение и отключение адаптивной выборки. True
EnableHeartbeat Включите или отключите функцию пульса, которая периодически (15 минут по умолчанию) отправляет пользовательскую метрику с именем "HeartBeatState" со сведениями о среде выполнения, такой как версия .NET и среда Azure, если применимо. True
AddAutoCollectedMetricExtractor Включите или отключите средство извлечения AutoCollectedMetrics, которое представляет собой обработчик телеметрии, который отправляет предварительно агрегированные метрики о запросах и зависимостях перед выборкой. True
EnableDiagnosticsTelemetryModule Включение и отключение DiagnosticsTelemetryModule. Отключение этого параметра приведет к тому, что следующие параметры будут игнорироваться: EnableHeartbeat, EnableAzureInstanceMetadataTelemetryModuleи EnableAppServicesHeartbeatTelemetryModule. True

Самый актуальный список см. в разделе Настраиваемые параметры в ApplicationInsightsServiceOptions.

Дискретизация

Пакет SDK Application Insights для службы рабочей роли поддерживает как выборку с фиксированной частотой, так и адаптивную выборку. Адаптивная выборка включена по умолчанию. Выборку можно отключить с помощью EnableAdaptiveSampling параметра в ApplicationInsightsServiceOptions.

Чтобы настроить другие параметры выборки, можно использовать следующий пример:

using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.WorkerService;

public void ConfigureServices(IServiceCollection services)
{
    // ...

    var aiOptions = new ApplicationInsightsServiceOptions();
    
    // Disable adaptive sampling.
    aiOptions.EnableAdaptiveSampling = false;
    services.AddApplicationInsightsTelemetryWorkerService(aiOptions);

    // Add Adaptive Sampling with custom settings.
    // The following adds adaptive sampling with 15 items per sec.
    services.Configure<TelemetryConfiguration>((telemetryConfig) =>
        {
            var builder = telemetryConfig.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
            builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 15);
            builder.Build();
        });
    //...
}

Дополнительные сведения см. в документе Выборка .

Добавление инициализаторов телеметрии

С помощью инициализаторов телеметрии можно задать свойства, которые отправляются со всеми данными телеметрии.

Добавьте в контейнер любой новый инициализатор DependencyInjection телеметрии, а пакет SDK автоматически добавит их в TelemetryConfiguration.

    using Microsoft.ApplicationInsights.Extensibility;

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
        services.AddApplicationInsightsTelemetryWorkerService();
    }

Удаление инициализаторов телеметрии

Инициализаторы телеметрии по умолчанию доступны. Чтобы удалить все или некоторые инициализаторы телеметрии, используйте следующий пример кода после вызова метода AddApplicationInsightsTelemetryWorkerService().

   public void ConfigureServices(IServiceCollection services)
   {
        services.AddApplicationInsightsTelemetryWorkerService();
        // Remove a specific built-in telemetry initializer.
        var tiToRemove = services.FirstOrDefault<ServiceDescriptor>
                            (t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
        if (tiToRemove != null)
        {
            services.Remove(tiToRemove);
        }

        // Remove all initializers.
        // This requires importing namespace by using Microsoft.Extensions.DependencyInjection.Extensions;
        services.RemoveAll(typeof(ITelemetryInitializer));
   }

Добавление обработчиков данных телеметрии

Можно добавить пользовательские обработчики данных телеметрии в TelemetryConfiguration с помощью метода расширения AddApplicationInsightsTelemetryProcessor в IServiceCollection. Обработчики телеметрии используются в расширенных сценариях фильтрации , чтобы обеспечить более прямой контроль над тем, что включается или исключается из данных телеметрии, отправляемых в Application Insights. Используйте следующий пример:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();
        // If you have more processors:
        services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();
    }

Настройка или удаление модулей телеметрии по умолчанию

Модули телеметрии в Application Insights используются для автоматического сбора данных телеметрии о конкретных рабочих нагрузках, не требуя ручного отслеживания.

Следующие модули автоматического сбора включены по умолчанию. Эти модули отвечают за автоматический сбор данных телеметрии. Их можно отключать или настраивать для изменения поведения по умолчанию.

  • DependencyTrackingTelemetryModule
  • PerformanceCollectorModule
  • QuickPulseTelemetryModule
  • AppServicesHeartbeatTelemetryModule (В настоящее время существует проблема, связанная с этим модулем телеметрии. Временное решение см. в разделе GitHub Issue 1689.)
  • AzureInstanceMetadataTelemetryModule

Чтобы настроить любой модуль телеметрии по умолчанию, используйте метод ConfigureTelemetryModule<T> расширения в IServiceCollection, как показано в следующем примере:

    using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;
    using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetryWorkerService();

            // The following configures QuickPulseTelemetryModule.
            // Similarly, any other default modules can be configured.
            services.ConfigureTelemetryModule<QuickPulseTelemetryModule>((module, o) =>
            {
                module.AuthenticationApiKey = "keyhere";
            });

            // The following removes PerformanceCollectorModule to disable perf-counter collection.
            // Similarly, any other default modules can be removed.
            var performanceCounterService = services.FirstOrDefault<ServiceDescriptor>
                                        (t => t.ImplementationType == typeof(PerformanceCollectorModule));
            if (performanceCounterService != null)
            {
                services.Remove(performanceCounterService);
            }
    }

Настройка канала телеметрии

Каналом по умолчанию является ServerTelemetryChannel. Его можно переопределить, как показано в следующем примере:

using Microsoft.ApplicationInsights.Channel;

    public void ConfigureServices(IServiceCollection services)
    {
        // Use the following to replace the default channel with InMemoryChannel.
        // This can also be applied to ServerTelemetryChannel.
        services.AddSingleton(typeof(ITelemetryChannel), new InMemoryChannel() {MaxTelemetryBufferCapacity = 19898 });

        services.AddApplicationInsightsTelemetryWorkerService();
    }

Динамическое отключение телеметрии

Чтобы отключить данные телеметрии по условию и динамически, можно разрешить экземпляр TelemetryConfiguration с контейнером внедрения зависимостей ASP.NET Core в любом месте кода и установить для него флаг DisableTelemetry.

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetryWorkerService();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, TelemetryConfiguration configuration)
    {
        configuration.DisableTelemetry = true;
        ...
    }

Часто задаваемые вопросы

В этом разделы приводятся ответы на часто задаваемые вопросы.

Какой пакет необходимо использовать?

Сценарий приложения .NET Core Пакет
Без HostedServices AspNetCore
С HostedServices AspNetCore (не WorkerService)
С HostedServices, мониторинг только HostedServices WorkerService (редкий сценарий)

Могут ли HostedServices внутри приложения .NET Core внедрить в него TelemetryClient с помощью пакета AspNetCore?

Да. Конфигурация будет использоваться совместно с остальной частью веб-приложения.

Как можно отследить данные телеметрии, сбор которых не происходит автоматически?

Получите экземпляр с помощью внедрения конструктора TelemetryClient и вызовите необходимый TrackXXX() метод. Мы не рекомендуем создавать новые экземпляры TelemetryClient. Отдельный TelemetryClient экземпляр уже зарегистрирован в контейнере DependencyInjection , который совместно TelemetryConfiguration использует остальные данные телеметрии. Создавать новые экземпляры TelemetryClient рекомендуется только в том случае, если вам нужна конфигурация, отличная от настроек для основной части телеметрии.

Можно ли использовать интегрированную среду разработки Visual Studio для подключения Application Insights к проекту Worker Service?

Сейчас подключение интегрированной среды разработки Visual Studio поддерживается только для ASP.NET/ASP.NET Core приложений. Этот документ будет обновлен, когда Visual Studio получит поддержку подключения приложений рабочей службы.

Можно ли включить мониторинг Application Insights с помощью таких средств, как агент Azure Monitor Application Insights (ранее монитор состояния версии 2)?

Нет. Агент Application Insights Azure Monitor в настоящее время поддерживает только .NET LTS .

Если я запускаю приложение в Linux, все ли функции будут поддерживаться?

Да. Поддержка функций для пакета SDK одинакова на всех платформах, за исключением следующих моментов:

  • Счетчики производительности поддерживаются только в Windows, за исключением показателей загрузки ЦП или памяти для процесса, отражаемых в динамических метриках.

  • Несмотря на то что ServerTelemetryChannel включено по умолчанию, если приложение выполняется в Linux или macOS, канал автоматически не создает папку локального хранилища для временного хранения данных телеметрии в случае проблем с сетью. Из-за этого ограничения данные телеметрии теряются при наличии временных проблем с сетью или сервером. Чтобы устранить эту проблему, настройте локальную папку для канала:

    using Microsoft.ApplicationInsights.Channel;
    using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
    
        public void ConfigureServices(IServiceCollection services)
        {
            // The following will configure the channel to use the given folder to temporarily
            // store telemetry items during network or Application Insights server issues.
            // User should ensure that the given folder already exists
            // and that the application has read/write permissions.
            services.AddSingleton(typeof(ITelemetryChannel),
                                    new ServerTelemetryChannel () {StorageFolder = "/tmp/myfolder"});
            services.AddApplicationInsightsTelemetryWorkerService();
        }
    

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

Консольное приложение .NET Core. Используйте этот пример, если вы используете консольное приложение, написанное на .NET Core (2.0 или более поздней версии) или платформа .NET Framework (4.7.2 или более поздней версии).

ASP.NET Core фоновых задач с помощью HostedServices. Используйте этот пример, если вы находитесь в ASP.NET Core и создаете фоновые задачи в соответствии с официальными рекомендациями.

Служба рабочей роли .NET Core. Используйте этот пример, если у вас есть приложение .NET Core LTS Worker Service в соответствии с официальными рекомендациями.

Пакет SDK с открытым исходным кодом

Чтение кода и дополнительные наработки.

Последние обновления и исправления ошибок см. в заметках о выпуске.

Дальнейшие действия