Supervision Nagios

Il y a de cela quelques semaines, un collègue m’a parlé de Nagios. Il m’avait dit que c’était un outil de supervision réseau qui permet d’avoir un aperçu global de ce qui fonctionne et ce qui ne fonctionne pas sur un réseau. A l’époque je n’ai pas tellement prêté attention à ce qu’il me disait parce que je n’en voyais pas l’intérêt.

Puis j’ai eu un cours sur cette technologie et j’ai plutôt bien aimé le concept et comme j’ai un partiel sur Nagios dans un peu moins d’une semaine je me suis dit qu’il serait intéressant de me faire une fiche de révision. La voici  !

I/ Qu’est ce que c’est Nagios ?

Nagios c’est un outil de supervision réseau crée par Ethan Galstad et dont la première version est sortie en 1996. Comme le dit très bien Wikipédia, Nagios est composé de plusieurs éléments :

  1. Le moteur de l’application qui vient ordonnancer les tâches de supervision.
  2. L’interface web, qui permet d’avoir une vue d’ensemble du système d’information et des possibles anomalies.
  3. Les sondes (appelées greffons ou plugins), une centaine de mini programmes que l’on peut compléter en fonction des besoins de chacun pour superviser chaque service ou ressource disponible sur l’ensemble des ordinateurs ou éléments réseaux du SI.

Nagios permet de superviser son réseau. Avec cet outil on va pouvoir superviser deux types d’objets : les hosts (machines physiques ou virtuelles) et les services (un serveur web, ssh, ftp etc…) qui sont associés à un host. Dans cet article je vais vous montrer les bases de l’outil : comment configurer un host, un service etc…

II/ Installer Nagios et configurer un host

Avant d’aller plus loin nous allons avoir besoin d’installer Nagios. En cours j’ai vu comment faire mais comme j’étais légèrement somnolant… Eh bien j’ai supprimé mon répertoire /etc/nagios avec tout ce qui se trouvait dedans… Il a donc fallu que je recommence.

Pour cela je me suis servi de cet article dans lequel vous trouverez le code commenté. Je vous invite à lire l’article d’origine puisqu’il vous permettra de bien comprendre comment se fait l’installation. Le script est niquel, le seul petit défaut c’est que les fichiers de configuration ne sont pas dans le répertoire /etc mais bon… C’est pas non plus gravissime.

Pour les moins courageux vous trouverez le script d’installation condensé ici.

Donnez lui les droits d’exécution et lancez-le. Suivez les instructions et tout devrait fonctionner. Une fois tout installé il faudra lancer les services apache2 et Nagios via les commandes suivantes :

sudo /etc/init.d/apache2 start
sudo /etc/init.d/nagios start

Maintenant si vous allez sur votre navigateur et que vous entrez ceci :

localhost/nagios

Vous devriez obtenir un pop-up qui vous demande un identifiant/mdp. L’identifiant est nagiosadmin quant au mot de passe c’est celui que vous avez spécifié lors de l’installation.

Voici la page d’accueil de Nagios :

nagios1.png

Sur la gauche vous avez plusieurs onglets, cliquez sur « Hosts » :

nagios2.png

Ici vous avez accès à une liste de tous les hosts que vous supervisez. Ne vous inquiétez pas si vous n’avez qu’une ligne (en l’occurrence localhost), j’ai déjà créé l’host vmware sur lequel nous allons travailler plus tard.

Un host peut avoir trois états différents : Up, Down et Unreachable :

nagios3.png
Les services quant à eux peuvent avoir quatre états différents : Ok, Warning, Critical et Unknown.

nagios4.png

Du coup si on reprend l’image précédente, on voit bien que j’ai deux hosts (un up et un down) et huit services (7 Ok et 1 Critical).

Le fichier de configuration principal de Nagios est trouvable ici :

/usr/local/nagios/etc/nagios.cfg

Dans ce premier fichier de configuration vous trouverez notamment les chemins des différents fichiers de configurations de vos hosts :

nagios5.png

Du coup ce que je vous propose de faire, c’est de créer une machine virtuelle dont on se servira en tant qu’host sur Nagios. Bon pour l’host on va utiliser un Debian de base (vous trouverez l’ISO ici). On utilisera aussi VirtualBox que vous pouvez installer en lançant la commande suivante :

