메트릭 API 비교

.NET 앱 또는 라이브러리에 새 메트릭 계측을 추가하는 경우 다양한 API를 선택할 수 있습니다. 이 문서는 사용 가능한 항목과 관련된 장단점을 이해하는 데 도움이 됩니다.

API에는 공급업체 중립 및 공급업체별의 두 가지 주요 범주가 있습니다. 공급업체별 API는 공급업체가 디자인을 신속하게 반복하고, 특수 기능을 추가하고, 계측 API와 백 엔드 시스템 간의 긴밀한 통합을 달성할 수 있다는 이점이 있습니다. 예를 들어 Application Insights에서 제공하는 메트릭 API를 사용하여 앱을 계측한 경우 해당 분석 도구를 사용할 때 제대로 통합된 기능 및 Application Insight의 모든 최신 기능을 확인할 수 있습니다. 그러나 라이브러리 또는 앱도 이제 이 공급업체에 연결되고 나중에 다른 공급업체로 변경하려면 계측을 다시 작성해야 합니다. 라이브러리의 경우 라이브러리 개발자가 한 공급업체의 API를 사용하고 라이브러리를 참조하는 앱 개발자가 다른 공급업체와 함께 작업하려고 하기 때문에 이러한 결합은 특히 문제가 될 수 있습니다. 이 결합 문제를 해결하기 위해 공급업체 중립 옵션은 구성에 따라 다양한 공급업체 백 엔드 시스템으로 데이터를 라우팅하는 표준화된 API 외관 및 확장성 포인트를 제공합니다. 그러나 공급업체 중립 API는 더 적은 기능을 제공할 수 있으며, 여전히 외관의 확장성 메커니즘과 통합된 공급업체를 선택해야 합니다.

.NET API

.NET의 20년 이상의 역사를 통해 메트릭 API에 대한 디자인에서 몇 차례 반복했습니다. 모두 지원되며 공급업체에 구애받지 않습니다.

System.Diagnostics.Metrics

System.Diagnostics.Metrics API는 가상 새로운 API로, OpenTelemetry 프로젝트와 긴밀히 협업하여 설계되었습니다. 아래에 설명된 이전 API 중 하나를 사용해야 하는 특별한 이유가 없다면 기본적으로 새 작업에 System.Diagnostics.Metrics를 선택하는 것이 좋습니다. .NET 6+을 대상으로 하거나 .NET System.Diagnostics.DiagnosticsSource 6.0+ NuGet 패키지에 대한 참조를 추가하여 이전 버전의 .NET Core 및 .NET Framework 앱에서 사용할 수 있습니다. 광범위한 호환성을 목표로 하는 것 외에도 이 API는 다음과 같이 이전 API에서 부족했던 많은 기능에 대한 지원을 추가합니다.

  • 히스토그램 및 백분위수
  • 다차원 메트릭
  • 강력한 형식의 고성능 수신기 API
  • 여러 동시 수신기
  • 집계되지 않은 측정값에 대한 수신기 액세스

이 API는 OpenTelemetry 및 증가하는 플러그형 공급업체 통합 라이브러리 에코 시스템에서 잘 작동하도록 설계되었지만 애플리케이션에는 .NET 기본 제공 수신기 API를 직접 사용할 수 있는 옵션이 있습니다. 이 옵션을 사용하면 외부 라이브러리 종속성을 사용하지 않고 사용자 지정 메트릭 도구를 만들 수 있습니다.

PerformanceCounter

System.Diagnostics.PerformanceCounter API는 가장 오래된 메트릭 API입니다. Windows에서만 지원되며 Windows OS 성능 카운터 기술에 대한 관리형 래퍼를 제공합니다. 지원되는 모든 버전의 .NET에서 사용할 수 있습니다.

이러한 API는 주로 호환성을 위해 제공됩니다. .NET 팀은 버그 수정을 제외하고는 더 이상 개선할 가능성이 없는 안정적인 영역으로 간주합니다. 이러한 API는 프로젝트가 Windows 전용이고 Windows 성능 카운터 도구를 사용하려는 경우를 제외하고는 새로운 개발 프로젝트에 제안되지 않습니다.

자세한 내용은 .NET Framework의 성능 카운터를 참조하세요.

EventCounters

EventCounters API는 PerformanceCounters 다음에 제공됩니다. 이 API의 목적은 일관된 플랫폼 간 환경을 제공하는 것입니다. API는 .NET Core 3.1 이상을 대상으로 하며, .NET Framework 4.7.1 이상에서 작은 하위 집합을 사용할 수 있습니다. 이러한 API는 완전히 지원되며 주요 .NET 라이브러리에서 적극적으로 사용되지만 최신 System.Diagnostics.Metrics API보다는 기능이 적습니다. EventCounters는 변경 및 평균 비율을 보고할 수 있지만 히스토그램 및 백분위수는 지원하지 않습니다. 다차원 메트릭도 지원하지 않습니다. EventListener API를 통해 사용자 지정 도구를 사용할 수 있지만 이 도구는 강력한 형식이 아니며, 집계된 값에만 액세스할 수 있으며, 둘 이상의 수신기를 동시에 사용하는 경우 제한 사항이 있습니다. EventCounters는 Visual Studio, Application Insights, dotnet-countersdotnet-monitor에서 직접 지원됩니다. 타사 도구 지원의 경우 공급업체 또는 프로젝트 설명서를 확인하여 사용 가능 여부를 확인합니다.

.NET 팀은 앞으로 이 API에 대한 상당한 새로운 투자를 기대하지는 않지만, PerformanceCounters와 마찬가지로 API는 현재 및 미래의 모든 사용자를 위해 적극적으로 지원됩니다.

타사 API

AppDynamics, Application Insights, DataDog, DynaTraceNewRelic과 같은 대부분의 APM(애플리케이션 성능 모니터링) 공급업체는 해당 계측 라이브러리의 일부로 메트릭 API를 포함합니다. PrometheusAppMetrics도 인기 있는 .NET OSS 프로젝트입니다. 이러한 프로젝트에 대해 자세히 알아보려면 다양한 프로젝트 웹 사이트를 참조하세요.