計量 API 比較
將新的計量檢測新增至 .NET 應用程式或程式庫時,有各種不同的 API 可供選擇。 本文將協助您了解這些選項。
.NET API
System.Diagnostics.Metrics
System.Diagnostics.Metrics API 是最新的跨平台 API,而且是專為與 OpenTelemetry 專案緊密共同作業而設計。 如果您沒有使用下列其中一個較舊 API 的特定原因,System.Diagnostics.Metrics 是開始新工作的良好預設選項。 可藉由將 .NET 6+ 設為目標,或在較舊的 .NET Core 和 .NET Framework 應用程式中藉由新增 .NET System.Diagnostics.DiagnosticsSource 6.0+ NuGet 套件的參考來取得。 除了以廣泛相容性為目標之外,此 API 還新增了來自舊版 API 的許多項目支援,例如:
- 長條圖和百分位數
- 多維度計量
- 強型別高效能接聽程式 API
- 多個同時接聽程式
- 接聽程式存取未彙總的度量
雖然此 API 的設計目的是要與 OpenTelemetry 搭配運作良好,以及其不斷成長的可插即用廠商整合程式庫生態系統,但應用程式也可以選擇直接使用 .NET 內建接聽程式 API。 使用此選項,您可以建立自訂計量工具,而不需採用任何外部程式庫相依性。
PerformanceCounter
System.Diagnostics.PerformanceCounter API 是最舊的 .NET 計量 API。 僅在 Windows 上支援,並提供適用於 Windows OS 效能計數器技術的受控包裝函式。 所有支援的 .NET 版本都有提供。
這些 API 主要是為了相容性而提供;.NET 小組認為這是一個穩定區域,除了不太可能錯誤修正之外,還會收到進一步的改善。 除非專案僅限 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 可以進行自訂工具,雖然自訂工具不是強型別,但只會提供彙總值的存取權,並且在同時使用多個接聽程式時有所限制。 Visual Studio、Application Insights、dotnet-counters 和 dotnet-monitor 直接支援 EventCounters。 如需協力廠商工具支援,請檢查廠商或專案文件,以查看其是否可用。
.NET 團隊預計將來不會對此 API 進行新的投資,但如同 PerformanceCounters
,該 API 將繼續為所有目前和未來使用者提供支援。
協力廠商 API
大部分的應用程式效能監視 (APM) 廠商,例如 AppDynamics、Application Insights、DataDog、DynaTrace 和 NewRelic,都包含計量 API 作為其檢測程式庫的一部分。 Prometheus 和 AppMetrics 也是熱門 .NET OSS 專案。 若要深入了解這些專案,請檢查各種專案網站。