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

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

Примечание.

В следующей документации используется классический API приложения Аналитика. Долгосрочный план приложения Аналитика заключается в сборе данных с помощью OpenTelemetry. Дополнительные сведения см. в разделе "Включить Azure Monitor OpenTelemetry" для приложений .NET, Node.js, Python и Java.

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

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

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

Необходимые компоненты

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

Примечание.

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

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

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

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

    Screenshot displaying Application Insights overview and connection string.

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

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

Приложение службы рабочей роли .NET Core

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

  1. Скачайте и установите пакет SDK для .NET.

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

  3. Добавьте Microsoft.Application Аналитика. Пакет 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. Задание строки подключения.

    Screenshot that shows Application Insights overview and connection string.

    Примечание.

    Рекомендуется указать строку подключения в конфигурации. В следующем примере кода показано, как указать строку подключения в 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 .

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

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

Полный пример представлен на этой странице 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 называется "операция".

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

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

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

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

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

Для быстрой проверки правильности настройки мониторинга 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, чтобы настроить уровни журналов, которые фиксируются приложением Аналитика.

Зависимости

Сбор зависимостей по умолчанию включен. В статье отслеживание зависимостей в приложении Аналитика объясняется зависимости, которые автоматически собираются, а также содержат шаги по отслеживанию вручную.

EventCounter

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

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

Хотя пакет SDK автоматически собирает данные телеметрии, как описано, в большинстве случаев необходимо отправить другие данные телеметрии в приложение Аналитика. Рекомендуемым способом отслеживания других данных телеметрии является получение экземпляра 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 не поддерживается и изменения не будут отражены.

Использование Application Аналитика ServiceOptions

Вы можете изменить несколько стандартных параметров, передавая 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.

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

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

Образец

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

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

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.ApplicationInsights.Extensibility;

var builder = WebApplication.CreateBuilder(args);

builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
{
   var telemetryProcessorChainBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;

   // Using adaptive sampling
   telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5);

   // Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling:
   // telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
});

builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
   EnableAdaptiveSampling = false,
});

var app = 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. Процессоры телеметрии используются в расширенных сценариях фильтрации, чтобы обеспечить более прямой контроль над включенными или исключенными из телеметрии, которую вы отправляете в приложение Аналитика. Используйте следующий пример:

    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 WorkerService
С 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)?

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

Если я запускаю приложение в 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 фоновые задачи с HostedServices: используйте этот пример, если вы находитесь в ASP.NET Core и создаете фоновые задачи в соответствии с официальным руководством.

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

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

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

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

Следующие шаги