Liczniki zdarzeń sieciowych na platformie .NET
EventCounters to interfejsy API platformy .NET używane do lekkiej, międzyplatformowej i niemal w czasie rzeczywistym zbierania metryk wydajności.
Składniki sieciowe są instrumentowane w celu publikowania podstawowych informacji diagnostycznych przy użyciu usługi EventCounters. Zawierają one informacje podobne do następujących:
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
Napiwek
Aby uzyskać pełną listę, zobacz dobrze znane liczniki.
Napiwek
W projektach przeznaczonych dla platformy .NET 8 lub nowszych rozważ użycie nowszych i bardziej zaawansowanych funkcji metryk sieci zamiast elementów EventCounters.
Dostawcy usługi
Informacje o sieci są podzielone między następujących dostawców:
System.Net.Http
(HttpClient
iSocketsHttpHandler
)System.Net.NameResolution
(Dns
)System.Net.Security
(SslStream
)System.Net.Sockets
Microsoft.AspNetCore.Hosting
Microsoft-AspNetCore-Server-Kestrel
Dane telemetryczne mają pewne obciążenie związane z wydajnością po włączeniu, dlatego upewnij się, że subskrybujesz tylko zainteresowanych dostawców.
Monitorowanie liczników zdarzeń spoza procesu
dotnet-counters
dotnet-counters
to międzyplatformowe narzędzie do monitorowania wydajności na potrzeby monitorowania kondycji ad hoc i badania wydajności pierwszego poziomu.
dotnet tool install --global dotnet-counters
dotnet-counters monitor --counters System.Net.Http,System.Net.Security --process-id 1234
Polecenie stale odświeża konsolę przy użyciu najnowszych numerów.
[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
Wszystkie dostępne polecenia i parametry można znaleźć w dokumentacji dotnet-counter.
Szczegółowe dane dotyczące aplikacji
Szczegółowe informacje aplikacji domyślnie nie zbiera liczników zdarzeń. Aby uzyskać informacje na temat dostosowywania zestawu zainteresowanych liczników, zobacz dokumentację App Szczegółowe informacje EventCounters.
Na przykład:
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"));
});
Aby zapoznać się z przykładem subskrybowania wielu środowisk uruchomieniowych i liczników zdarzeń ASP.NET, zobacz przykład RuntimeEventCounters. Wystarczy dodać element EventCounterCollectionRequest
dla każdego wpisu.
foreach (var (eventSource, counters) in RuntimeEventCounters.EventCounters)
{
foreach (string counter in counters)
{
module.Counters.Add(new EventCounterCollectionRequest(eventSource, counter));
}
}
Korzystanie z liczników zdarzeń w procesie
Biblioteka Yarp.Telemetry.Consumption
ułatwia korzystanie z liczników zdarzeń z poziomu procesu.
Pakiet jest obecnie obsługiwany w ramach projektu YARP , ale może być używany w dowolnej aplikacji platformy .NET.
Aby go użyć, zaimplementuj IMetricsConsumer<TMetrics>
interfejs:
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");
}
}
Następnie zarejestruj implementacje w kontenerze DI:
services.AddSingleton<IMetricsConsumer<SocketsMetrics>, MyMetricsConsumer>();
services.AddTelemetryListeners();
Biblioteka udostępnia następujące silnie typizowane typy metryk:
Potrzebujesz więcej danych telemetrycznych?
Jeśli masz sugestie dotyczące innych przydatnych informacji, które mogą być uwidocznione za pośrednictwem zdarzeń lub metryk, utwórz problem z dotnet/runtime.
Jeśli używasz Yarp.Telemetry.Consumption
biblioteki i masz jakiekolwiek sugestie, utwórz problem z serwerem microsoft/reverse-proxy.