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

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

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

Примечание.

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

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

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

net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"

Просмотр счетчиков

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

Screenshot that shows performance counters reported in Application Insights.

Текущие счетчики по умолчанию для веб-приложений ASP.NET:

  • Процесс, %\Загруженность процессора
  • Процесс, %\Нормализованная загруженность процессора
  • Память\Доступно байтов
  • Запросов ASP.NET/сек
  • Исключений .NET CLR/сек
  • Время исполнения запросов ApplicationsRequest ASP.NET
  • Process\Private Bytes
  • \Процесс\Обмен данными ввода-вывода, байт/сек
  • Приложения ASP.NET\Запросов в очереди приложения
  • Процессор(_общий объем ресурсов)\% загруженности процессора

Текущие счетчики по умолчанию, собранные для веб-приложений ASP.NET Core:

  • Процесс, %\Загруженность процессора
  • Процесс, %\Нормализованная загруженность процессора
  • Память\Доступно байтов
  • Process\Private Bytes
  • \Процесс\Обмен данными ввода-вывода, байт/сек
  • Процессор(_общий объем ресурсов)\% загруженности процессора

Добавление счетчиков

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

  1. Чтобы получить список счетчиков, доступных на сервере, выполните на локальном сервере такую команду PowerShell:

    Get-Counter -ListSet *
    

    Дополнительные сведения см. в разделе Get-Counter.

  2. Открыть ApplicationInsights.config.

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

    1. Измените ApplicationInsights.config в проекте.
    2. Повторно разверните его на серверах.
  3. Измените директиву сборщика данных производительности:

    
        <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
          <Counters>
            <Add PerformanceCounter="\Objects\Processes"/>
            <Add PerformanceCounter="\Sales(photo)\# Items Sold" ReportAs="Photo sales"/>
          </Counters>
        </Add>
    

Примечание.

ASP.NET приложения Core не имеются ApplicationInsights.config, поэтому предыдущий метод недействителен для приложений ASP.NET Core.

Вы можете собирать показания как стандартных счетчиков, так и созданных вами самостоятельно. \Objects\Processes — это пример стандартного счетчика, доступного во всех системах Windows. Пример пользовательского счетчика, который можно реализовать в веб-службе: \Sales(photo)\# Items Sold.

Используется формат \Category(instance)\Counter, а для категорий без экземпляров — просто \Category\Counter.

Параметр ReportAs требуется для имен счетчиков, которые не соответствуют [a-zA-Z()/-_ \.]+. То есть они содержат символы, которые не содержатся в следующих наборах: буквы, круглые скобки, косая черта, дефис, подчеркивание, пробел и точка.

Если указать экземпляр, он будет собираться в виде измерения CounterInstanceName сообщаемой метрики.

Сбор счетчиков производительности в коде для веб-приложений ASP.NET или консольных приложений .NET/.NET Core

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

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Или вы можете сделать то же самое с пользовательскими метриками, созданными вами:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Sales(photo)\# Items Sold", "Photo sales"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Сбор счетчиков производительности в коде для веб-приложений ASP.NET Core

Настройка PerformanceCollectorModule после WebApplication.CreateBuilder() метода в Program.cs:

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// The following configures PerformanceCollectorModule.

builder.Services.ConfigureTelemetryModule<PerformanceCollectorModule>((module, o) =>
    {
        // The application process name could be "dotnet" for ASP.NET Core self-hosted applications.
        module.Counters.Add(new PerformanceCounterCollectionRequest(@"\Process([replace-with-application-process-name])\Page Faults/sec", "DotnetPageFaultsPerfSec"));
    });

var app = builder.Build();

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

Вы можете искать и отображать отчеты счетчиков производительности в Log Analytics.

Схема PerformanceCounters предоставляет category, имя counter и имя instance каждого счетчика производительности. В данных телеметрии для каждого приложения вы увидите только счетчики для этого приложения. Например, вот как можно увидеть, какие счетчики доступны.

Screenshot that shows performance counters in Application Insights analytics.

Instance Здесь относится к экземпляру счетчика производительности, а не к экземпляру сервера или роли. Имя экземпляра счетчика производительности обычно сегментирует счетчики, например время процессора, по имени процесса или приложения.

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

Screenshot that shows a memory time chart in Application Insights analytics.

Как и другие данные телеметрии, данные performanceCounters также содержат столбец cloud_RoleInstance, который определяет экземпляр сервера, на котором выполняется приложение. Например, вот как можно сравнить производительность приложения на разных компьютерах.

Screenshot that shows performance segmented by role instance in Application Insights analytics.

ASP.NET и счетчики Application Insights

В следующих разделах рассматриваются ASP.NET и количество Аналитика приложений.

Чем отличаются метрики "Частота исключений" и "Исключения"?

  • Exception rate: частота исключений — это счетчик производительности системы. Среда CLR подсчитывает все обработанные и необработанные исключения, которые создаются, и делит общее значение в интервал выборки на длину интервала. Пакет SDK Application Insights получает этот результат и отправляет его на портал.
  • Exceptions: Метрика исключений — это количество отчетов, TrackException полученных порталом в интервале выборки диаграммы. Он включает только обрабатываемые исключения, в которых вы написали TrackException вызовы в коде. Он не включает все необработанные исключения.

Счетчики производительности для приложений, работающих на платформе Веб-приложений Azure и в контейнерах Windows в Службе приложений Azure

Приложения ASP.NET и ASP.NET Core, развернутые в веб-приложениях Azure, выполняются в специальной изолированной среде. Приложения, развернутые в Службе приложений Azure, могут использовать контейнер Windows или размещаться в изолированной среде. Если приложение развертывается в контейнере Windows, все стандартные счетчики производительности доступны на образе контейнера.

Изолированная среда не разрешает прямой доступ к счетчикам производительности системы. Однако ограниченное подмножество счетчиков предоставляется в виде переменных среды, как описано в счетчиках Perf, предоставляемых как переменные среды. В этой среде доступно только подмножество счетчиков. Полный список см. в разделе Счетчики Perf, предоставляемые как переменные среды.

Пакет SDK Аналитика приложения для ASP.NET и ASP.NET Core определяет, развертывается ли код в веб-приложении или контейнере, отличном от Windows. Обнаружение определяет, собирает ли он счетчики производительности в изолированной среде или использует стандартный механизм сбора данных при размещении в контейнере Windows или виртуальной машине.

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

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

видны узлы

Как и для других метрик, вы можете установить оповещение, которое предупредит о выходе показаний счетчика производительности за установленные пределы. Чтобы задать оповещение, откройте панель "Оповещения " и нажмите кнопку "Добавить оповещение".

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