Application Insights для приложений ASP.NET Core

В этой статье описано, как включить Application Insights для приложения ASP.NET Core. После выполнения инструкций, описанных в этой статье, служба Application Insights приступает к сбору запросов, зависимостей, исключений, счетчиков производительности, пакетов импульсов и журналов из приложения ASP.NET Core.

В качестве примера используется приложение MVC, предназначенное для netcoreapp3.0. Эти инструкции можно применить ко всем приложениям ASP.NET Core. Если применяется служба Worker Service, воспользуйтесь инструкциями, приведенными здесь.

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

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

  • Операционная система: Windows, Linux или Mac.
  • Метод размещения: внутри или вне процесса.
  • Метод развертывания: зависит от платформы либо автономный.
  • Веб-сервер: IIS (Internet Information Server) или Kestrel.
  • Платформа размещения: функция веб-приложений службы приложений Azure, виртуальная машина Azure, Docker, служба Azure Kubernetes (AKS) и т. д.
  • Версия .NET Core: все официально поддерживаемые версии .NET Core, которые не находятся в предварительной версии.
  • Интегрированная среда разработки: Visual Studio, Visual Studio Code или командная строка

Примечание

Для ASP.NET Core 3.1 требуется Application Insights 2.8.0 или более поздняя версия.

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

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

Важно!

Рекомендуется использовать строки подключения, а не ключи инструментирования. Для новых регионов Azure требуется использовать строки подключения вместо ключей инструментирования. Строка подключения определяет ресурс, с которым необходимо связать данные телеметрии. Она также позволяет изменить конечные точки, которые ресурс будет использовать в качестве назначения для данных телеметрии. Необходимо скопировать строку подключения и добавить ее в код приложения или переменную среды.

Включение телеметрии на стороне сервера Application Insights (Visual Studio)

В случае Visual Studio для Mac используйте инструкции, указанные в руководстве. Эта процедура поддерживается только в версии Windows Visual Studio.

  1. Откройте проект в Visual Studio.

    Совет

    Можно настроить систему управления версиями для проекта, чтобы можно было отслеживать все изменения, вносимые Application Insights. Для настройки выберите Файл > Добавить в систему управления версиями.

  2. Выберите Проект > Добавить телеметрию Application Insights.

  3. Выберите Начать. В зависимости от используемой версии Visual Studio имя этой кнопки может несколько отличаться. В некоторых более ранних версиях она называется Начать бесплатно.

  4. Выберите свою подписку, а затем выберите Ресурс > Зарегистрировать.

  5. После добавления Application Insights в проект проверьте, чтобы использовался последний стабильный выпуск пакета SDK. Перейдите по пунктам Проект > Управление пакетами NuGet > Microsoft.ApplicationInsights.AspNetCore. При необходимости выберите Обновить.

    Снимок экрана, на котором показано, где выбрать пакет Application Insights для обновления

  6. Если проект добавлен в систему управления версиями, выберите Просмотр > Team Explorer > Изменения. Затем выберите каждый файл, чтобы просмотреть различия изменений, внесенных Application Insights для телеметрии.

Включение телеметрии на стороне сервера Application Insights (без Visual Studio)

  1. Установите пакет NuGet для Application Insights SDK для ASP.NET Core. Рекомендуется всегда использовать последнюю версию PowerShell. Ознакомьтесь с полными сведениями о выпуске пакета SDK в репозитории GitHub с открытым исходным кодом.

    В следующем примере кода показаны изменения, которые необходимо добавить в файл проекта .csproj.

        <ItemGroup>
          <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.16.0" />
        </ItemGroup>
    
  2. Добавьте services.AddApplicationInsightsTelemetry(); в метод ConfigureServices() класса Startup, как показано в следующем примере.

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // The following line enables Application Insights telemetry collection.
            services.AddApplicationInsightsTelemetry();
    
            // This code adds other services for your application.
            services.AddMvc();
        }
    
  3. Настройка ключа инструментирования.

    Хотя ключ инструментирования можно указать в качестве аргумента для AddApplicationInsightsTelemetry, рекомендуется указывать его в конфигурации. В следующем примере кода показано, как указать ключ инструментирования в 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 обычно используется в веб-приложениях Azure, но также может применяться везде, где поддерживается этот пакет SDK. (Если вы выполняете мониторинг веб-приложений без применения кода, этот формат необходим, если не используются строки подключения.)

    Вместо настройки ключей инструментирования теперь можно использовать строки подключения.

    Примечание

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

Секреты пользователей и другие поставщики конфигурации

