Системные счетчики производительности в Application Insights
Windows предоставляет различные счетчики производительности, например те, которые используются для сбора статистики использования процессора, памяти и диска. Вы также можете определить собственные счетчики производительности.
Коллекция счетчиков производительности поддерживается, если приложение работает под службами IIS на локальном узле или является виртуальной машиной, к которой у вас есть административный доступ. Хотя приложения, работающие как Azure веб-приложения, не имеют прямого доступа к счетчикам производительности, подмножество доступных счетчиков собирается Application Insights.
Примечание.
В следующей документации используется классический API Application Insights. Долгосрочный план Application Insights — сбор данных с помощью OpenTelemetry. Дополнительные сведения см. в статье "Включение Azure Monitor OpenTelemetry для .NET", Node.js, приложений Python и Java и нашей стратегии OpenTelemetry. Рекомендации по миграции доступны для .NET, Node.js и Python.
Необходимые компоненты
Предоставьте учетной записи службы пула приложений разрешение на мониторинг счетчиков производительности, добавив ее в группу пользователей Монитора производительности.
net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"
Просмотр счетчиков
На панели метрик показан набор счетчиков производительности по умолчанию.
Текущие счетчики по умолчанию для веб-приложений ASP.NET:
- Процесс, %\Загруженность процессора
- Процесс, %\Нормализованная загруженность процессора
- Память\Доступно байтов
- Запросов ASP.NET/сек
- Исключений .NET CLR/сек
- Время исполнения запросов ApplicationsRequest ASP.NET
- Process\Private Bytes
- \Процесс\Обмен данными ввода-вывода, байт/сек
- Приложения ASP.NET\Запросов в очереди приложения
- Процессор(_общий объем ресурсов)\% загруженности процессора
Текущие счетчики по умолчанию, собранные для веб-приложений ASP.NET Core:
- Процесс, %\Загруженность процессора
- Процесс, %\Нормализованная загруженность процессора
- Память\Доступно байтов
- Process\Private Bytes
- \Процесс\Обмен данными ввода-вывода, байт/сек
- Процессор(_общий объем ресурсов)\% загруженности процессора
Добавление счетчиков
Если нужный счетчик производительности не включен в список метрик, можно добавить его.
Чтобы получить список счетчиков, доступных на сервере, выполните на локальном сервере такую команду PowerShell:
Get-Counter -ListSet *
Дополнительные сведения см. в разделе
Get-Counter
.Открыть
ApplicationInsights.config
.Если вы добавили Application Insights в приложение во время разработки, выполните следующие действия.
- Измените
ApplicationInsights.config
в проекте. - Повторно разверните его на серверах.
- Измените
Измените директиву сборщика данных производительности:
<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
Чтобы собрать счетчики производительности системы и отправить их в Application Insights, можно адаптировать следующий фрагмент кода:
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
каждого счетчика производительности. В данных телеметрии для каждого приложения вы увидите только счетчики для этого приложения. Например, вот как можно увидеть, какие счетчики доступны.
Instance
Здесь относится к экземпляру счетчика производительности, а не к экземпляру сервера или роли. Имя экземпляра счетчика производительности обычно сегментирует счетчики, например время процессора, по имени процесса или приложения.
Вот как можно получить диаграмму доступной памяти за последний период.
Как и другие данные телеметрии, данные performanceCounters также содержат столбец cloud_RoleInstance
, который определяет экземпляр сервера, на котором выполняется приложение. Например, вот как можно сравнить производительность приложения на разных компьютерах.
ASP.NET и счетчики Application Insights
В следующих разделах рассматриваются счетчики ASP.NET и Application Insights.
Чем отличаются метрики "Частота исключений" и "Исключения"?
Exception rate
: частота исключений — это счетчик производительности системы. Среда CLR подсчитывает все обработанные и необработанные исключения, которые создаются, и делит общее значение в интервал выборки на длину интервала. Пакет SDK Application Insights получает этот результат и отправляет его на портал.Exceptions
: Метрика исключений — это количество отчетов,TrackException
полученных порталом в интервале выборки диаграммы. Он включает только обрабатываемые исключения, в которых вы написалиTrackException
вызовы в коде. Он не включает все необработанные исключения.
Счетчики производительности для приложений, работающих на платформе Веб-приложений Azure и в контейнерах Windows в Службе приложений Azure
Приложения ASP.NET и ASP.NET Core, развернутые в веб-приложениях Azure, выполняются в специальной изолированной среде. Приложения, развернутые в Службе приложений Azure, могут использовать контейнер Windows или размещаться в изолированной среде. Если приложение развертывается в контейнере Windows, все стандартные счетчики производительности доступны на образе контейнера.
Изолированная среда не разрешает прямой доступ к счетчикам производительности системы. Однако ограниченное подмножество счетчиков предоставляется в виде переменных среды, как описано в счетчиках Perf, предоставляемых как переменные среды. В этой среде доступно только подмножество счетчиков. Полный список см. в разделе Счетчики Perf, предоставляемые как переменные среды.
Пакет SDK Application Insights для 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.
видны узлы
Как и для других метрик, вы можете установить оповещение, которое предупредит о выходе показаний счетчика производительности за установленные пределы. Чтобы задать оповещение, откройте панель "Оповещения " и нажмите кнопку "Добавить оповещение".