NAGIOS – Supervision des ressources système

Supervision des ressources système

1. Contrôle de la charge du système

Linux, Mac et d’autres systèmes Unix affichent des chiffres « load average ». Ces valeurs vous indiquent comment les ressources de votre système sont occupées. Le load average désigne, sous les systèmes UNIX/Linux, une moyenne de la charge système pour trois périodes 1, 5 et 15 minutes, une mesure de la quantité de travail que fait le système durant ces périodes. Un ordinateur complètement inactif a une charge moyenne de 0. Chaque processus en cours d’exécution en utilisant ou en attente de ressources CPU ajoute 1 à la charge moyenne. Donc, si votre système a une charge de 5, cinq procédés sont soit en utilisation ou en attente de la CPU. Ces valeurs peuvent être récupérées par les commandes Linux uptime ou top :

top 
 
top - 06:26:47 up 226 days, 23:23,  2 users,  load average: 0.00, 0.00, 0.00 
Tasks: 111 total,   1 running, 110 sleeping,   0 stopped,   0 zombie 
Cpu(s):  0.5%us,  0.7%sy,  0.0%ni, 98.5%id,  0.0%wa,  0.0%hi,  0.0%si, 0.3%st 
Mem:   2054424k total,  1336356k used,   718068k free,   156484k buffers 
Swap:        0k total,        0k used,        0k free,  1025332k cached
uptime  
 
06:30:09 up 226 days, 23:27, 1 user,  load average: 0.00, 0.00, 0.00

Nagios fournit le plugin check_load pour contrôler la charge du système. La syntaxe de ce plugin est :

check_load [-r] -w WLOAD1,WLOAD5,WLOAD15 -c CLOAD1,CLOAD5,CLOAD15

Trois options sont disponibles avec check_load :

  • -r, –percpu : cette option permet de diviser la charge système par le nombre de CPU.

  • -w, –warning : cette option spécifie les valeurs des seuils d’avertissement pour les périodes 1, 5 et 15 minutes. Elle s’exprime sous cette forme WLOAD1,WLOAD5,WLOAD15.

  • -c, –critical : cette option spécifie les valeurs des seuils critiques pour les périodes 1, 5 et 15 minutes. Elle s’exprime sous cette forme CLOAD1,CLOAD5,CLOAD15.

L’exemple ci-dessous utilise le plugin check_load pour vérifier la charge système du serveur Nagios :

./check_load -r -w3,2,1 -c5,4,3 
 
OK - load average: 0.00, 0.01, 0.00|load1=0.000;3.000;5.000;0; 
load5=0.005;2.000;4.000;0;
load15=0.000;1.000;3.000;0;

Voici un exemple d’une définition de commande  utilisant des seuils d’avertissement et critiques comme arguments :

define command{ 
   command_name       check_load 
   command_line       $USER1$/check_load -r -w $ARG1$ -c $ARG2$ 
}

2. Contrôle des processus

Le contrôle des processus consiste à vérifier l’état d’un processus spécifique démarré ou non, le taux d’occupation des CPU ainsi que le nombre de processus en cours d’exécution. Avec la ligne de commande, nous pouvons utiliser les deux commandes ps ou top pour récupérer ces informations :

ps aux 
USER    PID %CPU %MEM    VSZ   RSS TTY   STAT  START   TIME COMMAND 
root      1  0.0  0.0  19232  1496 ?       Ss   2015   2:44 /sbin/init 
root      2  0.0  0.0      0     0 ?       S    2015   0:00 [kthreadd] 
root      3  0.0  0.0      0     0 ?       S    2015   5:47 [migration/0] 
root      4  0.0  0.0      0     0 ?       S    2015   2:43 [ksoftirqd/0] 
root      5  0.0  0.0      0     0 ?       S    2015   0:00 [stopper/0] 
root      6  0.0  0.0      0     0 ?       S    2015 266:59 [watchdog/0]

Avec Nagios, nous allons utiliser le plugin check_procs pour récupérer les mêmes informations avec bien sûr l’alerte en cas de problème. La syntaxe de ce plugin est la suivante :

check_procs -w <range> -c <range> [-m metric] [-s state] 
[-p ppid] [-u user] [-r rss] [-z vsz] [-P %cpu] 
[-a argument-array] [-C command] [-t timeout] [-v]

