Contadores de eventos de redes en .NET
Los EventCounters son API de .NET que se usan para la recopilación ligera, multiplataforma y casi en tiempo real de métricas de rendimiento.
Los componentes de red se instrumentan para publicar información de diagnóstico básica mediante EventCounters. Incluyen información como la siguiente:
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
Sugerencia
Para obtener la lista completa, consulte los contadores conocidos.
Sugerencia
En los proyectos destinados a .NET 8+, considere la posibilidad de usar las métricas de red más recientes y enriquecidas con características en lugar de EventCounters.
Proveedores
La información de red se divide entre los siguientes proveedores:
System.Net.Http
(HttpClient
ySocketsHttpHandler
)System.Net.NameResolution
(Dns
)System.Net.Security
(SslStream
)System.Net.Sockets
Microsoft.AspNetCore.Hosting
Microsoft-AspNetCore-Server-Kestrel
La telemetría conlleva cierta sobrecarga de rendimiento cuando está habilitada, así que procure suscribirse únicamente a los proveedores que realmente le interesen.
Supervisión de contadores de eventos desde fuera del proceso
dotnet-counters
dotnet-counters
es una herramienta de supervisión de rendimiento multiplataforma diseñada para la investigación del rendimiento y la supervisión del estado de primer nivel ad hoc.
dotnet tool install --global dotnet-counters
dotnet-counters monitor --counters System.Net.Http,System.Net.Security --process-id 1234
El comando actualiza constantemente la consola con las cifras más recientes.
[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 ver todos los comandos y parámetros disponibles, vea la documentación de dotnet-counter.
Application Insights
Application Insights no recopila contadores de eventos de forma predeterminada. Para obtener información sobre cómo personalizar el conjunto de contadores de su interés, vea la documentación de EventCounters de AppInsights.
Por ejemplo:
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 obtener un ejemplo sobre cómo suscribirse a muchos contadores de eventos de ASP.NET y runtime, consulte el ejemplo RuntimeEventCounters. Basta con agregar EventCounterCollectionRequest
en cada entrada.
foreach (var (eventSource, counters) in RuntimeEventCounters.EventCounters)
{
foreach (string counter in counters)
{
module.Counters.Add(new EventCounterCollectionRequest(eventSource, counter));
}
}
Consumo de contadores de eventos en proceso
La biblioteca Yarp.Telemetry.Consumption
facilita el consumo de contadores de eventos desde dentro del proceso.
Aunque actualmente el paquete se mantiene como parte del proyecto YARP, se puede usar en cualquier aplicación .NET.
Para usarlo, implemente la interfaz 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");
}
}
Luego, registre las implementaciones con el contenedor de inserción de dependencias:
services.AddSingleton<IMetricsConsumer<SocketsMetrics>, MyMetricsConsumer>();
services.AddTelemetryListeners();
La biblioteca proporciona los siguientes tipos de métricas fuertemente tipados:
¿Necesita más telemetría?
Si tiene alguna sugerencia relativa a otra información de utilidad que podría exponerse a través de eventos o métricas, cree una incidencia de dotnet/runtime.
Si usa la biblioteca Yarp.Telemetry.Consumption
y tiene alguna sugerencia, cree una incidencia de microsoft/reverse-proxy.