sudo apt install virtualbox

Une fois la machine virtuelle créée on va devoir modifier la configuration réseau de VirtualBox. Pour cela allez dans l’onglet « Configurations » > « Réseau » > « Carte 1 » et pour le mode d’accès au réseau sélectionnez « Accès par pont » :

nagios6.png

Lancez la machine virtuelle et une fois que vous aurez installé Debian, lancez la commande « ip a » afin de récupérer l’adresse IP de la machine virtuelle :

nagios7.png

-> 192.168.0.31. Parfait maintenant qu’on a l’adresse on va pouvoir configurer notre host. Pour cela créer le fichier vmware.cfg dans le répertoire objects/ :

sudo touch vmware.cfg

Ouvrez le et copiez le code suivant dedans :

define host{
 use linux-server
 host_name vmware
 alias vmware
 address 192.168.0.31
 }

Mettez au fichier wmware.cfg les droits de lecture puis retournez dans le fichier nagios.cfg et ajoutez y la ligne suivante :

cfg_file=/usr/local/nagios/etc/objects/vmware.cfg

Si vous avez déjà lancé les services apache2 et nagios alors entrez les commandes suivantes :

sudo /etc/init.d/apache2 reload
sudo /etc/init.d/nagios reload

Sinon, entrez les commandes suivantes :

sudo /etc/init.d/apache2 start
sudo /etc/init.d/nagios start

Revenez sur l’interface web de Nagios et normalement vous devriez avoir ceci :

nagios8.png

Si c’est le cas, super ! Sinon il va falloir troobleshoter. Pour cela je vous invite à vous référez à vos journaux de logs :

sudo journalctl -xe

Donc revenons en à notre configuration d’hosts. Une bonne habitude à prendre et d’écrire un fichier de configuration pour un host OU un groupe d’hosts. Si vous le faites pour un groupe d’hosts c’est que ces hosts partagent une caractéristique commune (ce sont tous des serveurs web par exemple).

Dans ce fichier de configuration il faudra créer autant de bloc define host que d’hosts. Donc si vous avez 2 hosts à monitorer vous aurez ceci :

nagios9.png

Avec des lignes à l’intérieur de chaque balise bien évidemment…  Les lignes que l’on va placer dans notre define host s’appellent des macros. Ce sont des variables auxquelles on assigne une valeur.

Nous, nous allons monitorer une seule machine donc un seul bloc define. Dans le bloc il va falloir écrire toutes les  macros de notre host. Pour faciliter la tâche de création des hosts, Nagios met à disposition des utilisateurs des Templates (disponibles dans le fichier templates.cfg). Ces templates sont pré-configurés et facilitent vraiiiiiiiiiment la vie des administrateurs.

Voyez par vous mêmes, voici un fichier de configuration fait à la main :

nagios10.png

Et voici le fichier de configuration que j’utilise pour notre vm avec le template « linux- server » :

nagios11.png

Easy non ? En sachant que les deux configurations font exactement la même chose…

Il existe plusieurs templates : generic-host, generic-linux, generic-windows, switch, serveur-linux etc… Allez voir, ça vaut le coup  !

Bon je vais quand même vous expliquez ce que fait le Template dont je viens de parler :

nagios12.png

Dans un premier temps on retrouve le hostname (le nom de l’host à superviser), son alias (une description succincte) et son adresse IP. Ensuite nous avons « check command » qui est en fait la commande à utiliser afin de vérifier que l’host est UP. Cette vérification est faite maximum 5 fois (mac_check_attempt) avec un intervalle de 5 minutes (check_interval) 24H/24 7J/7 (check_period). Si une erreur est constatée par Nagios, il enverra un mail au contact_group toutes les 30 minutes (notification_interval) 24H/4 7J/7 (notification_interval).

Pour le moment je ne peux pas vous montrer comment configurer les notifications et l’envoi de mail. Par contre je vous ai déniché un petit article bien sympas qui vous l’expliquera.

Dernier petit truc sympas à savoir : on peut rajouter la notion de parent quand on définit un host. Imaginez que vous avez 25 ordinateurs reliés à un switch. Si le switch tombe, vous ne pourrez plus communiquer avec les ordinateurs derrière. Du coup Nagios va vous envoyer 25 fois la même alerte ce qui est clairement inutile. En revanche si vous avez ajouté la ligne :

