.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 :

perfmon_add_counter.PNG

 Il suffit ensuite d'ajouter ce compteur dans une session Perfmon pour pouvoir le surveiller.

perfmon.gif

 

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.

« Application Insights supporte les compteurs de performance uniquement si ASP.NET Core cible le Framework .NET

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

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus