Partilhar via


Contadores de eventos de rede no .NET

EventCounters são APIs .NET usadas para coleta de métricas de desempenho leve, entre plataformas e quase em tempo real.

Os componentes de rede são instrumentados para publicar informações básicas de diagnóstico usando EventCounters. Eles incluem informações como as seguintes:

  • System.Net.Http > requests-started
  • System.Net.Http > requests-failed
  • System.Net.Http > http11-connections-current-total
  • System.Net.Security > all-tls-sessions-open
  • System.Net.Sockets > outgoing-connections-established
  • System.Net.NameResolution > dns-lookups-duration

Gorjeta

Para obter a lista completa, consulte contadores bem conhecidos.

Gorjeta

Em projetos destinados ao .NET 8+, considere usar as métricas de rede mais recentes e ricas em recursos em vez de EventCounters.

Provedores

As informações de rede são divididas entre os seguintes provedores:

  • System.Net.HttpHttpClient( e SocketsHttpHandler)
  • System.Net.NameResolution (Dns)
  • System.Net.Security (SslStream)
  • System.Net.Sockets
  • Microsoft.AspNetCore.Hosting
  • Microsoft-AspNetCore-Server-Kestrel

A telemetria tem alguma sobrecarga de desempenho quando ativada, por isso certifique-se de que subscreve apenas os fornecedores em que está realmente interessado.

Monitore contadores de eventos de fora do processo

dotnet-counters

dotnet-counters é uma ferramenta de monitoramento de desempenho multiplataforma para monitoramento de integridade ad-hoc e investigação de desempenho de primeiro nível.

dotnet tool install --global dotnet-counters
dotnet-counters monitor --counters System.Net.Http,System.Net.Security --process-id 1234

O comando atualiza continuamente o console com os números mais recentes.

[System.Net.Http]
    Current Http 1.1 Connections                       3
    Current Http 2.0 Connections                       1
    Current Http 3.0 Connections                       0
    Current Requests                                   4
    HTTP 1.1 Requests Queue Duration (ms)              0
    HTTP 2.0 Requests Queue Duration (ms)              0
    HTTP 3.0 Requests Queue Duration (ms)              0
    Requests Failed                                    0
    Requests Failed Rate (Count / 1 sec)               0
    Requests Started                                 470
    Requests Started Rate (Count / 1 sec)             18

Para todos os comandos e parâmetros disponíveis, consulte os documentos do contador de pontos.

Application Insights

O Application Insights não coleta contadores de eventos por padrão. Para obter informações sobre como personalizar o conjunto de contadores em que você está interessado, consulte os documentos do AppInsights EventCounters.

Por exemplo:

services.ConfigureTelemetryModule<EventCounterCollectionModule>((module, options) =>
{
    module.Counters.Add(new EventCounterCollectionRequest("System.Net.Http", "current-requests"));
    module.Counters.Add(new EventCounterCollectionRequest("System.Net.Http", "requests-failed"));
    module.Counters.Add(new EventCounterCollectionRequest("System.Net.Http", "http11-connections-current-total"));
    module.Counters.Add(new EventCounterCollectionRequest("System.Net.Security", "all-tls-sessions-open"));
});

Para obter um exemplo de como se inscrever em muitos contadores de eventos de tempo de execução e ASP.NET, consulte o exemplo RuntimeEventCounters. Basta adicionar um EventCounterCollectionRequest para cada entrada.

foreach (var (eventSource, counters) in RuntimeEventCounters.EventCounters)
{
    foreach (string counter in counters)
    {
        module.Counters.Add(new EventCounterCollectionRequest(eventSource, counter));
    }
}

Consumir contadores de eventos em processo

A Yarp.Telemetry.Consumption biblioteca facilita o consumo de contadores de eventos de dentro do processo. Embora o pacote seja atualmente mantido como parte do projeto YARP , ele pode ser usado em qualquer aplicativo .NET.

Para usá-lo, implemente a IMetricsConsumer<TMetrics> interface:

public sealed class MyMetricsConsumer : IMetricsConsumer<SocketsMetrics>
{
    public void OnMetrics(SocketsMetrics previous, SocketsMetrics current)
    {
        var elapsedTime = (current.Timestamp - previous.Timestamp).TotalMilliseconds;
        Console.WriteLine($"Received {current.BytesReceived - previous.BytesReceived} bytes in the last {elapsedTime:N2} ms");
    }
}

Em seguida, registre as implementações com seu contêiner DI:

services.AddSingleton<IMetricsConsumer<SocketsMetrics>, MyMetricsConsumer>();
services.AddTelemetryListeners();

A biblioteca fornece os seguintes tipos de métricas fortemente tipadas:

Precisa de mais telemetria?

Se você tiver sugestões para outras informações úteis que possam ser expostas por meio de eventos ou métricas, crie um problema dotnet/runtime.

Se você estiver usando a Yarp.Telemetry.Consumption biblioteca e tiver sugestões, crie um problema de microsoft/proxy reverso.