Поделиться через


Счетчики для .NET в Application Insights

Azure MonitorApplication Insights поддерживает счетчики производительности и счетчики событий. В этом руководстве представлены общие сведения об их назначении, настройке и использовании в приложениях .NET.

Внимание

Мы рекомендуем дистрибутив Azure Monitor OpenTelemetry для новых приложений или клиентов использовать Azure Monitor Application Insights. Дистрибутив OpenTelemetry в Azure Monitor предоставляет аналогичные функциональные возможности и возможности, как пакет SDK Application Insights. Вы можете перейти из пакета SDK Application Insights с помощью руководств по миграции для .NET, Node.js и Python, но мы по-прежнему работаем над добавлением нескольких дополнительных функций для обратной совместимости.

Обзор

  • Счетчики производительности встроены в операционную систему Windows и предлагают предопределенные метрики, такие как использование ЦП, потребление памяти и действие диска. Эти счетчики идеально подходят для мониторинга стандартных метрик производительности с минимальной настройкой. Они помогают отслеживать использование ресурсов или устранять проблемы с узкими местами на уровне системы в приложениях под управлением Windows, но не поддерживают пользовательские метрики для конкретных приложений.
  • Счетчики событий работают на нескольких платформах , включая Windows, Linux и macOS. Они позволяют разработчикам определять и отслеживать упрощенные настраиваемые метрики для конкретных приложений, обеспечивая большую гибкость, чем счетчики производительности. Счетчики событий полезны, если системные метрики недостаточно или когда требуется подробная телеметрия в кроссплатформенных приложениях. Они требуют явной реализации и настройки, что делает настройку более интенсивной.

Настройка счетчиков

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

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

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

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

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

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

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

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

  • Процесс, %\Загруженность процессора
  • Процесс, %\Нормализованная загруженность процессора
  • Память\Доступно байтов
  • Запросов ASP.NET/сек
  • Исключения среды CLR (CLR) .NET, вызванные / с
  • Время исполнения запросов 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

Чтобы собрать счетчики производительности системы и отправить их в 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();

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

В следующих разделах рассматриваются счетчики ASP.NET и Application Insights.

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

Запросы Log Analytics

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

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

performanceCounters | summarize count(), avg(value) by category, instance, counter

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

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

performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart

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

performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)

видны узлы

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

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

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

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

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