HttpClient-mått med hög kardinalitet använder observerbara räknare

Från och med .NET 11 använder måtten ObservableUpDownCounter<T> och http.client.open_connectionshttp.client.active_requests i stället för UpDownCounter<T>. Om koden använder MeterListener direkt för att lyssna efter mått från dessa två instrument får du dem inte längre via återanropet till mäthändelsen.

Version som introducerades

.NET 11 RC 1

Tidigare beteende

Tidigare, http.client.open_connections och http.client.active_requests var vanliga UpDownCounter<long> instrument. HttpClient anropas Add på räknaren varje gång en anslutning eller begäran startas eller stoppas, så en MeterListener som aktiverade mäthändelser för något av instrumenten fick ett push-meddelande för varje enskilt Add anrop.

Nytt beteende

Från och med .NET 11, http.client.open_connections och http.client.active_requests är ObservableUpDownCounter<long> instrument. HttpClient underhåller det aktuella antalet internt och rapporterar dem bara när ett samlingsverktyg frågar efter det aktuella värdet. En MeterListener som aktiverar mäthändelser för något av instrumenten tar inte längre emot enskilda push-meddelanden. I stället måste du anropa MeterListener.RecordObservableInstruments() regelbundet för att hämta de aktuella mätningarna på begäran.

Verktyg som redan samlar in mätvärden med pull-metoden, till exempel OpenTelemetry SDK:t, Prometheus-exportörer, dotnet-counters, dotnet-monitor och Aspire-instrumentpanelen, påverkas inte eftersom de redan samplar observerbara instrument regelbundet.

Typ av kompatibilitetsbrytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändringen

Måtten http.client.open_connections och http.client.active_requests innehåller taggar med hög kardinalitet, till exempel server- och peer-adresser. Eftersom dessa mätvärden var vanliga räknare sparades och aggregerades varje unik kombination av taggvärden som en övervakningsbackend observerade på obestämd tid, vilket orsakade obegränsad minnestillväxt och ökade kostnader i vissa övervakningssystem. Observerbara räknare låter HttpClient behålla antalet internt, rapportera endast de kombinationer som för närvarande är aktiva och släppa poster vars antal återgår till noll. Mer information finns i pull-begäran som gjorde den här ändringen och det relaterade problemet med attribut med hög kardinalitet.

Om du använder MeterListener direkt för att läsa http.client.open_connections eller http.client.active_requests, anropa RecordObservableInstruments() på din lyssnare med det intervall som du vill sampla de här mätvärdena, i stället för att enbart förlita dig på återanropet för mäthändelsen. Om du använder dessa mått via ett verktyg för insamling av mått, en exportör eller Aspire instrumentpanelen behövs ingen åtgärd eftersom dessa verktyg redan hämtar värden från observerbara instrument.

Berörda API:er