Comparaison des API de métriques
Lors de l’ajout d’une nouvelle instrumentation de métrique à une application ou bibliothèque .NET, différentes API sont disponibles. Cet article vous aidera à comprendre les options.
API .NET
System.Diagnostics.Metrics
Les API System.Diagnostics.Metrics sont les API multiplateformes les plus récentes et ont été conçues en étroite collaboration avec le projet OpenTelemetry. Si vous n'avez pas de raison spécifique d'utiliser l'une des anciennes API décrites ci-dessous, System.Diagnostics.Metrics est un bon choix par défaut pour les nouveaux travaux. Il est disponible en ciblant .NET 6+, ou dans les anciennes applications .NET Core et .NET Framework en ajoutant une référence au package NuGet .NET System.Diagnostics.DiagnosticsSource 6.0+. En plus de viser une large compatibilité, cette API ajoute la prise en charge de nombreux éléments qui manquaient aux API précédentes, tels que :
- Histogrammes et centiles
- Métriques multidimensionnelles
- API d’écouteur haute performance fortement typée
- Plusieurs écouteurs simultanés
- Accès de l’écouteur aux mesures non agrégées
Bien que cette API ait été conçue pour fonctionner avec OpenTelemetry et son écosystème croissant de bibliothèques d’intégration de fournisseurs, les applications ont également la possibilité d’utiliser directement les API d’écouteur intégrées .NET. Avec cette option, vous pouvez créer des outils de métrique personnalisés sans dépendances de bibliothèques externes.
PerformanceCounter
Les API System.Diagnostics.PerformanceCounter sont les plus anciennes API de métriques .NET. Elles sont uniquement prises en charge sur Windows et fournissent un wrapper managé pour la technologie Performance Counter du système d’exploitation Windows. Elles sont disponibles dans toutes les versions prises en charge de .NET.
Ces API sont fournies principalement pour la compatibilité. L’équipe .NET considère que cette zone est stable et peu susceptible de recevoir une amélioration supplémentaire en dehors des correctifs de bogues. Ces API ne sont pas suggérées pour les nouveaux projets de développement, sauf si le projet est Windows uniquement et que vous souhaitez utiliser les outils Performance Counter Windows.
Pour plus d’informations, consultez Compteurs de performance dans .NET Framework.
EventCounters
Les EventCounters ont été les premières API .NET à prendre en charge une expérience de métriques multi-plateforme. Les API sont disponibles en ciblant .NET Core 3.1 (ou une version ultérieure), mais également un petit sous-ensemble est disponible sur .NET Framework 4.7.1 et les versions ultérieures. Ces API sont entièrement prises en charge et toujours utilisées par les principales bibliothèques .NET, mais elles offrent moins de fonctionnalités que les nouvelles API System.Diagnostics.Metrics. EventCounters peut signaler les taux de modification et de moyennes, mais ne prennent pas en charge les histogrammes et les centiles. Il n’existe pas non plus de prise en charge des mesures multidimensionnelles. Les outils personnalisés sont possibles via l’API EventListener, même s’il n’est pas fortement typé, donne uniquement accès aux valeurs agrégées et présente des limitations lors de l’utilisation simultanée de plusieurs écouteurs. EventCounters est pris en charge directement par Visual Studio, Application Insights, dotnet-counters et dotnet-monitor. Pour obtenir la prise en charge des outils tiers, consultez la documentation du fournisseur ou du projet pour voir s’ils sont disponibles.
L’équipe .NET ne prévoit pas de nouveaux investissements dans cette API à l’avenir, mais comme avec PerformanceCounters
, l’API reste prise en charge pour tous les utilisateurs actuels et futurs.
API tierces
La plupart des fournisseurs de surveillance des performances des applications (APM) tels que AppDynamics, Application Insights, DataDog, DynaTrace et NewRelic incluent des API de métriques dans le cadre de leurs bibliothèques d’instrumentation. Prometheus et AppMetrics sont également des projets OSS .NET populaires. Pour en savoir plus sur ces projets, consultez les différents sites web du projet.