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 i SocketsHttpHandler)
  • 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.