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
etSocketsHttpHandler
)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.