Если решено сохранить ключ инструментирования в секретах пользователя ASP.NET Core или получить его от другого поставщика конфигурации, можно использовать перегрузку с параметром Microsoft.Extensions.Configuration.IConfiguration. Например, services.AddApplicationInsightsTelemetry(Configuration);. Начиная с версии Microsoft.ApplicationInsights.AspNetCore 2.15.0 вызов services.AddApplicationInsightsTelemetry() приводит к автоматическому считыванию ключа инструментирования из Microsoft.Extensions.Configuration.IConfiguration приложения. Нет необходимости явно предоставлять IConfiguration.

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

Запустите приложение и выполните запросы к нему. Теперь данные телеметрии должны передаваться в Application Insights. Пакет SDK для Application Insights автоматически собирает входящие веб-запросы в приложение, а также следующие данные телеметрии.

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

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

Журналы ILogger

Конфигурация по умолчанию собирает журналы ILogger Warning и журналы с более важными сведениями. Эту конфигурацию можно настроить.

Зависимости

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

Счетчики производительности

Поддержка счетчиков производительности в приложениях ASP.NET Core ограниченна.

  • Пакеты SDK версии 2.4.1 и более поздних собирают данные счетчиков производительности, если приложение выполняется в веб-приложениях Azure (Windows).
  • Пакеты SDK версии 2.7.1 и более поздних собирают счетчики производительности, если приложение выполняется в Windows и предназначено для NETSTANDARD2.0 или более поздних версий.
  • Для приложений, предназначенных для .NET Framework, все версии пакетов SDK поддерживают счетчики производительности.
  • Пакеты SDK версии 2.8.0 и более поздних поддерживают счетчик ЦП/памяти в Linux. В Linux не поддерживаются никакие другие счетчики. Для получения системных счетчиков в Linux (и других средах, отличных от Windows) рекомендуется использовать EventCounters.

EventCounter

По умолчанию EventCounterCollectionModule включен. Сведения о том, как настроить список собираемых счетчиков, см. в разделе Знакомство с объектами EventCounter.

Включение телеметрии на стороне клиента для веб-приложений

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

  1. В _ViewImports.cshtml добавьте внедрение.
    @inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
  1. В _Layout.cshtml вставьте HtmlHelper в конец раздела <head>, но перед всеми другими сценариями. Если требуется выдавать отчет обо всех пользовательских данных телеметрии JavaScript со страницы, вставьте ее после этого фрагмента кода:
    @Html.Raw(JavaScriptSnippet.FullScript)
    </head>

В качестве альтернативы использованию FullScript, начиная с пакета SDK для Application Insights для ASP.NET Core версии 2.14, доступен параметр ScriptBody. Используйте этот параметр, если необходимо управлять тегом <script> для задания Политики безопасности содержимого:

 <script> // apply custom changes to this script tag.
     @Html.Raw(JavaScriptSnippet.ScriptBody)
 </script>

Ранее упомянутые имена файлов .cshtml относятся к шаблону приложения MVC по умолчанию. В конечном счете, чтобы включить должным образом наблюдение на стороне клиента для конкретного приложения, необходимо обеспечить появление фрагмента JavaScript в разделе <head> каждой страницы контролируемого приложения. Чтобы сделать это в этом шаблоне приложения, добавьте фрагмент кода JavaScript в _Layout.cshtml.

Если проект не включает _Layout.cshtml, все равно можно добавить наблюдение на стороне клиента. Для этого добавьте фрагмент кода JavaScript в эквивалентный файл, который управляет <head> на всех страницах в приложении. Кроме того, можно добавить фрагмент кода на нескольких страницах, но это решение сложно поддерживать, и, как правило, оно не рекомендуется.

Примечание

Внедрение JavaScript открывает возможности для настройки по умолчанию. Если требуется настройка помимо установки ключа инструментирования, необходимо удалить автоматическое внедрение, как описано выше, и вручную добавить пакет SDK для JavaScript.

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

Можно настроить SDK Application Insights для ASP.NET Core, чтобы изменить конфигурацию по умолчанию. Пользователи Application Insights ASP.NET SDK могут быть знакомы с изменением конфигурации с помощью ApplicationInsights.config или путем изменения TelemetryConfiguration.Active. Для ASP.NET Core почти все изменения конфигурации выполняются в методе ConfigureServices() класса Startup.cs, если не указано иное. Дополнительные сведения см. в следующих разделах.

Примечание

В приложениях ASP.NET Core изменение конфигурации путем модификации TelemetryConfiguration.Active не поддерживается.

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

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

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

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

В этой таблице содержится полный список параметров ApplicationInsightsServiceOptions.

