Metryki o wysokiej kardynalności w HttpClient wykorzystują obserwowalne liczniki

Począwszy od wersji .NET 11 metryki http.client.open_connections i http.client.active_requests używają ObservableUpDownCounter<T> zamiast UpDownCounter<T>. Jeśli kod używa MeterListener bezpośrednio do nasłuchiwania pomiarów z tych dwóch instrumentów, nie otrzymujesz ich już za pośrednictwem wywołania zwrotnego zdarzenia pomiaru.

Wersja wprowadzona

.NET 11 RC 1

Poprzednie zachowanie

Wcześniej http.client.open_connections i http.client.active_requests były zwykłymi UpDownCounter<long> instrumentami. HttpClient była wywoływana Add na liczniku za każdym razem, gdy połączenie lub żądanie było rozpoczynane albo kończone, więc MeterListener, które włączało zdarzenia pomiarowe dla któregokolwiek z tych instrumentów, otrzymywało powiadomienie push dla każdego pojedynczego wywołania Add.

Nowe zachowanie

Począwszy od .NET 11, http.client.open_connections i http.client.active_requests są ObservableUpDownCounter<long> instrumentami. HttpClient utrzymuje bieżące liczby wewnętrznie i zgłasza je tylko wtedy, gdy narzędzie kolekcji prosi o bieżącą wartość. Element MeterListener, który umożliwia rejestrowanie zdarzeń pomiarowych dla jednego lub drugiego instrumentu, nie otrzymuje już indywidualnych powiadomień push. Zamiast tego należy okresowo wywoływać MeterListener.RecordObservableInstruments(), aby w razie potrzeby pobrać aktualne pomiary.

Narzędzia, które już zbierają metryki w modelu pull, takie jak OpenTelemetry SDK, eksportery Prometheus, dotnet-counters, dotnet-monitor oraz pulpit nawigacyjny Aspire, pozostają bez zmian, ponieważ już okresowo próbkują instrumenty obserwowalne.

Typ zmiany przełamującej

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Metryki http.client.open_connections i http.client.active_requests obejmują tagi o wysokiej liczności, takie jak adresy serwerów i peerów. Ponieważ metryki te były zwykłymi licznikami, każda unikatowa kombinacja wartości tagów zaobserwowana przez zaplecze systemu monitorowania była przechowywana i agregowana bezterminowo, co powodowało nieograniczony wzrost zużycia pamięci i zwiększenie kosztów w niektórych systemach monitorowania. Liczniki obserwowalne pozwalają elementowi HttpClient utrzymywać zliczenia wewnętrznie, raportować tylko kombinacje, które są obecnie aktywne, oraz usuwać wpisy, dla których liczba wystąpień spada z powrotem do zera. Aby uzyskać więcej informacji, zobacz żądanie ściągnięcia, które dokonało tej zmiany , oraz powiązany problem dotyczący atrybutów o wysokiej kardynalności.

Jeśli używasz MeterListener bezpośrednio do odczytu http.client.open_connections lub http.client.active_requests, wywołuj RecordObservableInstruments() dla odbiornika nasłuchującego w odstępach, z jakimi chcesz próbkować te metryki, zamiast polegać wyłącznie na wywołaniu zwrotnym zdarzenia pomiarowego. Jeśli te metryki są używane za pomocą narzędzia do zbierania metryk, eksportera lub pulpitu Aspire nawigacyjnego, nie jest wymagana żadna akcja, ponieważ te narzędzia już ściągają wartości z obserwowalnych instrumentów.

Interfejsy API, których dotyczy problem