.NET Core : Les compteurs de performance
Pas de support officiel pour le moment
.NET Core étant cross-platform, le Framework se doit d'avoir les mêmes fonctionnalités sur chaque plateforme (Windows, Linux et MacOS). C'est pourquoi le concept de compteur de performance n'est pas encore officiellement disponible avec .NET Core.
Néanmoins, Microsoft tente de faciliter la migration de code reposant sur .NET Framework notamment avec .NET Standard 2.0 et plus récemment le Windows Compatibility Pack for .NET Core disponible actuellement en preview. Ce dernier repose sur un package NuGet unique Microsoft.Windows.Compatibility proposant 20k API supplémentaires par rapport .NET Standard 2.0.
Ci-dessous le tableau d'avancement pour chaque espace de nom disponible dans ce pack.
Component |
Status |
Windows-Only |
||
Microsoft.Win32.Registry |
Available |
Yes |
||
Microsoft.Win32.Registry.AccessControl |
Available |
Yes |
||
System.CodeDom |
Available |
|||
System.ComponentModel.Composition |
Coming |
|||
System.Configuration.ConfigurationManager |
Available |
|||
System.Data.DatasetExtensions |
Coming |
|||
System.Data.Odbc |
Coming |
|||
System.Data.SqlClient |
Available |
|||
System.Diagnostics.EventLog |
Coming |
Yes |
||
System.Diagnostics.PerformanceCounter |
Coming |
Yes |
||
System.DirectoryServices |
Coming |
Yes |
||
System.DirectoryServices.AccountManagement |
Coming |
Yes |
||
System.DirectoryServices.Protocols |
Coming |
|||
System.Drawing |
Coming |
|||
System.Drawing.Common |
Available |
|||
System.IO.FileSystem.AccessControl |
Available |
Yes |
||
System.IO.Packaging |
Available |
|||
System.IO.Pipes.AccessControl |
Available |
Yes |
||
System.IO.Ports |
Available |
Yes |
||
System.Management |
Coming |
Yes |
||
System.Runtime.Caching |
Coming |
|||
System.Security.AccessControl |
Available |
Yes |
||
System.Security.Cryptography.Cng |
Available |
Yes |
||
System.Security.Cryptography.Pkcs |
Available |
Yes |
||
System.Security.Cryptography.ProtectedData |
Available |
Yes |
||
System.Security.Cryptography.Xml |
Available |
Yes |
||
System.Security.Permissions |
Available |
|||
System.Security.Principal.Windows |
Available |
Yes |
||
System.ServiceModel.Duplex |
Available |
|||
System.ServiceModel.Http |
Available |
|||
System.ServiceModel.NetTcp |
Available |
|||
System.ServiceModel.Primitives |
Available |
|||
System.ServiceModel.Security |
Available |
|||
System.ServiceModel.Syndication |
Coming |
|||
System.ServiceProcess.ServiceBase |
Coming |
Yes |
||
System.ServiceProcess.ServiceController |
Available |
Yes |
||
System.Text.Encoding.CodePages |
Available |
Yes |
||
System.Threading.AccessControl |
Available |
Yes |
« System.Diagnostics.PerformanceCounter » sans référencer le Fx .NET (preview)
L'espace de nom « System.Diagnostics.PerformanceCounter » qui permet de gérer les compteurs de performance n'est pas encore inclus dans ce package.
Cependant, il est possible d'accéder à une version preview ici afin d'utiliser les compteurs de performance dans une application .NET Core sans référencer le Framework .NET. Néanmoins, votre application ne pourra s'exécuter que sur un environnement Windows.
Pour y avoir accès directement à travers Visual Studio, n'oubliez pas d'ajouter la source suivante dans les options du gestionnaire de package : https://dotnet.myget.org/F/dotnet-core/api/v3/index.json.
Pour l'exemple, j'ai développé une application console .NET Core 2.0 (disponible sur GitHub) qui crée un compteur de performance et simule une activité. Pendant son exécution, un compteur de performance "MyCustomPerfCounter" est crée sous la categorie "NetCorePerformanceCounter" comme ci-dessous :
Il suffit ensuite d'ajouter ce compteur dans une session Perfmon pour pouvoir le surveiller.
La télémétrie en alternative
Sachez qu'il est également possible d'utiliser une solution APM (Application Performance Management) tel qu'Application Insights.
Avec ce type de dépendance, il est facile de créer une vue détaillée quant à l'état de santé et l'usage de son application avec le suivi des dépendances (HTTP et SQL), pages vues, exceptions et traces.
De plus, il est possible en quelques lignes de code d'enrichir ces données avec ses propres télémétries personnalisées.
Pour plus d'information sur Application Insights, je recommande livre "Microsoft Azure PaaS - Architecturer, déployer et maintenir une application SaaS dans Azure" co-écrit avec Thibaut Ranise disponible chez ENI et autres librairies.
La prochaine étape
L'idéal étant d'avoir un système compatible sur l'ensemble des plateformes supportées par .NET Core. Actuellement, il est possible d'utiliser le type EventCounter au sein de l'implémentation de nos EventSource afin de produire ces données pour ensuite les retrouver dans les ETW mais il existe encore peu de documentation à ce sujet (tutoriel).
Commentaires