Share via


計量 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 Core 和 .NET Framework 應用程式中藉由新增 .NET System.Diagnostics.DiagnosticsSource 6.0+ NuGet 套件的參考來取得。 除了以廣泛相容性為目標之外,此 API 還新增了來自舊版 API 的許多項目支援,例如:

  • 長條圖和百分位數
  • 多維度計量
  • 強型別高效能接聽程式 API
  • 多個同時接聽程式
  • 接聽程式存取未彙總的度量

雖然此 API 的設計目的是要與 OpenTelemetry 搭配運作良好,以及其不斷成長的可插即用廠商整合程式庫生態系統,但應用程式也可以選擇直接使用 .NET 內建接聽程式 API。 使用此選項,您可以建立自訂計量工具,而不需採用任何外部程式庫相依性。

PerformanceCounter

System.Diagnostics.PerformanceCounter API 是最舊的計量 API。 僅在 Windows 上支援,並提供適用於 Windows OS 效能計數器技術的受控包裝函式。 所有支援的 .NET 版本都有提供。

這些 API 主要是為了相容性而提供;.NET 小組認為這是一個穩定區域,除了不太可能錯誤修正之外,還會收到進一步的改善。 除非專案僅限 Windows,而且您想要使用 Windows 效能計數器工具,否則新的開發專案不會建議這些 API。

如需詳細資訊,請參閱 .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 可以進行自訂工具,雖然自訂工具不是強型別,但只會提供彙總值的存取權,並且在同時使用多個接聽程式時有所限制。 Visual StudioApplication Insightsdotnet-countersdotnet-monitor 直接支援 EventCounters。 如需協力廠商工具支援,請檢查廠商或專案文件,以查看其是否可用。

.NET 小組預期未來不會對此 API 進行大量新投資,但如同 PerformanceCounters,所有目前和未來的使用者仍會主動支援 API。

協力廠商 API

大部分的應用程式效能監視 (APM) 廠商,例如 AppDynamicsApplication InsightsDataDogDynaTraceNewRelic,都包含計量 API 作為其檢測程式庫的一部分。 PrometheusAppMetrics 也是熱門 .NET OSS 專案。 若要深入了解這些專案,請檢查各種專案網站。