HttpClient-Metriken mit hoher Kardinalität verwenden beobachtbare Zähler

Ab .NET 11 verwenden die Metriken ObservableUpDownCounter<T> und http.client.open_connectionshttp.client.active_requests anstelle von UpDownCounter<T>. Wenn Ihr Code MeterListener direkt verwendet, um Messwerte dieser beiden Instrumente zu empfangen, erhalten Sie diese nicht mehr über den Measurement-Event-Callback.

Eingeführt in Version

.NET 11 RC 1

Bisheriges Verhalten

Zuvor waren http.client.open_connections und http.client.active_requests reguläre UpDownCounter<long>-Instrumente. HttpClient rief Add für den Zähler jedes Mal auf, wenn eine Verbindung oder Anforderung gestartet oder beendet wurde, sodass ein MeterListener, das Messereignisse für eines der beiden Instrumente aktiviert hatte, für jeden einzelnen Aufruf von Add eine Pushbenachrichtigung erhielt.

Neues Verhalten

Ab .NET 11 sind http.client.open_connections und http.client.active_requestsObservableUpDownCounter<long>-Instrumente. HttpClient verwaltet die aktuellen Zählungen intern und meldet sie nur, wenn ein Sammlungstool nach dem aktuellen Wert fragt. Ein MeterListener, das Messereignisse für eines der beiden Instrumente aktiviert, erhält keine einzelnen Push-Benachrichtigungen mehr. Stattdessen müssen Sie regelmäßig aufrufen MeterListener.RecordObservableInstruments() , um die aktuellen Messungen bei Bedarf abzurufen.

Tools, die bereits Metriken auf Pullbasis sammeln, z. B. das OpenTelemetry SDK, Prometheus-Exporter, dotnet-counters, dotnet-monitorund das Aspire Dashboard, sind nicht betroffen, da sie bereits observierbare Instrumente in regelmäßigen Abständen probieren.

Art der einschneidenden Änderung

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Die Metriken http.client.active_requests und http.client.open_connections umfassen Tags mit hoher Kardinalität wie Server- und Peer-Adressen. Da es sich bei diesen Metriken um normale Zähler handelte, wurde jede eindeutige Kombination von Tag-Werten, die ein Monitoring-Backend erfasste, unbegrenzt gespeichert und aggregiert, was in einigen Monitoring-Systemen zu unbegrenztem Speicherwachstum und höheren Kosten führte. Beobachtbare Zähler ermöglichen es HttpClient, die Zählerstände intern zu verwalten, nur die Kombinationen zu melden, die derzeit aktiv sind, und Einträge zu entfernen, deren Zählerstand auf null zurückkehrt. Weitere Informationen finden Sie in der Pull-Anforderung, die diese Änderung vorgenommen hat , und das zugehörige Problem mit Attributen mit hoher Kardinalität.

Wenn Sie MeterListener direkt verwenden, um http.client.open_connections oder http.client.active_requests zu lesen, rufen Sie RecordObservableInstruments() auf Ihrem Listener in dem Intervall auf, in dem Sie diese Metriken erfassen möchten, anstatt sich ausschließlich auf das Messereignis-Callback zu verlassen. Wenn Sie diese Metriken über ein Metriksammlungstool, einen Exporter oder das Aspire Dashboard nutzen, ist keine Aktion erforderlich, da diese Tools bereits Werte aus feststellbaren Instrumenten abrufen.

Betroffene APIs