Partager via


Compteurs d’événements de mise en réseau dans .NET

EventCounters sont des API .NET utilisées pour la collecte de métriques de performances légères, multiplateformes et quasiment en temps réel.

Les composants réseau sont instrumentés pour publier des informations de diagnostic de base à l’aide d’EventCounters. Ils incluent des informations telles que les suivantes :

  • 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

Conseil / Astuce

Pour obtenir la liste complète, consultez les compteurs connus.

Conseil / Astuce

Sur les projets ciblant .NET 8+, envisagez d’utiliser les métriques réseau plus récentes et plus riches en fonctionnalités au lieu d’EventCounters.

Fournisseurs

Les informations réseau sont réparties entre les fournisseurs suivants :

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

La télémétrie présente une surcharge de performances lorsqu’elle est activée. Veillez donc à vous abonner uniquement aux fournisseurs qui vous intéressent.

Surveiller les compteurs d’événements de l’extérieur du processus

dotnet-counters

dotnet-counters est un outil de surveillance des performances multiplateforme pour la surveillance de l'état de santé ad hoc et l'analyse de performances de premier niveau.

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

La commande actualise continuellement la console avec les derniers nombres.

[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

Pour toutes les commandes et paramètres disponibles, consultez la documentation de dotnet-counter.

Application Insights

Application Insights ne collecte pas les compteurs d’événements par défaut. Pour plus d’informations sur la personnalisation de l’ensemble de compteurs qui vous intéressent, consultez la documentation AppInsights EventCounters.

Par exemple:

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

Pour obtenir un exemple de l’abonnement à de nombreux compteurs d’événements runtime et ASP.NET, consultez l’exemple RuntimeEventCounters. Ajoutez simplement une EventCounterCollectionRequest pour chaque entrée.

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

Utiliser des compteurs d’événements dans le processus

La bibliothèque Yarp.Telemetry.Consumption facilite l’utilisation des compteurs d’événements au sein du processus. Bien que le package soit actuellement conservé dans le cadre du projet YARP , il peut être utilisé dans n’importe quelle application .NET.

Pour l’utiliser, implémentez l’interface 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");
    }
}

Inscrivez ensuite les implémentations dans votre conteneur DI :

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

La bibliothèque fournit les types de métriques fortement typés suivants :

Vous avez besoin de données de télémétrie supplémentaires ?

Si vous avez des suggestions pour d’autres informations utiles qui peuvent être exposées via des événements ou des métriques, créez un problème dotnet/runtime.

Si vous utilisez la Yarp.Telemetry.Consumption bibliothèque et que vous avez des suggestions, créez un problème microsoft/reverse-proxy.