As métricas de alta cardinalidade do HttpClient usam contadores observáveis

A partir do .NET 11, as métricas http.client.open_connections e ObservableUpDownCounter<T> usam UpDownCounter<T> em vez de http.client.active_requests. Se o seu código usa MeterListener diretamente para ouvir medições destes dois instrumentos, você não as receberá mais por meio do callback de evento de medição.

Versão introduzida

.NET 11 RC 1

Comportamento anterior

Antes, http.client.open_connections e http.client.active_requests eram instrumentos UpDownCounter<long> comuns. HttpClient chamava Add no contador sempre que uma conexão ou solicitação era iniciada ou encerrada, portanto um MeterListener que habilitasse eventos de medição para qualquer um dos instrumentos recebia uma notificação push para cada chamada individual de Add.

Novo comportamento

A partir do .NET 11, http.client.open_connections e http.client.active_requests são instrumentos ObservableUpDownCounter<long>. HttpClient mantém as contagens atuais internamente e apenas as relata quando uma ferramenta de coleção solicita o valor atual. Um MeterListener que permite eventos de medida para qualquer um dos instrumentos não recebe mais notificações por push individuais. Em vez disso, você deve chamar MeterListener.RecordObservableInstruments() periodicamente para obter as medições atuais sob demanda.

Ferramentas que já coletam métricas por pull, como o SDK do OpenTelemetry, os exportadores do Prometheus, dotnet-counters, dotnet-monitor e o painel Aspire, não são afetadas porque já fazem a amostragem de instrumentos observáveis periodicamente.

Tipo de mudança disruptiva

Esta é uma alteração comportamental.

Motivo da alteração

As métricas http.client.open_connections e http.client.active_requests incluem etiquetas de alta cardinalidade, como endereços de servidor e de peer. Como essas métricas eram contadores regulares, cada combinação exclusiva de valores de tag que um backend de monitoramento observava era retida e agregada indefinidamente, o que causava crescimento ilimitado da memória e aumento de custos em alguns sistemas de monitoramento. Os contadores observáveis permitem HttpClient manter as contagens internamente, relatar apenas as combinações que estão ativas no momento e remover entradas cuja contagem retorna a zero. Para obter mais informações, consulte a solicitação de pull que fez essa alteração e o problema relacionado sobre atributos de alta cardinalidade.

Se você usar MeterListener diretamente para ler http.client.open_connections ou http.client.active_requests, chame RecordObservableInstruments() no seu listener no intervalo em que deseja coletar essas métricas, em vez de depender apenas do callback do evento de medição. Se você consumir essas métricas por meio de uma ferramenta de coleta de métricas, de um exportador ou do painel Aspire, nenhuma ação é necessária, porque essas ferramentas já extraem valores de instrumentos observáveis.

APIs afetadas