次の方法で共有


メトリック API の比較

新しいメトリック インストルメンテーションを .NET アプリまたはライブラリに追加するときは、さまざまな API から選択できます。 この記事では、使用できる機能および関連する一部のトレードオフについて説明します。

API には、ベンダー中立とベンダー固有という、主要な 2 つのカテゴリがあります。 ベンダー固有の API には、ベンダーが設計を迅速に反復処理し、特別な機能を追加し、インストルメンテーション API とそのバックエンド システムとの緊密な統合を実現できるという利点があります。 たとえば、Application Insights によって提供されるメトリック API を使用してアプリをインストルメント化した場合は、分析ツールを使用するときに、適切に統合された機能と、すべての Application insights の最新の機能を見つけることが期待されます。 ただし、ライブラリまたはアプリも、このベンダーと結合されます。また、将来別のものに変更するには、インストルメンテーションの書き直しが必要になります。 ライブラリでは、この結合が特に問題になる可能性があります。ライブラリ開発者は 1 つのベンダーの 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 チームは、バグ修正を除いて、これ以上の改善は見込みにくい安定した領域であると考えています。 プロジェクトが 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 を使用して実行できますが、厳密に型指定されていないため、集計値へアクセスできるのみであり、同時に複数のリスナーを使用する場合には制限があります。 EventCounters は、Visual StudioApplication Insightsdotnet-countersdotnet-monitor によって直接サポートされています。 サードパーティ製のツールのサポートについては、ベンダーまたはプロジェクトのドキュメントを参照して、利用可否を確認してください。

.NET チームは、今後、この API に大きな投資を行うことを想定していませんが、PerformanceCounters と同様に、現在および将来のすべてのユーザーに対して、API のサポートは積極的に継続されます。

サードパーティ API

AppDynamicsApplication InsightsDataDogDynaTraceNewRelic など、ほとんどのアプリケーション パフォーマンス監視 (APM) ベンダーには、そのインストルメンテーション ライブラリの一部として、メトリック API が含まれています。 また、PrometheusAppMetrics も、一般的な .NET OSS プロジェクトです。 これらのプロジェクトの詳細については、さまざまなプロジェクトの Web サイトを参照してください。