Sdílet prostřednictvím


Čítače síťových událostí v .NET

EventCounters jsou rozhraní .NET API používaná pro odlehčenou, multiplatformní a téměř kolekci metrik výkonu v reálném čase.

Síťové komponenty jsou instrumentované k publikování základních diagnostických informací pomocí eventCounters. Obsahují například následující informace:

  • 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

Tip

Úplný seznam najdete v dobře známých čítačích.

Tip

U projektů, které cílí na .NET 8 nebo novější, zvažte použití novějších a více síťových metrik s bohatými funkcemi místo EventCounters.

Poskytovatelé

Informace o sítích jsou rozdělené mezi následující poskytovatele:

  • System.Net.Http (HttpClient a SocketsHttpHandler)
  • System.Net.NameResolution (Dns)
  • System.Net.Security (SslStream)
  • System.Net.Sockets
  • Microsoft.AspNetCore.Hosting
  • Microsoft-AspNetCore-Server-Kestrel

Telemetrie má při povolení určité režijní náklady na výkon, proto se ujistěte, že se přihlašujete jenom k odběru poskytovatelů, které vás skutečně zajímají.

Monitorování čítačů událostí mimo proces

dotnet-counters

dotnet-counters je multiplatformní nástroj pro monitorování výkonu pro monitorování stavu ad hoc a prošetření výkonu na první úrovni.

dotnet tool install --global dotnet-counters
dotnet-counters monitor --counters System.Net.Http,System.Net.Security --process-id 1234

Příkaz průběžně aktualizuje konzolu nejnovějšími čísly.

[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

Všechny dostupné příkazy a parametry najdete v dokumentaci k čítači dotnet-counter.

Application Insights

Aplikace Přehledy ve výchozím nastavení neshromažďuje čítače událostí. Informace o přizpůsobení sady čítačů, které vás zajímají, najdete v dokumentaci ke službě App Přehledy EventCounters.

Příklad:

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"));
});

Příklad přihlášení k odběru mnoha modulů runtime a ASP.NET čítačů událostí najdete v ukázce RuntimeEventCounters. Stačí přidat pro EventCounterCollectionRequest každou položku.

foreach (var (eventSource, counters) in RuntimeEventCounters.EventCounters)
{
    foreach (string counter in counters)
    {
        module.Counters.Add(new EventCounterCollectionRequest(eventSource, counter));
    }
}

Využívání čítačů událostí v procesu

Knihovna Yarp.Telemetry.Consumption usnadňuje využívání čítačů událostí v rámci procesu. I když se balíček v současné době udržuje jako součást projektu YARP , lze ho použít v libovolné aplikaci .NET.

Pokud ho IMetricsConsumer<TMetrics> chcete použít, implementujte rozhraní:

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");
    }
}

Pak zaregistrujte implementace v kontejneru DI:

services.AddSingleton<IMetricsConsumer<SocketsMetrics>, MyMetricsConsumer>();
services.AddTelemetryListeners();

Knihovna poskytuje následující typy metrik silného typu:

Potřebujete další telemetrii?

Pokud máte návrhy na další užitečné informace, které by mohly být vystaveny prostřednictvím událostí nebo metrik, vytvořte problém s dotnet/runtime.

Pokud knihovnu Yarp.Telemetry.Consumption používáte a máte nějaké návrhy, vytvořte problém s microsoftem nebo reverzním proxy serverem.