Параметр Описание Значение по умолчанию
EnablePerformanceCounterCollectionModule Включение и отключение PerformanceCounterCollectionModule Да
EnableRequestTrackingTelemetryModule Включение и отключение RequestTrackingTelemetryModule Да
EnableEventCounterCollectionModule Включение и отключение EventCounterCollectionModule Да
EnableDependencyTrackingTelemetryModule Включение и отключение DependencyTrackingTelemetryModule Да
EnableAppServicesHeartbeatTelemetryModule Включение и отключение AppServicesHeartbeatTelemetryModule Да
EnableAzureInstanceMetadataTelemetryModule Включение и отключение AzureInstanceMetadataTelemetryModule Да
EnableQuickPulseMetricStream Включение/отключение функции LiveMetrics Да
EnableAdaptiveSampling Включение/отключение адаптивной выборки Да
EnableHeartbeat Включение/отключение функции Heartbeats, которая периодически (по умолчанию 15 минут) отправляет пользовательскую метрику HeartbeatState со сведениями о таких параметрах среды выполнения, как версия .NET, информация о среде Azure, если применимо, и т. д. Да
AddAutoCollectedMetricExtractor Включение/отключение экстрактора AutoCollectedMetrics, который представляет собой процессор телеметрии, передающий предварительно агрегированные метрики о запросах/зависимостях перед выборкой. Да
RequestCollectionOptions.TrackExceptions Включение/отключение отчетов об отслеживании необработанных исключений модулем сбора запросов. Значение false в NETSTANDARD 2.0 (поскольку исключения отслеживаются с помощью ApplicationInsightsLoggerProvider), в противном случае значение true.
EnableDiagnosticsTelemetryModule Включение и отключение DiagnosticsTelemetryModule. Отключение этого параметра приведет к игнорированию следующих параметров: EnableHeartbeat, EnableAzureInstanceMetadataTelemetryModule, EnableAppServicesHeartbeatTelemetryModule Да

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

Рекомендация по настройке пакета SDK для Microsoft.ApplicationInsights.AspNetCore 2.15.0 и выше

В Microsoft.ApplicationInsights.AspNetCore SDK версии 2.15.0 и выше рекомендуется настраивать каждый параметр, доступный в ApplicationInsightsServiceOptions, включая InstrumentationKey, с помощью экземпляра приложения IConfiguration. Параметры должны быть в разделе ApplicationInsights, как показано в следующем примере. Следующий раздел из appsettings.json настраивает ключ инструментирования, а также отменяет адаптивную выборку и сбор счетчиков производительности.

{
    "ApplicationInsights": {
    "InstrumentationKey": "putinstrumentationkeyhere",
    "EnableAdaptiveSampling": false,
    "EnablePerformanceCounterCollectionModule": false
    }
}

Если используется services.AddApplicationInsightsTelemetry(aiOptions), то его параметры отменяют параметры, взятые ранее из Microsoft.Extensions.Configuration.IConfiguration.

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

Пакет SDK Application Insights для ASP.NET Core поддерживает как фиксированную, так и адаптивную выборку. Адаптивная выборка включена по умолчанию.

Дополнительные сведения см. в статье Настройка адаптивной выборки для приложений ASP.NET Core.

Добавление TelemetryInitializer

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

Добавьте новые TelemetryInitializer в контейнер DependencyInjection, как показано в следующем коде. Пакет SDK автоматически принимает все TelemetryInitializer, добавляемые в контейнер DependencyInjection.

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

Примечание

services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>(); работает с простыми инициализаторами. Для других требуется следующее: services.AddSingleton(new MyCustomTelemetryInitializer() { fieldName = "myfieldName" });

Удаление TelemetryInitializer

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

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

    // 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.AddApplicationInsightsTelemetry();
    services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();

    // If you have more processors:
    services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();
}

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

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

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

  • RequestTrackingTelemetryModule собирает RequestTelemetry из входящих веб-запросов.
  • DependencyTrackingTelemetryModule собирает DependencyTelemetry из исходящих вызовов HTTP и вызовов SQL.
  • PerformanceCollectorModule собирает PerformanceCounters для Windows.
  • QuickPulseTelemetryModule собирает данные телеметрии для отображения на портале динамических метрик.
  • AppServicesHeartbeatTelemetryModule собирает данные о пакетах импульсов (которые передаются как пользовательские метрики), касающиеся среды Службы приложений Azure, в которой размещается приложение.
  • AzureInstanceMetadataTelemetryModule собирает данные о пакетах импульсов (которые передаются как пользовательские метрики), касающиеся среды виртуальной машины Azure, в которой размещается приложение.
  • EventCounterCollectionModule собирает EventCounters. Этот модуль представляет собой новую функцию и доступен в пакете SDK версии 2.8.0 и выше.

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