parents "nom de l'hosts parent"

Eh bien vous ne recevrez qu’une notification.

Breeeeef, voilà ! Notre host est à peu près bien configuré. Maintenant nous allons pouvoir jouer avec les services et les commandes  !

III/ Services et commandes

Un host, ça peut être pleins de choses différentes : un switch, un routeur, un pc sous Windows, un pc sous Linux, un serveur web, SSH, FTP… Tous ces hosts ont donc des particularités et pour chacun il faut tester si leurs fonctionnalités sont disponibles ou non : si le serveur web est accessible depuis un navigateur, si le serveur ssh répond quand on tente de s’y connecter etc…

De manière générale retenez simplement qu’un host va utiliser un ou plusieurs services et ces services il va falloir les définir dans Nagios. Du coup, pour définir un service, il suffit de rajouter la balise suivante :

define service{

 }

A la suite de notre fichier de configuration.

Prenons notre VM, nous voulons savoir combien de personnes sont connectées dessus. Pour cela, retournez sur le fichier de configuration de la vm (vmware.cfg), ajouter la balise define service et à l’intérieur mettez y les macros suivantes :

nagios13.png

Rechargez Nagios avec la commande suivante :

sudo /etc/init.d/nagios reload

Connectez vous à l’interface web, allez dans l’onglet « Services » et observez :

nagios14.png

Notre service fonctionne et nous a précisé qu’il y a un utilisateur actuellement connecté sur la vm ! Au passage vous remarquerez que ce genre de services peuvent être étendu à pleeeeeeeinnnnnnns de choses différentes. Sur mon localhost j’ai un service pour le HTTP, le SSH, le nombre de processus actifs, le pourcentage de partition swapée etc…

Mais comment tout ça fonctionne ? Eh bien si on reprend le code de configuration du service qui est :

nagios13.png

On remarque que la commande utilisée est check_local_users!20!50. Sauf que pour le moment vous ne savez pas où est déclarée cette commande eheh  ! Bon allez je vous le dis, cette commande est déclarée dans le fichier commands.cfg :

nasgio15.png

Comme d’habitude on retrouve la balise define suivie du nom de l’objet à créer (une commande ici). Dans la balise on a le nom de la commande et…. Un truc chelou :

$USER1$/check_user -w $ARG1$ -c $ARG2$

Ça ressemble vachement à une commande (encore) et pour cause, c’en est une. Check_user c’est en fait un plugin ! Ah oui… My bad, j’avais oublié de vous dire qu’avec Nagios on peut utiliser des plugins… Réparons cette erreur  !

IV/ Les plugins

Nagios est un outil extrêmement modulable, il permet notamment d’importer/exporter des plugins. Ces plugins peuvent être trouvés sur le web et répondent bien souvent à un besoin : checker un ensemble de services, vérifier la charge réseau… Ce genre de chose. Lors de l’installation de Nagios nous avons téléchargé des plugins Nagios (environ une 50aines).

Pour savoir où se trouve les plugins sur votre machine il vous suffit de regarder dans le fichier resource.cfg la valeur de $USER1$ :

nagios16.png

Le fichier resource.cfg contient toutes les variables globales accessibles depuis n’importe quel autre fichier.

Nos plugins se trouvent donc dans le répertoire /usr/local/nagios/libexec et si on fait un ls dessus, on obtient ceci :

nagios17.png

Si on regarde bien on va trouver notre binaire check_users. Du coup en reprenant la commande de nôtre service  :

check_local_users!20!25

On peut assez facilement en déduire que la vraie commande exécutée par le plugin est :

/usr/local/nagios/libexec/check_users -w 20 -c 50

A savoir que les paramètres 20 et 50 correspondent en fait à différent niveau de criticité. Si il y a plus de 20 utilisateurs connectés alors le plugin retourne un message de Warning. S’il y a plus de 50 utilisateurs alors il retourne un message Critical.

Si vous voulez avoir plus d’informations sur le fonctionnement d’un plugin il vous suffit de lancer la commande suivante :

./"nom de votre plugin" -h

Et vous obtiendrez ceci :

nagios18.png

/!\ Attention, il existe de nombreux plugins codés par des « particuliers ». Faites attention si vous les utilisez, on est jamais à l’abri d’un petit virus/trojan des familles  /!\