HttpClient の高カーディナリティ メトリクスに ObservableCounter を使用する

.NET 11 以降では、http.client.open_connectionsとhttp.client.active_requestsのメトリックでは、UpDownCounter<T>ではなくObservableUpDownCounter<T>が使用されます。 コードで MeterListener を使用してこれら 2 つのインストルメントからの測定値を直接リッスンする場合は、測定イベント コールバックを通じて受け取らなくなります。

導入されたバージョン

.NET 11 RC 1

以前の動作

以前は、 http.client.open_connections と http.client.active_requests は通常の UpDownCounter<long> 楽器でした。 HttpClient は、接続または要求が開始または停止されるたびにカウンターに Add 呼び出されるため、いずれかのインストルメントの測定イベントを有効にした MeterListener は、個々の Add 呼び出しごとにプッシュ通知を受信しました。

新しい動作

.NET 11以降、http.client.open_connectionsとhttp.client.active_requestsはObservableUpDownCounter<long>楽器です。 HttpClient は、現在のカウントを内部的に保持し、コレクション ツールが現在の値を要求した場合にのみレポートします。 いずれかの機器の測定イベントを有効にする MeterListener は、個々のプッシュ通知を受信しなくなりました。 代わりに、 MeterListener.RecordObservableInstruments() を定期的に呼び出して、現在の測定値をオンデマンドでプルする必要があります。

OpenTelemetry SDK、Prometheus エクスポーター、 dotnet-counters、 dotnet-monitor、 Aspire ダッシュボードなど、既にプルベースでメトリックを収集しているツールは、既に観測可能な機器を定期的にサンプリングしているため、影響を受けません。

破壊的変更の種類

この変更は 動作の変更です。

変更理由

http.client.open_connectionsメトリックとhttp.client.active_requests メトリックには、サーバーアドレスやピア アドレスなどのカーディナリティの高いタグが含まれます。 これらのメトリックは通常のカウンターであるため、監視バックエンドで観察されたタグ値の一意の組み合わせはすべて保持され、無期限に集計され、無制限のメモリの増加と一部の監視システムでのコストの増加が発生しました。 監視可能なカウンターを使用すると、 HttpClient 内部的にカウントを維持し、現在アクティブな組み合わせのみを報告し、カウントが 0 に戻るエントリを削除できます。 詳細については、 この変更を行ったプル要求 と、 高カーディナリティ属性に関する関連する問題を参照してください。

MeterListenerを直接使用してhttp.client.open_connectionsまたはhttp.client.active_requestsを読み取る場合は、測定イベントコールバックのみに依存するのではなく、これらのメトリックをサンプリングする間隔でリスナーでRecordObservableInstruments()を呼び出します。 メトリック収集ツール、エクスポーター、または Aspire ダッシュボードを使用してこれらのメトリックを使用する場合、これらのツールは既に監視可能なインストルメントから値をプルしているため、アクションは必要ありません。

影響を受ける API