Delen via


Netwerk gebeurtenistellers in .NET

EventCounters zijn .NET-API's die worden gebruikt voor lichtgewicht, platformoverschrijdende en bijna realtime prestatiegegevensverzameling.

Netwerkonderdelen zijn geïnstrueerd voor het publiceren van basisdiagnosegegevens met behulp van EventCounters. Ze bevatten informatie zoals de volgende:

  • 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

Aanbeveling

Zie bekende tellers voor de volledige lijst.

Aanbeveling

Voor projecten die gericht zijn op .NET 8+, kunt u overwegen om de nieuwere en rijkere netwerkmetriek te gebruiken in plaats van EventCounters.

Aanbieders

Netwerkgegevens worden verdeeld over de volgende providers:

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

De telemetrie heeft enige prestatieoverhead wanneer deze is ingeschakeld, dus zorg ervoor dat u zich alleen abonneert op providers waarin u daadwerkelijk geïnteresseerd bent.

Monitor gebeurtenistellers van buiten het proces

dotnet-counters

dotnet-counters is een platformonafhankelijk hulpprogramma voor prestatiebewaking, voor ad-hoc bewaking van de gezondheid en eerste niveau prestatieonderzoek.

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

Met het commando wordt de console voortdurend vernieuwd met de nieuwste cijfers.

[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

Zie de dotnet-counter docs voor alle beschikbare opdrachten en parameters.

Analyses van toepassingen

Application Insights verzamelt standaard geen gebeurtenistellers. Zie de documentatie van AppInsights EventCounters voor informatie over het aanpassen van de set tellers waarin u geïnteresseerd bent.

Voorbeeld:

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

Zie het RuntimeEventCounters-voorbeeld om te zien hoe u zich kunt abonneren op veel runtime- en ASP.NET-gebeurtenistellers. Voeg gewoon een EventCounterCollectionRequest voor elk item toe.

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

Gebeurtenistellers tijdens de uitvoering gebruiken

Met de Yarp.Telemetry.Consumption bibliotheek kunt u eenvoudig gebeurtenistellers gebruiken vanuit het proces. Hoewel het pakket momenteel wordt onderhouden als onderdeel van het YARP-project , kan het worden gebruikt in elke .NET-toepassing.

Als u deze wilt gebruiken, implementeert u de IMetricsConsumer<TMetrics> interface:

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

Registreer vervolgens de implementaties bij uw DI-container:

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

De bibliotheek biedt de volgende sterk getypte metrische gegevenstypen:

Meer telemetrie nodig?

Als u suggesties hebt voor andere nuttige informatie die via gebeurtenissen of statistieken kan worden weergegeven, maak dan een dotnet/runtime-issue aan.

Als u de Yarp.Telemetry.Consumption bibliotheek gebruikt en suggesties hebt, maak een issue aan bij microsoft/reverse-proxy.