HttpClient 高基數計量採用可觀察計數器

從 .NET 11 開始,http.client.open_connections 和 http.client.active_requests 計量會使用 ObservableUpDownCounter<T> 取代 UpDownCounter<T>。 如果你的程式碼直接用 MeterListener 來監聽這兩個儀器的測量數據,你就不會再透過測量事件回撥接收數據。

所推出的版本

.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 exporters dotnet-counters及dotnet-monitorAspire儀表板等已以拉取方式收集指標的工具,因已定期取樣可觀察儀器,因此不受影響。

破壞性變更的類型

此變更為行為變更。

變更原因

http.client.open_connections與http.client.active_requests指標包括高基數標籤,如伺服器與對等位址。 由於這些指標是規則計數器,監控後端觀察到的每一個獨特標籤值組合都會被無限保留並彙總,導致某些監控系統記憶體無限成長並增加成本。 可觀察計數器可讓 HttpClient 在內部維護計數,只回報目前處於作用中的組合,並移除計數回到零的項目。 更多資訊請參閱 做出此變更的拉取請求 及相關 高基數屬性問題。

如果你直接使用 MeterListener 讀取 http.client.open_connections 或 http.client.active_requests,請依照你想要取樣這些指標的時間間隔,在監聽器上呼叫 RecordObservableInstruments(),而不要只依賴測量事件回呼。 如果你透過指標收集工具、匯出器 Aspire 或儀表板來處理這些指標,則不需要任何操作,因為這些工具已經從可觀察的儀器中拉取數值。

受影響的 API