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

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

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

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

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

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

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

Использование пакета SDK Application Insights для Worker Service

  1. Установите в приложение пакет Microsoft.ApplicationInsights.WorkerService. В следующем фрагменте кода показаны изменения, которые необходимо добавить в файл .csproj проекта.
    <ItemGroup>
        <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.13.1" />
    </ItemGroup>
  1. Вызовите метод расширения AddApplicationInsightsTelemetryWorkerService(string instrumentationKey) для IServiceCollection, указав ключ инструментирования. Его следует вызывать в начале приложения. Его точное расположение зависит от типа приложения.

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

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

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

Полный пример доступен здесь.

  1. Скачайте и установите .NET Core 3.0.

  2. Создайте новый проект Worker Service с помощью шаблона нового проекта 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();
            });
  1. Внесите изменения в файл 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);
            }
        }
    }
  1. Настройте ключ инструментирования.

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

    {
        "ApplicationInsights":
        {
            "InstrumentationKey": "putinstrumentationkeyhere"
        },
        "Logging":
        {
            "LogLevel":
            {
                "Default": "Warning"
            }
        }
    }

Кроме того, ключ инструментирования можно указать в любой из следующих переменных среды: APPINSIGHTS_INSTRUMENTATIONKEY либо ApplicationInsights:InstrumentationKey

Например:SET ApplicationInsights:InstrumentationKey=putinstrumentationkeyhere НИ SET APPINSIGHTS_INSTRUMENTATIONKEY=putinstrumentationkeyhere

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

Примечание

Ключ инструментирования в коде является предпочтительным вариантом по сравнению с переменной среды APPINSIGHTS_INSTRUMENTATIONKEY, которая, в свою очередь, является предпочтительной по отношению к другим вариантам.

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

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

Полный пример доступен здесь.

  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>();

                // instrumentation key 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");
            }
        }
    }
  1. Настройте ключ инструментирования. Используйте тот же самый код appsettings.json, что и в примере Worker Service для .NET Core 3.0 выше.

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

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

Полный пример доступен здесь.

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

  2. Внесите изменения в файл Program.cs, как показано в примере ниже.

    using Microsoft.ApplicationInsights;
    using Microsoft.ApplicationInsights.DataContracts;
    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 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("instrumentationkeyhere");

                // 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 под названием "operation"). Application Insights собирает эти записи журнала ILogger (по умолчанию — уровня предупреждения или выше) и зависимости и связывает их с RequestTelemetry отношением типа "родители-потомки". Эта связь также работает через границы процессов и сетей. Например, если был выполнен вызов к другому отслеживаемому компоненту, он также будет связан с этим родителем.

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

Ниже перечислены все данные телеметрии, автоматически собираемые службой Application Insights.

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

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

Журналы ILogger

Автоматически заносятся в журнал через ILogger записи с уровнем серьезности Warning и выше. В инструкциях для ILogger поясняется, как настроить уровни журналирования, которые будет фиксировать Application Insights.

Зависимости

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

EventCounter

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

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

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

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

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

Вы можете настроить SDK Application Insights для Worker Service, изменив конфигурацию по умолчанию. Пользователи пакета SDK Application Insights для ASP.NET Core, вероятно, знакомы с процедурой изменения конфигурации с помощью встроенного метода внедрения зависимостей ASP.NET Core. Пакет SDK для Worker Service использует аналогичные принципы. Все изменения конфигурации вносятся в раздел 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 Включение/отключение функции LiveMetrics Да
EnableAdaptiveSampling Включение/отключение адаптивной выборки Да
EnableHeartbeat Включение/отключение функции Heartbeats, которая периодически (по умолчанию каждые 15 минут) отправляет пользовательскую метрику HeartbeatState со сведениями о таких параметрах среды выполнения, как версия .NET, информация о среде Azure, если применимо, и т. д. Да
AddAutoCollectedMetricExtractor Включение/отключение экстрактора AutoCollectedMetrics, который представляет собой процессор телеметрии, передающий предварительно агрегированные метрики о запросах/зависимостях перед выборкой. Да
EnableDiagnosticsTelemetryModule Включение и отключение DiagnosticsTelemetryModule. Отключение этого параметра приведет к игнорированию следующих параметров: EnableHeartbeat, EnableAzureInstanceMetadataTelemetryModule, EnableAppServicesHeartbeatTelemetryModule Да

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

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

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

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

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();
        });
    //...
}

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

Добавление TelemetryInitializer

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

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

    using Microsoft.ApplicationInsights.Extensibility;

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

Удаление TelemetryInitializer

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

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

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

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

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

  • DependencyTrackingTelemetryModule
  • PerformanceCollectorModule
  • QuickPulseTelemetryModule
  • AppServicesHeartbeatTelemetryModule — в настоящее время в работе этого модуля телеметрии наблюдается проблема. Временное решение см. в описании проблемы GitHub 1689.
  • AzureInstanceMetadataTelemetryModule

Чтобы настроить любой модуль TelemetryModule по умолчанию, используйте метод расширения 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;
        ...
    }

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

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

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

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

В настоящее время использование интегрированной среды разработки Visual Studio поддерживается только для приложений ASP.NET/ASP.NET Core. После добавления поддержки Visual Studio для приложений Worker Service этот документ будет обновлен соответствующим образом.

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

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

Если я запускаю приложение в 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 2.1/2.2 и создаете фоновые задачи в соответствии с официальным руководством.

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

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

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

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