using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

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

    // The following configures DependencyTrackingTelemetryModule.
    // Similarly, any other default modules can be configured.
    services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) =>
            {
                module.EnableW3CHeadersInjection = true;
            });

    // The following removes all default counters from EventCounterCollectionModule, and adds a single one.
    services.ConfigureTelemetryModule<EventCounterCollectionModule>(
            (module, o) =>
            {
                module.Counters.Add(new EventCounterCollectionRequest("System.Runtime", "gen-0-size"));
            }
        );

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

В версии 2.12.2 и более поздних ApplicationInsightsServiceOptions содержит простой способ отключения всех модулей по умолчанию.

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

Каналом телеметрии по умолчанию является 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.AddApplicationInsightsTelemetry();
    }

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

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

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

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

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

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

Поддерживает ли Application Insights ASP.NET Core 3.X?

Да. Обновите пакет SDK для Application Insights для ASP.NET Core до версии 2.8.0 или более поздней. Более старые версии пакета SDK не поддерживают ASP.NET Core 3.X.

Кроме того, если включены данные телеметрии на стороне сервера, основанные на Visual Studio, обновите его до последней версии Visual Studio 2019 (16.3.0). Предыдущие версии Visual Studio не поддерживают автоматическую адаптацию для приложений ASP.NET Core 3.X.

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

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

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

using Microsoft.ApplicationInsights;

public class HomeController : Controller
{
    private TelemetryClient telemetry;

    // Use constructor injection to get a TelemetryClient instance.
    public HomeController(TelemetryClient telemetry)
    {
        this.telemetry = telemetry;
    }

    public IActionResult Index()
    {
        // Call the required TrackXXX method.
        this.telemetry.TrackEvent("HomePageRequested");
        return View();
    }

Дополнительные сведения о настраиваемых отчетах данных в Application Insights см. в разделе Справочник по API настраиваемых метрик Application Insights. Аналогичный подход можно использовать для отправки пользовательских метрик в Application Insights с помощью API GetMetric.

Как настроить сбор журналов ILogger?

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

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

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

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

Дополнительные сведения см. в статье, посвященной конфигурации ILogger.

Некоторые шаблоны Visual Studio использовали метод расширения UseApplicationInsights() в IWebHostBuilder для включения Application Insights. Является ли этот способ использования по-прежнему допустимым?

Метод расширения UseApplicationInsights() по-прежнему поддерживается, однако он отмечен как устаревший в пакете SDK для Application Insights версии 2.8.0 и последующих. Он будет удален в следующей основной версии пакета SDK. Для включения телеметрии Application Insights рекомендуется использовать AddApplicationInsightsTelemetry(), поскольку он предоставляет перегрузку для управления некоторой конфигурацией. Кроме того, в приложениях ASP.NET Core 3.X services.AddApplicationInsightsTelemetry() — единственный способ включить Application Insights.

Я развертываю приложение ASP.NET Core в веб-приложениях. Следует ли мне по-прежнему включать расширение Application Insights из веб-приложений?

Если пакет SDK устанавливается во время сборки, как показано в этой статье, то не нужно включать расширение Application Insights на портале Службы приложений. Даже если расширение установлено, оно будет свернуто при обнаружении того, что пакет SDK уже добавлен в приложение. Если включить Application Insights из расширения, то не потребуется устанавливать и обновлять пакет SDK. Но если вы включили Application Insights, следуя инструкциям в этой статье, то достигнете большей гибкости, поскольку:

  • Данные телеметрии Application Insights будут продолжать работать:
    • со всеми операционными системами, включая Windows, Linux и Mac;
    • во всех режимах публикации, включая автономные или зависящие от платформы;
    • со всеми целевыми платформами, включая полную платформу .NET Framework;
    • для всех вариантов размещения, включая веб-приложения, виртуальные машины, Linux, контейнеры, Службу Azure Kubernetes и размещение без Azure;
    • во всех версиях .NET Core, включая предварительные версии.
  • Можно просматривать данные телеметрии локально при отладке из Visual Studio.
  • Можно отслеживать дополнительные пользовательские данные телеметрии с помощью API TrackXXX().
  • Вы полностью контролируете конфигурацию.

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

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

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

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

  • Пакет SDK собирает счетчики событий в Linux, поскольку счетчики производительности поддерживаются только в 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.AddApplicationInsightsTelemetry();
    }

Это ограничение не имеет места в 2.15.0 и более новых версиях.

Поддерживается ли этот пакет SDK для новых приложений с шаблоном рабочей службы .NET Core 3.X?

Этот пакет SDK требует HttpContext и, следовательно, не работает ни в одном приложении, не использующем протокола HTTP, включая приложения рабочей службы .NET Core 3.X. Чтобы включить Application Insights в таких приложениях с помощью выпущенного пакета SDK для Microsoft.ApplicationInsights.WorkerService, обратитесь к разделу Application Insights для приложений Worker Service (не HTTP-приложений).

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

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

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