Supervision avec PRTG

Guide de configuration de PRTG pour la supervision de SQL Server

PRTG Network Monitor est une solution de supervision commerciale développée par Paessler. Ce guide explique comment configurer PRTG pour superviser SQL Server.

Il ne semble pas exister de package ou de groupe de compteurs adaptés à SQL Server nativement dans PRTG. Il faut les ajouter à la main.

Pour cela, ajouter un capteur « Windows PerfCounter personnalisé », pour inscrire des compteurs de performance Windows liés à SQL Server.

Le plus simple est d’aller les chercher directement sur le serveur SQL pour identifier les compteurs qui vous intéressent, et ensuite vous devez les entrer à la main dans PRTG.

Voici une liste des compteurs les plus importants. Notez que, si vous avez une instance nommée, le préfixe du compteur ne sera pas SQLServer, mais MSSQL$<nom_de_l_instance>. Vérifiez encore une fois directement sur la machine le nom de vos compteurs.

Syntaxe des compteurs de performance

Il faut ajouter les compteurs avec la syntaxe suivante dans PRTG :

\Object(Instance)\Counter

Par exemple, pour le compteur SQLServer:Buffer Manager\Page life expectancy, la syntaxe à entrer dans PRTG est :

\SQLServer:Buffer Manager\Page life expectancy

Unité de mesure

On peut ajouter une unité de mesure personnalisée à chaque compteur de performance dans PRTG, en utilisant la syntaxe suivante :

\Object(Instance)\Counter::Unit

Ici, « unité » correspond simplement au texte affiché après les doubles deux‑points dans chaque définition de compteur de performances, par exemple %, ms, bytes, req/s.

Donc, pour le capteur PerfCounter Custom, chaque ligne a la forme PerfCounterPath::UnitString, par exemple \\Processor(_Total)\\% Processor Time::%, où % est l’unité. Cette chaîne d’unité est totalement libre : on peut utiliser des pourcentages, des unités de temps (ms, s), de taille (KB, MB, bytes), des débits (/s), des simples compteurs, ou n’importe quel libellé personnalisé pertinent pour la métrique. PRTG se sert ensuite de cette unité pour l’affichage des graphes, tableaux et jauges, et pour empiler les canaux qui partagent la même unité.

Compteurs de performance à surveiller

Supervision des performances

  • SQLServer:Buffer Manager\Page life expectancy : Indique le nombre de secondes pendant lesquelles une page de données est restée dans le cache de mémoire tampon. Un nombre bas peut indiquer des problèmes de mémoire.
  • SQLServer:SQL Statistics\Batch Requests/sec : Indique le nombre de requêtes traitées par seconde. Un nombre élevé peut indiquer une charge élevée sur le serveur.
  • SQLServer:General Statistics\User Connections : Indique le nombre de connexions utilisateur actives. Un nombre élevé peut indiquer une charge élevée sur le serveur.

Le cas particulier du Buffer cache hit ratio

Le compteur Windows \SQLServer:Buffer Manager\Buffer cache hit ratio mesure la proportion de requêtes qui ont trouvé leurs pages de données directement dans le cache mémoire de SQL Server, plutôt que de devoir les relire sur disque. C’est un indicateur de l’efficacité du cache : plus la valeur est proche de 100 %, plus SQL Server travaille en mémoire, ce qui est généralement souhaitable.

Ce compteur est de type « ratio » dans la logique des compteurs de performances Windows, et il s’appuie sur un second compteur, \SQLServer:Buffer Manager\Buffer cache hit ratio base, qui sert de base de calcul.

Dans l’API des compteurs de performances, les compteurs « ratio » ne sont pas fournis sous la forme d’un pourcentage lisible. Le système expose séparément un numérateur, le compteur principal, et un dénominateur, la base, et c’est au consommateur de faire la division. Dans SQL Server, si vous interrogez sys.dm_os_performance_counters, vous devez déjà appliquer une formule du type (cntr_value / base_value) * 100 pour retrouver le pourcentage réel. Le même principe s’applique lorsque ces compteurs sont consommés par un outil de supervision comme PRTG.

Le problème du capteur PerfCounter Custom de PRTG est qu’il ne sait lire que des valeurs brutes. Vous pouvez déclarer l’un ou l’autre de ces compteurs comme canal, mais le capteur ne permet pas de définir une expression combinant plusieurs compteurs pour produire une valeur finale. Si vous n’ajoutez que le compteur de ratio sans tenir compte de la base, vous afficherez une valeur qui n’est pas le pourcentage réel, et qui varie de manière peu intuitive.

La solution consiste à décomposer le problème en deux étapes :

  1. Déclarer les deux compteurs comme deux canaux distincts dans un capteur PerfCounter Custom :

    • \\SQLServer:Buffer Manager\\Buffer cache hit ratio::raw
    • \\SQLServer:Buffer Manager\\Buffer cache hit ratio base::base

    Ces deux canaux contiennent les valeurs brutes telles que Windows les fournit.

  2. Créer un capteur calculé, ou un canal calculé selon votre version de PRTG, qui applique la formule du ratio à partir de ces deux canaux : (BufferCacheHitRatio / BufferCacheHitRatioBase) * 100

Affichez ce canal calculé dans vos graphes, avec son unité en pourcentage, et gardez les deux canaux bruts en arrière-plan ou masquez-les pour ne pas surcharger l’interface. Vous respectez ainsi la logique des compteurs de performances SQL Server tout en obtenant dans PRTG un indicateur lisible et exploitable.

Supervision des bases de données

Remplacez db par le nom de votre base de données.

  • SQLServer:Databases(db)\Transactions/sec : Indique le nombre de transactions traitées par seconde. Un nombre élevé peut indiquer une charge élevée sur la base de données.
  • SQLServer:Databases(db)\Log Bytes Flushed/sec : Indique le nombre de bytes de journal de transactions écrits sur le disque par seconde. Un nombre élevé peut indiquer une charge élevée sur la base de données.
  • SQLServer:Databases(db)\Log Flushes/sec : Indique le nombre de flushes de journal de transactions par seconde. Un nombre élevé peut indiquer une charge élevée sur la base de données.
  • SQLServer:Databases(db)\Log Flush Waits/sec : Indique le nombre de validations de transactions par seconde qui ont dû attendre l’écriture du journal. Un nombre élevé indique une latence d’écriture sur le disque des journaux.
  • SQLServer:Databases(db)\Log Flush Wait Time/sec : Indique le temps d’attente pour les flushes de journal de transactions par seconde. Un nombre élevé peut indiquer des problèmes de performance liés au journal de transactions.

Supervision et alertes pour les Groupes de Disponibilité Always On

Supervision du cluster WSFC

Il existe des scripts de capteurs pour le cluster WSFC disponibles sur ce lien GitHub, mais il est possible qu’ils ne fonctionnent plus sur les versions récentes de PRTG.

Get-ClusterStatus.ps1