Contadores de eventos de rede no .NET
EventCounters são APIs do .NET usadas para a coleta de métricas de desempenho leves, multiplataforma 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
Dica
Para obter a lista completa, consulte contadores conhecidos.
Dica
Em projetos direcionados ao .NET 8+, considere usar as métricas de rede mais recentes e mais 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 habilitada, portanto, certifique-se de assinar apenas os provedores nos quais você está realmente interessado.
Monitorar contadores de eventos de fora do processo
dotnet-counters
O dotnet-counters
é uma ferramenta de monitoramento multiplataforma de desempenho para monitoramento de integridade de primeiro nível e investigação de desempenho.
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 conhecer todos os comandos e parâmetros disponíveis, consulte a documentação do dotnet-counter.
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 nos quais você está interessado, consulte a documentação de EventCounters do AppInsights.
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 assinar muitos contadores de eventos de runtime 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 biblioteca Yarp.Telemetry.Consumption
facilita o consumo de contadores de eventos de dentro do processo.
Embora o pacote seja mantido atualmente como parte do projeto YARP, ele pode ser usado em qualquer aplicativo .NET.
Para usá-lo, implemente a interface IMetricsConsumer<TMetrics>
:
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 de DI:
services.AddSingleton<IMetricsConsumer<SocketsMetrics>, MyMetricsConsumer>();
services.AddTelemetryListeners();
A biblioteca fornece os seguintes tipos de métrica fortemente tipados:
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 de dotnet/runtime.
Se você estiver usando a biblioteca Yarp.Telemetry.Consumption
e tiver sugestões, crie um problema da microsoft/proxy reverso.