Nätverkshändelseräknare i .NET
EventCounters är .NET-API:er som används för enkel, plattformsoberoende och nästan realtidsbaserad insamling av prestandamått.
Nätverkskomponenter instrumenteras för att publicera grundläggande diagnostikinformation med EventCounters. De innehåller information som följande:
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
Dricks
Den fullständiga listan finns i välkända räknare.
Dricks
Överväg att använda de nyare och mer funktionsrika nätverksmåtten i stället för EventCounters i projekt som är inriktade på .NET 8+.
Providers
Nätverksinformation delas upp mellan följande leverantörer:
System.Net.Http
(HttpClient
ochSocketsHttpHandler
)System.Net.NameResolution
(Dns
)System.Net.Security
(SslStream
)System.Net.Sockets
Microsoft.AspNetCore.Hosting
Microsoft-AspNetCore-Server-Kestrel
Telemetrin har vissa prestandakostnader när den är aktiverad, så se till att endast prenumerera på leverantörer som du faktiskt är intresserad av.
Övervaka händelseräknare utanför processen
dotnet-counters
dotnet-counters
är ett plattformsoberoende prestandaövervakningsverktyg för ad hoc-hälsoövervakning och prestandaundersökning på första nivån.
dotnet tool install --global dotnet-counters
dotnet-counters monitor --counters System.Net.Http,System.Net.Security --process-id 1234
Kommandot uppdaterar kontinuerligt konsolen med de senaste numren.
[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
Alla tillgängliga kommandon och parametrar finns i dotnet-counter-dokumenten.
Programinsikter
Application Insights samlar inte in händelseräknare som standard. Information om hur du anpassar den uppsättning räknare som du är intresserad av finns i dokumentationen om AppInsights EventCounters.
Till exempel:
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"));
});
Ett exempel på hur du prenumererar på många körnings- och ASP.NET händelseräknare finns i exemplet RuntimeEventCounters. Lägg bara till en EventCounterCollectionRequest
för varje post.
foreach (var (eventSource, counters) in RuntimeEventCounters.EventCounters)
{
foreach (string counter in counters)
{
module.Counters.Add(new EventCounterCollectionRequest(eventSource, counter));
}
}
Använda pågående händelseräknare
Biblioteket Yarp.Telemetry.Consumption
gör det enkelt att använda händelseräknare inifrån processen.
Även om paketet för närvarande underhålls som en del av YARP-projektet kan det användas i alla .NET-program.
Implementera gränssnittet för att använda det 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");
}
}
Registrera sedan implementeringarna med din DI-container:
services.AddSingleton<IMetricsConsumer<SocketsMetrics>, MyMetricsConsumer>();
services.AddTelemetryListeners();
Biblioteket innehåller följande starkt skrivna måtttyper:
Behöver du mer telemetri?
Om du har förslag på annan användbar information som kan exponeras via händelser eller mått skapar du ett problem med dotnet/runtime.
Om du använder Yarp.Telemetry.Consumption
biblioteket och har några förslag skapar du ett microsoft-/reverse-proxy-problem.