Retrouver facilement des compteurs de performances
La mise en place d’une démarche DevOps efficace passe toujours par l’utilisation d'outils de monitoring. Sur Windows, quelle que soit la solution retenue, celle-ci aura besoin de compteurs de performances (ou alors, le monitoring sera très limité).
La problématique
Pour ne pas être noyé dans la masse des métriques, il faut savoir identifier les compteurs utiles, et ceux qui sont disponibles sur les serveurs. Si Microsoft Learn fournit beaucoup d’information sur les compteurs de performances, il est toujours difficile de savoir ceux qui sont vraiment utilisables localement (et pourquoi certains outil ne trouvent pas certains compteurs).
Une solution
Je n’ai jamais vraiment aimé l’UI permettant d’explorer les compteurs de performances. J’ai l’impression qu’elle n’a pas vraiment évolué depuis Windows Server 2000. Je suis surtout gêné par la surcharge d’informations présente sur la boite de sélection des compteurs. On ne voit pas entièrement les noms de compteurs, et la boite de dialogue ne peut pas être redimensionnée.
Ma solution passe donc par PowerShell.
Après avoir trouvé le groupe de compteur qui m’intéresse (en général via Microsoft Learn), j’utilise la commande Get-Counter -ListSet
pour m’assurer de la disponibilité du groupe.
Exemple pour aller chercher des compteurs pour WCF :
Get-Counter -ListSet "ServiceModelService*"
Ce qui retourne les groupes suivants :
CounterSetName : ServiceModelService 4.0.0.0
MachineName : .
CounterSetType : SingleInstance
Description :
Paths : {\ServiceModelService 4.0.0.0(*)\Pourcentage du nombre maximal de sessions simultanées, \ServiceModelService
4.0.0.0(*)\Pourcentage du nombre maximal d'instances simultanées, \ServiceModelService 4.0.0.0(*)\Pourcentage du
nombre maximal d'appels simultanés, \ServiceModelService 4.0.0.0(*)\Messages mis en file d'attente déposés par
seconde…}
PathsWithInstances : {\ServiceModelService 4.0.0.0(*)\Pourcentage du nombre maximal de sessions simultanées, \ServiceModelService
4.0.0.0(*)\Pourcentage du nombre maximal d'instances simultanées, \ServiceModelService 4.0.0.0(*)\Pourcentage du
nombre maximal d'appels simultanés, \ServiceModelService 4.0.0.0(*)\Messages mis en file d'attente déposés par
seconde…}
Counter : {\ServiceModelService 4.0.0.0(*)\Pourcentage du nombre maximal de sessions simultanées, \ServiceModelService
4.0.0.0(*)\Pourcentage du nombre maximal d'instances simultanées, \ServiceModelService 4.0.0.0(*)\Pourcentage du
nombre maximal d'appels simultanés, \ServiceModelService 4.0.0.0(*)\Messages mis en file d'attente déposés par
seconde…}
CounterSetName : ServiceModelService 3.0.0.0
MachineName : .
CounterSetType : SingleInstance
Description :
Paths : {\ServiceModelService 3.0.0.0(*)\Calls, \ServiceModelService 3.0.0.0(*)\Calls Per Second, \ServiceModelService
3.0.0.0(*)\Calls Outstanding, \ServiceModelService 3.0.0.0(*)\Calls Failed…}
PathsWithInstances : {\ServiceModelService 3.0.0.0(*)\Calls, \ServiceModelService 3.0.0.0(*)\Calls Per Second, \ServiceModelService
3.0.0.0(*)\Calls Outstanding, \ServiceModelService 3.0.0.0(*)\Calls Failed…}
Counter : {\ServiceModelService 3.0.0.0(*)\Calls, \ServiceModelService 3.0.0.0(*)\Calls Per Second, \ServiceModelService
3.0.0.0(*)\Calls Outstanding, \ServiceModelService 3.0.0.0(*)\Calls Failed…}
Je sais alors que je peux utiliser le groupe ServiceModelService 4.0.0.0
pour aller chercher des compteurs WCF pour le .net framework 4. On peut alors lister les compteurs de ce groupe via la commande suivante :
(Get-Counter -ListSet "ServiceModelService 4.0.0.0").Counter
Ce qui retourne les compteurs suivants :
\ServiceModelService 4.0.0.0(*)\Pourcentage du nombre maximal de sessions simultanées
\ServiceModelService 4.0.0.0(*)\Pourcentage du nombre maximal d'instances simultanées
\ServiceModelService 4.0.0.0(*)\Pourcentage du nombre maximal d'appels simultanés
\ServiceModelService 4.0.0.0(*)\Messages mis en file d'attente déposés par seconde
\ServiceModelService 4.0.0.0(*)\Messages mis en file d'attente déposés
\ServiceModelService 4.0.0.0(*)\Messages mis en file d'attente rejetés par seconde
\ServiceModelService 4.0.0.0(*)\Messages mis en file d'attente rejetés
\ServiceModelService 4.0.0.0(*)\Messages incohérents mis en file d'attente par seconde
\ServiceModelService 4.0.0.0(*)\Messages incohérents mis en file d'attente
\ServiceModelService 4.0.0.0(*)\Opérations traitées incertaines par seconde
\ServiceModelService 4.0.0.0(*)\Opérations traitées incertaines
\ServiceModelService 4.0.0.0(*)\Opérations traitées annulées par seconde
\ServiceModelService 4.0.0.0(*)\Opérations traitées annulées
\ServiceModelService 4.0.0.0(*)\Opérations traitées validées par seconde
\ServiceModelService 4.0.0.0(*)\Opérations traitées validées
\ServiceModelService 4.0.0.0(*)\Transactions passées par seconde
\ServiceModelService 4.0.0.0(*)\Transactions passées
\ServiceModelService 4.0.0.0(*)\Messages de messagerie fiable déposés par seconde
\ServiceModelService 4.0.0.0(*)\Messages de messagerie fiable supprimés
\ServiceModelService 4.0.0.0(*)\Sessions de messagerie fiable erronées par seconde
\ServiceModelService 4.0.0.0(*)\Sessions de messagerie fiable erronées
\ServiceModelService 4.0.0.0(*)\Instances créées par seconde
\ServiceModelService 4.0.0.0(*)\Instances
\ServiceModelService 4.0.0.0(*)\Appels de sécurité non autorisés par seconde
\ServiceModelService 4.0.0.0(*)\Appels de sécurité non autorisés
\ServiceModelService 4.0.0.0(*)\Échecs de la validation et de l'authentification de la sécurité par seconde
\ServiceModelService 4.0.0.0(*)\Échecs de la validation et de l'authentification de la sécurité
\ServiceModelService 4.0.0.0(*)\Durée des appels
\ServiceModelService 4.0.0.0(*)\Appels erronés par seconde
\ServiceModelService 4.0.0.0(*)\Appels erronés
\ServiceModelService 4.0.0.0(*)\Appels en échec par seconde
\ServiceModelService 4.0.0.0(*)\Appels en échec
\ServiceModelService 4.0.0.0(*)\Appels en attente
\ServiceModelService 4.0.0.0(*)\Appels par seconde
\ServiceModelService 4.0.0.0(*)\Appels
Là, on se rend compte que l'on a un OS en français et donc des compteurs localisés. Pas terrible si notre outil s'appuie sur des noms de compteurs prédéfinis en anglais. Si tel est votre cas, il faudra adapter la configuration.
Et pour tester un compteur en particulier :
Get-Counter -Counter "\ServiceModelService 4.0.0.0(*)\Appels par seconde"
Conclusion
Pour le monitoring .net sur Windows, Powrshell est ton ami ;)