Partager via


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

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

Les composants réseau sont instrumentés pour publier des informations de diagnostic de base en utilisant EventCounters. Il s’agit d’informations comme 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

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

Conseil

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

Fournisseurs

Les informations de mise n 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

Étant donné que la télémétrie entraîne une certaine surcharge des performances quand elle est activée, abonnez-vous uniquement aux fournisseurs qui vous intéressent réellement.

Monitorer les compteurs d’événements à partir de l’extérieur du processus

dotnet-counters

dotnet-counters est un outil de monitoring des performances multiplateforme pour le monitoring de l’intégrité ad hoc et l’investigation des 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 chiffres.

[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 voir toutes les commandes et paramètres disponibles, consultez la documentation de dotnet-counter.

Application Insights

Application Insights ne collecte pas de compteurs d’événements par défaut. Pour plus d’informations sur la personnalisation de l’ensemble des 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 sur la façon de s’abonner à plusieurs runtimes et de compteurs d’événements 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));
    }
}

Consommer des compteurs d’événements In-process

La bibliothèque Yarp.Telemetry.Consumption facilite la consommation de compteurs d’événement dans le processus. Bien que le package soit actuellement géré 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 pouvant être exposées via des événements ou des métriques, créez un problème dotnet/runtime.

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