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

В этой статье описано, как включить и настроить Application Insights для приложения ASP.NET Core.

Application Insights может собирать из приложения ASP.NET Core следующие данные телеметрии:

  • Requests
  • Зависимости
  • Исключения
  • Счетчики производительности
  • Пакеты пульса
  • Журналы

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

Доступна предварительная версия предложения .NET на основе OpenTelemetry. Дополнительные сведения см. в статье Общие сведения о OpenTelemetry.

Примечание

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

Для записи журналов также можно использовать пакет Microsoft.Extensions.Logging.ApplicationInsights. Дополнительные сведения см. в статье Ведение журнала Application Insights с помощью .NET. Пример см. в разделе Консольное приложение.

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

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

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

Примечание

ASP.NET Core 6.0 требуется Application Insights 2.19.0 или более поздней версии.

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

Вам необходимы:

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

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

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

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

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

  3. Выберите приложение Azure Insights>Далее.

  4. Выберите подписку и экземпляр Application Insights. Или можно создать новый экземпляр с помощью команды Создать. Выберите Далее.

  5. Добавьте или подтвердите строку подключения Application Insights. Он должен быть предварительно заполнен в соответствии с выбранным на предыдущем шаге. Нажмите кнопку Готово.

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

    Снимок экрана, на котором показано, где выбрать пакет 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.21.0" />
    </ItemGroup>
    
  2. Добавьте AddApplicationInsightsTelemetry() в класс startup.cs или program.cs . Выбор зависит от версии .NET Core.

    Добавьте builder.Services.AddApplicationInsightsTelemetry(); после метода WebApplication.CreateBuilder() класса Program, как показано в следующем примере:

    // This method gets called by the runtime. Use this method to add services to the container.
    var builder = WebApplication.CreateBuilder(args);
    
    // The following line enables Application Insights telemetry collection.
    builder.Services.AddApplicationInsightsTelemetry();
    
    // This code adds other services for your application.
    builder.Services.AddMvc();
    
    var app = builder.Build();
    
  3. Задание строки подключения.

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

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*",
      "ApplicationInsights": {
        "ConnectionString": "Copy connection string from Application Insights Resource Overview"
      }
    }
    

    Кроме того, можно указать строку подключения в переменной APPLICATIONINSIGHTS_CONNECTION_STRING среды или ApplicationInsights:ConnectionString в файле конфигурации JSON.

    Например:

    • SET ApplicationInsights:ConnectionString = <Copy connection string from Application Insights Resource Overview>
    • SET APPLICATIONINSIGHTS_CONNECTION_STRING = <Copy connection string from Application Insights Resource Overview>
    • Как правило, APPLICATIONINSIGHTS_CONNECTION_STRING используется в веб-приложения. Его также можно использовать во всех местах, где поддерживается этот пакет SDK.

    Примечание

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

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

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

В Microsoft.ApplicationInsights.AspNetCore версии 2.15.0 и более поздних при вызове services.AddApplicationInsightsTelemetry() автоматически считывается строка подключения из Microsoft.Extensions.Configuration.IConfiguration приложения. Нет необходимости явно предоставлять IConfiguration.

Если в IConfiguration конфигурация загружена из нескольких поставщиков, services.AddApplicationInsightsTelemetry отдает предпочтение конфигурации от appsettings.json независимо от порядка добавления поставщиков. Используйте метод для services.AddApplicationInsightsTelemetry(IConfiguration) чтения конфигурации из IConfiguration без этого предпочтительного режима для appsettings.json.

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

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

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

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

Журналы ILogger

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

Зависимости

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

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

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

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

EventCounter

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

Обогащение данных по протоколу HTTP

HttpContext.Features.Get<RequestTelemetry>().Properties["myProp"] = someData

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

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

  1. В _ViewImports.cshtml добавьте внедрение.

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

    @Html.Raw(JavaScriptSnippet.FullScript)
    </head>
    

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

var builder = WebApplication.CreateBuilder(args);

var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();

// Disables adaptive sampling.
aiOptions.EnableAdaptiveSampling = false;

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