Les options proposées par ce plugin sont :

  • -m, –metric : cette option spécifie le type de métrique à vérifier par la commande, à savoir :

  • PROCS : nombre de processus (par défaut).

  • VSZ : taille de la mémoire virtuelle.

  • RSS : taille de la mémoire résidente.

  • CPU : pourcentage du processeur.

  • ELAPSED : temps écoulé en secondes

  • -s, –state : cette option permet de vérifier seulement les processus qui ont le statut spécifié comme : RZSRSRSZD. Cette option est utile pour rechercher le nombre de processus zombie (Z).

  • -p, –ppid : cette option permet de chercher que les processus enfants du processus dont le numéro de PID est indiqué en PPID.

  • -u, –user : cette option permet de chercher que les processus dont son propriétaire est égal à la valeur passée en USER.

  • -a, –argument-array : cette option permet de chercher uniquement les processus dont un argument contient la valeur passée en STRING.

  • -C, –command : cette option permet de chercher les processus dont le nom de la commande est égal à la valeur passée en COMMAND.

  • -z, –vsz : cette option permet de chercher les processus dont la valeur de mémoire virtuelle est supérieure à la valeur passée en VSZ.

  • -r, –rss : cette option permet de chercher les processus dont la valeur de mémoire résidente est supérieure à la valeur passée en RSS.

  • -P, –pcpu : cette option permet de chercher les processus dont le taux d’occupation des CPU dépasse la valeur indiquée en PCPU.

Le plugin check_procs accepte la déclaration des seuils multiples. Les valeurs pour les options -w et -c peuvent soit prendre une seule valeur ou prendre la forme de <min>:<max>.

Après avoir fait le tour sur les options proposées par le plugin, nous allons maintenant le tester manuellement avec la ligne de commandes.

Un premier test consiste à vérifier  le nombre total de processus en cours d’exécution sur le serveur local :

./check_procs -w 150 -c 250 
PROCS OK: 98 processes | procs=98;150;250;0;

La commande renvoie ensuite le nombre total de processus en cours d’exécution 98 et le compare par rapport aux seuils d’avertissement et critiques 150 et 250 respectivement.

Un deuxième test consiste à contrôler le taux d’utilisation des CPU pour un utilisateur donné :

./check_procs -u nagios -P 50 -w 10 -c 20 
PROCS OK: 0 processes with UID = 500 (nagios), PCPU >= 50.00 | procs=0;10;20;0;

Le résultat retourné indique qu’aucun processus pour l’utilisateur nagios ne consomme plus de 50 % des CPU.

Un dernier test permet de vérifier le nombre de processus zombie :

./check_procs -w 5 -c 10 -s Z 
PROCS OK: 0 processes with STATE = Z | procs=0;5;10;0;

Aucun processus zombie n’a été détecté sur le serveur.

En se basant sur ces exemples, nous pouvons ensuite utiliser les commandes Nagios suivantes :

define command{ 
   command_name        check_procs_num 
   command_line        $USER1$/check_procs -w $ARG1$ -c $ARG2$ 
}
define command{ 
    command_name       check_procs_user 
    command_line       $USER1$/check_procs -u $ARG1$ -P $ARG2$ -w $ARG3$ 
-c $ARG4$ 
}
define command{ 
    command_name        check_zombie_procs 
    command_line        $USER1$/check_procs -s Z -w $ARG1$ -c $ARG2$ 
}

3. Contrôle de l’espace disque

L’espace disque est l’une des ressources critiques d’un système. Pour cette raison, le contrôle de l’espace disque est le plus courant avec Nagios. Le plugin check_disk vérifie la taille de l’espace disque utilisée sur un système de fichiers monté et génère une alerte si l’espace libre est inférieure à une des valeurs de seuil. La syntaxe de ce plugin est la suivante :

check_disk -w limit -c limit [-W limit] [-K limit] 
          {-p path | -x device} [-C] [-E] [-e] 
          [-g group] [-k] [-l] [-M] [-m] [-R path ] 
          [-r path] [-t timeout] [-u unit] [-v] [-X type]

Les options les plus couramment utilisées pour ce plugin sont :

  • -w, –warning : cette option renvoie un état d’avertissement si l’espace libre du disque est inférieur à la valeur passée en paramètre.

  • -c, –critical : cette option retourne un état critique si l’espace libre du disque est inférieur à la valeur passée en paramètre.

  • -W, –iwarning : cette option renvoie un état d’avertissement si le pourcentage d’inodes libres est inférieur à la valeur passée en paramètre.

  • -K, –icritical : cette option retourne un état critique si le pourcentage d’inodes libres est inférieur à la valeur passée en paramètre.

  • -p, –path : cette option spécifie le point de montage ou partition à contrôler.

  • -l, –local : cette option permet de contrôler que les systèmes de fichiers locaux.

  • -M, –mountpoint : cette option permet d’afficher dans le résultat le point de montage plutôt que la partition.

  • -A, –all : cette option permet de vérifier tous les points de montage.

  • -r, –ereg-path : cette option permet de spécifier une expression régulière pour chercher les points de montage et les partitions à contrôler.

  • -R, –eregi-path : cette option permet de spécifier une expression régulière insensible à la casse pour chercher les points de montage et partitions à contrôler.

  • -X, –exclude_device : cette option permet d’ignorer une partition à ne pas vérifier.

  • -u, –units : cette option permet de spécifier l’unité de mesure comme kBMBGBTB. Par défaut : MB.

  • -m, –megabytes : cette option est équivalente à l’option –units MB.

  • -k, –kilobytes : cette option est équivalente à l’option –units kB.

  • -e, –errors-only : cette option permet d’afficher seulement les points de montage posant un problème.

