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.Http
HttpClient
( eSocketsHttpHandler
)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.