builder.Services.AddApplicationInsightsTelemetry(aiOptions);
var app = builder.Build();

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

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

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

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

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

{
    "ApplicationInsights": {
    "ConnectionString": "Copy connection string from Application Insights Resource Overview",
    "EnableAdaptiveSampling": false,
    "EnablePerformanceCounterCollectionModule": false
    }
}

Если используется builder.Services.AddApplicationInsightsTelemetry(aiOptions) для ASP.NET Core 6.0 или services.AddApplicationInsightsTelemetry(aiOptions) для ASP.NET Core 3.1 и более ранних версий, он переопределяет параметры из Microsoft.Extensions.Configuration.IConfiguration.

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

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

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

Добавление TelemetryInitializers

Если вы хотите дополнить данные телеметрии дополнительными сведениями, используйте инициализаторы телеметрии.

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

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();

var app = builder.Build();

Примечание

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

Удаление telemetryInitializers

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

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// Remove a specific built-in telemetry initializer
var tiToRemove = builder.Services.FirstOrDefault<ServiceDescriptor>
                    (t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
if (tiToRemove != null)
{
    builder.Services.Remove(tiToRemove);
}

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

var app = builder.Build();

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

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

var builder = WebApplication.CreateBuilder(args);

// ...
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();

// If you have more processors:
builder.Services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();

var app = builder.Build();

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

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

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

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

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

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

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

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

// The following removes all default counters from EventCounterCollectionModule, and adds a single one.
builder.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 = builder.Services.FirstOrDefault<ServiceDescriptor>(t => t.ImplementationType == typeof(PerformanceCollectorModule));
if (performanceCounterService != null)
{
    builder.Services.Remove(performanceCounterService);
}

var app = builder.Build();

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

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

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

using Microsoft.ApplicationInsights.Channel;

var builder = WebApplication.CreateBuilder(args);

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

builder.Services.AddApplicationInsightsTelemetry();

var app = builder.Build();

Примечание

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

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

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

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// any custom configuration can be done here:
builder.Services.Configure<TelemetryConfiguration>(x => x.DisableTelemetry = true);

var app = builder.Build();

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

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

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

{
  "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, контейнеры, AKS и размещение не в Azure.
    • Все версии .NET Core, включая предварительные версии.
  • Можно просматривать данные телеметрии локально при отладке из Visual Studio.
  • Можно отслеживать дополнительные пользовательские данные телеметрии с помощью API TrackXXX().
  • Вы полностью контролируете конфигурацию.

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

Да. В Application Insights Agent 2.0.0-beta1 и более поздних версиях поддерживаются приложения ASP.NET Core, размещенные в IIS.

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

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

  • Пакет SDK собирает счетчики событий в Linux, поскольку счетчики производительности поддерживаются только в Windows. Большинство метрик одинаковы.
  • Несмотря на то что ServerTelemetryChannel включено по умолчанию, если приложение выполняется в Linux или macOS, канал автоматически не создает папку локального хранилища для временного хранения данных телеметрии в случае проблем с сетью. Из-за этого ограничения данные телеметрии теряются при наличии временных проблем с сетью или сервером. Чтобы обойти эту проблему, настройте локальную папку для канала.
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;

var builder = WebApplication.CreateBuilder(args);

// 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.
builder.Services.AddSingleton(typeof(ITelemetryChannel),
                        new ServerTelemetryChannel () {StorageFolder = "/tmp/myfolder"});
builder.Services.AddApplicationInsightsTelemetry();

var app = builder.Build();

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

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

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

Устранение неполадок

Проверка подключения между узлом приложения и службой приема

Пакеты SDK и агенты Application Insights отправляют данные телеметрии для приема в качестве вызовов REST к конечным точкам приема. Вы можете проверить подключение веб-сервера или хост-компьютера приложения к конечным точкам службы приема с помощью необработанных клиентов REST из PowerShell или команд curl. См. статью Устранение неполадок с отсутствующими данными телеметрии приложений в Azure Monitor Application Insights.

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

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

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

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