指标 API 比较

向 .NET 应用或库添加新指标检测时,有多种不同的 API 可供选择。 本文将帮助您了解各个选项。

.NET 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。 利用此 API,可以创建自定义指标工具,而无需采用任何外部库依赖项。

PerformanceCounter

System.Diagnostics.PerformanceCounter API 是最早的 .NET 指标 API。 它们仅在 Windows 上受支持,并为 Windows 操作系统性能计数器技术提供托管包装器。 它们可在所有受支持的 .NET 版本中使用。

提供这些 API 主要是为了实现兼容性;.NET 团队将其视为稳定的领域,除了 bug 修复之外,不太可能有进一步的改进。 除非项目是仅 Windows 的,并且需要使用 Windows 性能计数器工具,否则不建议为新的开发项目使用这些 API。

有关详细信息,请参阅 .NET Framework 中的性能计数器

EventCounters

EventCounters 是第一个支持跨平台指标体验的 .NET API。 此 API 面向 .NET Core 3.1+ 提供,其中一小部分可在 .NET Framework 4.7.1 及更高版本上使用。 这些 API 完全受支持,并且仍然被关键的 .NET 库使用,但其功能比更新的 System.Diagnostics.Metrics API 要少一些。 EventCounters 能够报告更改率和平均值,但不支持直方图和百分位数。 此外,也不支持多维度指标。 可通过 EventListener API 获取自定义工具,但它不是强类型化的,仅提供对聚合值的访问,并且在需要同时使用多个侦听器的情况下具有局限性。 EventCounters 由 Visual StudioApplication Insightsdotnet-countersdotnet-monitor 直接提供支持。 有关第三方工具支持,请查看供应商或项目文档,了解是否提供相关支持。

.NET 团队不希望在今后对此 API 进行新投资,但与 PerformanceCounters 一样,仍会为所有当前和未来用户提供针对此 API 的支持。

第三方 API

大多数应用程序性能监视 (APM) 供应商,如 AppDynamicsApplication InsightsDataDogDynaTraceNewRelic,都包含了指标 API 作为其检测库的一部分。 PrometheusAppMetrics 也是常见的 .NET OSS 项目。 若要了解有关这些项目的详细信息,请查看各项目的网站。