L’appel le plus courant de ce plugin consiste à vérifier l’espace libre d’une partition et le comparer à des seuils. L’exemple suivant illustre cet appel :

./check_disk -w 10% -c 5% -p / 
 
DISK OK - free space: / 36178 MB (94% inode=98%);| /=1960MB;36168;38177;0;40187

Nous pouvons  aussi vérifier l’espace disque de toutes les partitions dans un seul appel en utilisant l’option -A ou –all :

./check_disk -w 10% -c 5% -A 
 
DISK OK - free space: / 36178 MB (94% inode=98%); /dev/shm 1003 MB (100% 
inode=99%);| /=1960MB;36168;38177;0;40187 /dev/shm=0MB;902;952;0;1003

Le problème de cet appel est qu’il vérifie toutes les partitions et points de montage du serveur, y compris ceux et celles qui ne nous n’intéressent pas comme /dev/shm ou tmpfs. Pour cette raison, nous allons appeler le plugin check_disk en utilisant l’option -X ou –exclude-type pour exclure les partitions présentant peu d’intérêt à être surveillées :

./check_disk -w 10% -c 5% -X tmpfs 
 
DISK OK - free space: / 36178 MB (94% inode=98%);| /=1960MB;36168;38177;0;40187

Maintenant que nous avons vu ce que nous pouvions faire avec le plugin check_disk, nous allons l’intégrer à Nagios. Nous définissons trois commandes Nagios génériques en se basant sur les appels ci-dessus.

define command{ 
   command_name     check_partition 
   command_line     $USER1$/check_disk -p $ARG1$ -w $ARG2$ -c $ARG3$ 
}
define command{ 
   command_name       check_all_partitions 
   command_line       $USER1$/check_disk -A -w $ARG1$ -c $ARG2$ 
}
define command{ 
   command_name     check_some_partitions 
   command_line      $USER1$/check_disk -X $ARG1$ -w $ARG2$ -c $ARG3$ 
}

4. Contrôle de l’espace swap

L’espace d’échange ou connu par l’espace swap est utilisé dans les serveurs Linux lorsque la mémoire physique (RAM) est saturée. Lorsque le serveur a besoin de ressources en mémoire et que la mémoire physique est toute utilisée, le système déplace les plages inactives de la mémoire sur l’espace swap.

Nagios fournit un plugin nommé check_swap pour contrôler l’espace swap sur la machine locale. La syntaxe de ce plugin est la suivante :

check_swap [-a] [-v] -w limit -c limit

Les options possibles avec ce plugin sont :

  • -a, –allswaps : cette option permet de vérifier toutes les partitions swap, une par une dans un seul appel.

  • -v, –verbose : cette option est utilisée pour voir les détails pour la ligne de commande de débogage.

  • -w, –warning : cette option renvoie un état d’avertissement si l’espace libre restant est inférieur à la valeur passée en paramètre. Elle peut être exprimée en byte ou pourcentage.

  • -c, –critical : cette option renvoie un état d’avertissement si l’espace libre restant est inférieur à la valeur passée en paramètre. Elle peut être exprimée en byte ou pourcentage.

Voici deux exemples d’utilisation de ce plug-in. Le premier, nous utilisons des seuils exprimés en pourcentage :

./check_swap -w 50% -c 10% 
 
SWAP OK - 100% free (520 MB out of 520 MB) |swap=520 MB;235;52;0;520

Et le deuxième, nous utilisons des seuils exprimés en bytes :

./check_swap -w 117000000 -c 24000000 
 
SWAP OK - 100% free (223 MB out of 223 MB) |swap=223MB;111;22;0;223

Un exemple d’une commande Nagios est le suivant :

define command{ 
   command_name          check_swap 
   command_line          $USER1$/check_swap -w $ARG1$ -c $ARG2$ 
}

5. Contrôle des utilisateurs connectés

Nagios permet aussi de surveiller le nombre d’utilisateurs connectés sur la machine et vous alerte si ce nombre dépasse les seuils en utilisant le plugin check_users. La syntaxe de ce plugin est très simple :

check_users -w <users> -c <users>

Voici un exemple d’utilisation de ce plugin :

./check_users -w 2 -c 3 
 
USERS OK - 1 users currently logged in |users=1;2;3;0 

Ci-dessous la commande Nagios correspond à cet exemple :

define command{ 
   command_name         check_users 
   command_line         $USER1$/check_users -w $ARG1$ -c $ARG2$ 
}