Поделиться через


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

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

Примечание.

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

Новый пакет 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 для получения строка подключения, см. статью "Строки подключения".

Примечание.

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

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

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

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

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

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

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

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

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

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

  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 .

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

Как упоминалось в начале этой статьи, новый пакет можно использовать для включения телеметрии Application Insights даже из обычного консольного приложения. Этот пакет предназначен 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 называется "операция".

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

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

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

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

Динамические метрики

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

Журналы 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 . Набор отслеживаемых счетчиков приведен в руководстве по 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 live metrics (also known as QuickPulse).
    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 Application Insights для рабочей службы поддерживает выборку фиксированной частоты и адаптивную выборку. Адаптивная выборка включена по умолчанию. Выборка может быть отключена EnableAdaptiveSampling с помощью параметра ApplicationInsightsServiceOptions.

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

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

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

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

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