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


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

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

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

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

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

  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 в вашем коде. Он не включает все необработанные исключения.