Netzwerkereigniszähler in .NET
EventCounters sind .NET-APIs für eine schlanke und plattformübergreifende Sammlung von Leistungsmetriken in Quasi-Echtzeit.
Netzwerkkomponenten werden instrumentiert, um grundlegende Diagnoseinformationen mithilfe von EventCounters zu veröffentlichen. Sie enthalten Informationen wie die folgenden:
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
Tipp
Die vollständige Liste finden Sie unter Bekannte Indikatoren.
Tipp
Bei Projekten für .NET 8+ sollten Sie die neueren und funktionsreicheren Netzwerkmetriken anstelle von EventCounters verwenden.
Anbieter
Netzwerkinformationen werden über die folgenden Anbieter verteilt:
System.Net.Http
(HttpClient
undSocketsHttpHandler
)System.Net.NameResolution
(Dns
)System.Net.Security
(SslStream
)System.Net.Sockets
Microsoft.AspNetCore.Hosting
Microsoft-AspNetCore-Server-Kestrel
Die Telemetrie erzeugt einen gewissen Leistungsmehraufwand, wenn sie aktiviert ist. Achten Sie daher darauf, nur Anbieter zu abonnieren, die Sie tatsächlich interessieren.
Überwachen von Ereigniszählern von außerhalb des Prozesses
dotnet-counters
dotnet-counters
ist ein plattformübergreifendes Leistungsüberwachungstool zur Ad-hoc-Überwachung der Integrität und zur Leistungsuntersuchung auf erster Ebene.
dotnet tool install --global dotnet-counters
dotnet-counters monitor --counters System.Net.Http,System.Net.Security --process-id 1234
Der Befehl aktualisiert die Konsole kontinuierlich mit den neuesten Zahlen.
[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
Alle verfügbaren Befehle und Parameter finden Sie in der Dokumentation zu dotnet-counter.
Application Insights
Application Insights erfasst standardmäßig keine Ereignisindikatoren. Informationen zum Anpassen der Indikatoren, die Sie interessieren, finden Sie in der Dokumentation zu AppInsights EventCounters.
Beispiel:
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"));
});
Ein Beispiel für das Abonnieren vieler Runtime- und ASP.NET Ereigniszähler finden Sie unter RuntimeEventCounters. Fügen Sie für jeden Eintrag einfach EventCounterCollectionRequest
hinzu.
foreach (var (eventSource, counters) in RuntimeEventCounters.EventCounters)
{
foreach (string counter in counters)
{
module.Counters.Add(new EventCounterCollectionRequest(eventSource, counter));
}
}
Verwenden von Ereigniszählern im Prozess
Die Yarp.Telemetry.Consumption
-Bibliothek erleichtert die Nutzung von Ereigniszählern innerhalb des Prozesses.
Das Paket wird derzeit zwar im Rahmen des YARP-Projekts gewartet, kann aber in jeder .NET-Anwendung verwendet werden.
Implementieren Sie dazu die Schnittstelle 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");
}
}
Registrieren Sie dann die Implementierungen bei Ihrem DI-Container:
services.AddSingleton<IMetricsConsumer<SocketsMetrics>, MyMetricsConsumer>();
services.AddTelemetryListeners();
Die Bibliothek stellt die folgenden stark typisierten Metriken bereit:
Benötigen Sie weitere Telemetriedaten?
Wenn Sie Vorschläge für andere nützliche Informationen haben, die über Ereignisse oder Metriken verfügbar gemacht werden könnten, erstellen Sie einen Issue in dotnet/runtime.
Wenn Sie die Yarp.Telemetry.Consumption
-Bibliothek verwenden und Vorschläge haben, erstellen Sie einen Issue in microsoft/reverse-proxy.