Le metriche di cardinalità elevata di HttpClient usano contatori osservabili

A partire da .NET 11, le http.client.open_connections metriche e http.client.active_requests usano ObservableUpDownCounter<T> anziché UpDownCounter<T>. Se il codice usa MeterListener direttamente per ascoltare le misurazioni di questi due strumenti, non li ricevi più tramite il callback dell'evento di misurazione.

Versione introdotta

.NET 11 RC 1

Comportamento precedente

In precedenza, http.client.open_connections e http.client.active_requests erano normali strumenti UpDownCounter<long>. HttpClient chiamava Add sul contatore ogni volta che una connessione o una richiesta veniva avviata o arrestata, pertanto un oggetto MeterListener che aveva abilitato gli eventi di misurazione per uno dei due strumenti riceveva una notifica per ogni singola chiamata a Add.

Nuovo comportamento

A partire da .NET 11 http.client.open_connections e http.client.active_requests sono ObservableUpDownCounter<long> strumenti. HttpClient mantiene i conteggi correnti internamente e li segnala solo quando uno strumento di raccolta richiede il valore corrente. Oggetto MeterListener che abilita gli eventi di misurazione per entrambi gli strumenti non riceve più singole notifiche push. È invece necessario chiamare MeterListener.RecordObservableInstruments() periodicamente per recuperare su richiesta le misurazioni attuali.

Gli strumenti che raccolgono già le metriche con modalità pull, come l'SDK OpenTelemetry, gli esportatori Prometheus, dotnet-counters, dotnet-monitor e la dashboard Aspire, non subiscono effetti perché campionano già periodicamente gli strumenti osservabili.

Tipo di cambiamento che interrompe la compatibilità

Questa modifica è una modifica funzionale.

Motivo della modifica

Le metriche http.client.open_connections e http.client.active_requests includono tag ad alta cardinalità, come gli indirizzi del server e dei peer. Poiché queste metriche erano contatori regolari, ogni combinazione univoca di valori di tag rilevati da un back-end di monitoraggio è stata mantenuta e aggregata per un periodo illimitato, che ha causato un aumento della crescita della memoria non associato e costi aumentati in alcuni sistemi di monitoraggio. I contatori osservabili consentono di HttpClient mantenere i conteggi internamente, segnalare solo le combinazioni attualmente attive e eliminare le voci il cui conteggio torna a zero. Per altre informazioni, vedere la richiesta pull che ha apportato questa modifica e il problema correlato sugli attributi di cardinalità elevata.

Se si utilizza MeterListener direttamente per leggere http.client.open_connections o http.client.active_requests, chiamare RecordObservableInstruments() nel listener all'intervallo con cui si desidera campionare queste metriche, anziché basarsi esclusivamente sul callback dell'evento di misurazione. Se si usano queste metriche tramite uno strumento di raccolta delle metriche, un utilità di esportazione o il Aspire dashboard, non è necessaria alcuna azione perché questi strumenti estraggono già i valori dagli strumenti osservabili.

Le API interessate