Сравнение API-интерфейсов метрик

При добавлении нового инструментария метрик в приложение или библиотеку .NET можно выбрать нужный API из множества доступных. В этой статье вы узнаете о вариантах.

Интерфейсы API .NET

System.Diagnostics.Metrics

API System.Diagnostics.Metrics — это новейшие кроссплатформенные API, разработанные в тесном сотрудничестве в рамках проекта OpenTelemetry. Если у вас нет определенной причины использовать один из старых API, описанных ниже, System.Diagnostics.Metrics является хорошим выбором по умолчанию для новой работы. Он доступен путем назначения .NET 6+ или более старых приложений .NET Core и платформа .NET Framework, добавив ссылку на пакет NuGet .NET System.Diagnostics.DiagnosticsSource 6.0+ NuGet. Помимо обеспечения широкой совместимости, этот API добавляет поддержку для многих вещей, которые не хватает от предыдущих API, таких как:

  • Гистограммы и процентили
  • Многомерные метрики
  • Строго типизированный высокопроизводительный API прослушивателя
  • Несколько одновременных прослушивателей
  • Доступ прослушивателя к неагрегированным измерениям

Хотя этот API был разработан для работы с OpenTelemetry и его растущей экосистемой подключаемых библиотек интеграции поставщиков, приложения могут также использовать встроенные в .NET API-интерфейсы прослушивателей напрямую. Благодаря этому можно создавать пользовательские средства метрик без зависимостей внешних библиотек.

PerformanceCounter

System.Diagnostics.PerformanceCounter API являются самыми старыми API метрик .NET. Они поддерживаются только в Windows и предоставляют управляемую программу-оболочку для технологии счетчиков производительности в ОС Windows. Они доступны во всех поддерживаемых версиях .NET.

Эти API предназначены в первую очередь для обеспечения совместимости. Команда разработчиков .NET считает, что это стабильный аспект, не требующий дальнейших улучшений (помимо исправления ошибок). Эти API-интерфейсы не предлагаются для использования в новых проектах разработки, если только проект не предназначен исключительно для Windows, и вы хотите работать с инструментами Счетчика производительности Windows.

Дополнительные сведения см. в статье Счетчики производительности в .NET Framework.

Счетчики событий

EventCounters были первыми API .NET для поддержки кроссплатформенных метрик. API доступны путем назначения .NET Core 3.1 и более поздних версий, а небольшое подмножество доступно в платформа .NET Framework 4.7.1 и более поздних версий. Эти API полностью поддерживаются и по-прежнему используются ключевыми библиотеками .NET, но они имеют меньше возможностей, чем новые System.Diagnostics.Metrics API. Счетчики производительности могут информировать о средних значениях и скорости изменений, но не поддерживают гистограммы и процентили. Кроме того, отсутствует поддержка многомерных метрик. Использовать пользовательский инструментарий можно с помощью API EventListener, хотя он не является строго типизированным. Он предоставляет доступ только к агрегированным значениям и имеет ограничения при использовании нескольких прослушивателей одновременно. Счетчики событий поддерживаются напрямую в Visual Studio, Application Insights, dotnet-counters и dotnet-monitor. Чтобы узнать о поддержке сторонних средств, обратитесь к документации по поставщику или проекту.

Команда .NET не ожидает новых инвестиций в этот API, но, как и в PerformanceCountersслучае с, API остается поддерживаемым для всех текущих и будущих пользователей.

Сторонние API-интерфейсы

У большинства поставщиков мониторинга производительности приложений (APM), таких как AppDynamics, Application Insights, DataDog, DynaTrace и NewRelic, API-интерфейсы метрик входят в состав библиотек инструментирования. Prometheus и AppMetrics также являются популярными проектами OSS .NET. Дополнительные сведения об этих проектах можно найти на соответствующих веб-сайтах.