Les objets manipulés par Nagios

Nagios manipule un certain nombre d'objets que je vais essayer de décrire brièvement ici :

host : Objet correspondant à un serveur/switch/ routeur ou autre élément physique du réseau

Template d'host : Objet template utilisable dans la déclaration d'un host et qui permet de définir les directives de configuration par défaut que les hosts l'utilisant auront. Cela permet de reduire le nombre de ligne nécéssaire à la déclaration d'un host.

Les directives des templates peuvent être remplacées/réécrites dans la configuration des objets les utilisant.

service : Objet correspondant à une choses devant être vérifiée sur le serveur. Cela peut être par exemple le service HTTP ou encore la place sur un disque d'un serveur.

Template de services : Pareil que les templates d'host pour les objets services.

hostgroup : Groupe d'hosts.

contact : Objet correspondant au personnes à prévenir en cas de problème.

contactgroup : Groupe d'objet contact

command (que j'appel check_command) : Objet correspondant au commande pouvant être utilisé pour vérifier l'état d'un service. On retrouve dans la déclaration d'une commande le chemin du script qui sera exécuté, ainsi que les arguments qui lui seront passés. De manière générale, les scripts de Nagios se trouvent dans le dossier /usr/lib/nagios/plugins.

Les scripts des commands peuvent être exécutés manuellement dans un shell ce qui peut être très pratique pour leur débugage. De manière générale, les scripts de Nagios accepte l'argument -h qui permet d'afficher une aide d'utilisation du script bien pratique pour comprendre leurs utilités.

timeperiod : Objet correspondant à des périodes temporelles utilisées pour spécifier lorsque les vérifications doivent être faites ou encore quand un contact doit être alerté des problèmes survenant.

Lien entre les objets

Un host est lié à :

une command utilisée pour vérifiée l'état de l'host lui-même. Communément, la command check-host-alive correspondant à un ping. (Directive check_command)

un contact ou/et à un contactgroup à avertir au sujet de l'host (directives contacts et contact_groups)

une timeperiod pendant laquelle on avertira les contacts (directive notification_period)

Éventuellement à un template (directive use)

Un service est lié à :

un host ou/et un hostgroup faisant tourner se service (directive host_name et hostgroup_name)

une command utilisée pour vérifier l'état du service (directive check_command)

un contact ou/et à un contactgroup à avertir au sujet du service (directives contacts et contact_groups)

une timeperiod pendant laquelle il sera vérifiée (directive check_period)

une timeperiod pendant laquelle on avertira les contacts (directive notification_period)

Éventuellement à un template (directive use)

Configuration du serveur

La configuration du serveur se trouve dans les dossiers suivants :

/etc/nagios3 : Configuration globale. Vous n'aurez certainement pas trop à y toucher

/etc/nagios3/conf.d : Configuration des objets de Nagios.

/etc/nagios-plugins/config : Configuration des plugins de check de Nagios.

Le dossier /etc/nagios-plugins/config contient la configuration des check_commands livré par défaut avec Nagios. Il convient de ne par modifier ces fichiers de configuration pour faciliter les mises à jours du serveur. Lorsqu'une check_command par défaut ne vous convient pas, il faut en recréer une autre dans le fichier /etc/nagios3/conf.d/chk-commands.cfg par exemple.

Check des services

La vérification d'un service se fait par l'intermédiaire d'une commmand configurée avec la directive check_command. Cette directive est utilisé de la manirère suivante :

check_command nom_de_la_commande!argument1!arguement2!...

nom_de_la_commande : le nom de la commande correspondant à la directive command_name de la déclaration de la command.

argument1/2/etc.. : Les arguments de la command correspondants aux variables $ARG1$, $ARG2, … de la directive command_line de la définition de la commande.

Check via NRPE

Lorsqu'il est impossible de vérifier l'état d'un service depuis la machine faisant tourner Nagios, il faut utiliser le service NRPE qui tournera sur la machine exécutant le service et qui vérifiera localement l'état de ce service et retournera le résultat à Nagios. Sur Nagios, il faut utiliser la check_command nommé check_nrpe_1arg correspondant au script /usr/lib/nagios/plugins/check_nrpe prenant pour seul argument le nom de la command exécutée par NRPE. Ce script comme n'importe quel script nagios peut être exécuté manuellement de la manière suivante :

/usr/lib/nagios/plugins/check_nrpe -H XXX.XXX.XXX.XXX -c nom_de_la_commande

XXX.XXX.XXX.XXX : IP ou le fqdn du serveur NRPE

nom_de_la_commande : nom de la commande devant être exécutée par NRPE qui doit être déclaré dans la configuration de celui-ci.

Si tout fonctionne correctement, vous devriez obtenir le résultat du test.

Pour des raisons de sécurité, le passage d'arguments par Nagios au service NRPE des machines pour l'exécution des commandes est désactivé. Le paramétrage des commandes dans la configuration des NRPE ne peuvent donc pas utiliser de variables.

Installation du service NRPE sur les clients

aptitude install nagios-nrpe-server nagios-plugins

Configuration

Editer le fichier /etc/nagios/nrpe.cfg et commenter les lignes commençant par :

command[~~~]

ou exécuter simplement la commande suivante :

sed -i 's/^command\[/#command\[/' /etc/nagios/nrpe.cfg

Editer le fichier /etc/nagios/nrpe_local.cfg et ajouter les lignes suivantes :

server_address=XXX.XXX.XXX.XXX
allowed_hosts=YYY.YYY.YYY.YYY
# Services

XXX.XXX.XXX.XXX : L'adresse IP sur lequel NRPE devra tourner et qui doit être accessible par le serveur Nagios sur le port TCP 5666. YYY.YYY.YYY.YYY : L'adresse IP du serveur Nagios.

Ajouter les lignes des services en fonction des services tournant sur la machine.

Les plugins NRPE sont les même que les plugins Nagios. Il donc également possible de les lancer manuellement ou encore de les lancer avec pour seul argument -h pour afficher l'aide d'utilisation de ces plugins.

Check des services

Mémoire

Plugin : chech_mem

Copier le ici :

/usr/lib/nagios/plugins/check_mem

Rendre le plugin exécutable :

chmod +x /usr/lib/nagios/plugins/check_mem

Ligne de la commande à ajouter dans nrpe_local.cfg :

command[mem]=/usr/lib/nagios/plugins/check_mem -w 80,20 -c 90,50

Charge

* Ligne de la commande à ajouter dans nrpe_local.cfg

command[load]=/usr/lib/nagios/plugins/check_load -w 1,1,1 -c 2,2,2

MySQL

* Créer un utilisateur MySQL pour nagios :

CREATE USER nagios IDENTIFIED BY 'mdpnagios';

* Ligne de la commande à ajouter dans nrpe_local.cfg

command[mysql]=/usr/lib/nagios/plugins/check_mysql -u nagios -p mdpnagios

SMTP

* Ligne de la commande à ajouter dans nrpe_local.cfg

command[smtp]=/usr/lib/nagios/plugins/check_smtp -H 127.0.0.1

HTTP

* Ligne de la commande à ajouter dans nrpe_local.cfg

command[http]=/usr/lib/nagios/plugins/check_http -H 127.0.0.1

HTTPS

* Ligne de la commande à ajouter dans nrpe_local.cfg

command[https]=/usr/lib/nagios/plugins/check_http --ssl -H 127.0.0.1 -p 443

Onduleur / Nut

* Lignes de commande à ajouter dans nrpe_local.cfg

command[ups]=/usr/lib/nagios/plugins/check_ups -H 127.0.0.1 -u myups
command[upsd]=/usr/lib/nagios/plugins/check_procs -c1:1024 -C upsd
command[upsmon]=/usr/lib/nagios/plugins/check_procs -c1:1024 -C upsmon

UPS : La connexion à l'onduleur (driver)

UPSD : Le daemon dialoguant avec l'onduleur

UPSMON : Le daemon surveillant l'état de l'onduleur et arrếtant le serveur si nécessaire.

Sur un serveur secondaire seul USPMON est nécessaire.

Tomcat

* Ligne de la commande à ajouter dans nrpe_local.cfg

command[tomcat]=/usr/lib/nagios/plugins/check_tcp -H 127.0.0.1 -p 8009

Adapter les noms de la commande (tomcat dans l'exemple) et le port TCP (8009 dans l'exemple).

Montage d'une partition

Utiliser ce script check_mount

Copier le ici :

/usr/lib/nagios/plugins/check_mount

Rendre le plugin exécutable :

chmod +x /usr/lib/nagios/plugins/check_mount

Ligne de la commande à ajouter dans nrpe_local.cfg :

command[mount_point]=/usr/lib/nagios/plugins/check_mount /point/de/montage

Ce plugin vérifie que la partition spécifiée est bien montée. Si celle-ci est montée en lecture-seule, le retour sera un WARNING. Le chemin du point de montage doit être indiqué sans le '/' final.

Espace disque

* Ligne de la commande à ajouter dans nrpe_local.cfg pour la vérification de /

command[disk_slash]=/usr/lib/nagios/plugins/check_disk -w30% -c15% -m /

* Ligne de la commande à ajouter dans nrpe_local.cfg pour la vérification de /tmp

command[disk_tmp]=/usr/lib/nagios/plugins/check_disk -w30% -c15% -m /tmp

* Ligne de la commande à ajouter dans nrpe_local.cfg pour la vérification de /var

command[disk_var]=/usr/lib/nagios/plugins/check_disk -w30% -c15% -m /var

* Ligne de la commande à ajouter dans nrpe_local.cfg pour la vérification de /home

command[disk_home]=/usr/lib/nagios/plugins/check_disk -w30% -c15% -m /home

LDAP

* Ligne de la commande à ajouter dans nrpe_local.cfg

command[ldap]=/usr/lib/nagios/plugins/check_ldap -H 127.0.0.1 -b 'XX=YYY,XX=ZZZ' -3

ou XX=YYY,XX=ZZZ est le basedn du serveur LDAP

Accès Web

* Ligne de la commande à ajouter dans nrpe_local.cfg

command[acces_web]=/usr/lib/nagios/plugins/check_http -H www.google.fr -u http://www.google.fr

Check multiple

Utiliser ce script check_multi

Ce script peut servir de base d'adaptation pour lancer plusieurs script de check sur un serveur et déterminer l'état globale de cette ensemble de services.

Écran de contrôle

Un écran de contrôle peut être créé en utilisation l'application NagVis. Cette application récupère les informations d'états collectées par Nagios à travers une base de données MySQL. Cette base MySQL est alimentée par l'intermédiaire d'un module Nagios appeler ndoutils. Ce module se décompose en deux parties :

un deamon connecté en permanence à la base de données et qui écoute sur une socket (fichier) : /var/cache/nagios3/ndo.sock

un module Nagios communiquant avec le daemon par cette socket pour qu'il aille mettre à jour les infos dans la base de données

Remarque : Le fichier socket est créé et supprimé pas le daemon. Si ce fichier est présent lors du lancement du daemon, celui-ci ne voudra pas se lancer. Il faut simplement le supprimer ou suivre la procédure pour ce type de problème : Panne de l'écran de controle

En cas de problème

Panne de l'écran de contrôle

Lorsque l'écran est jaune et affiche un message du type “Ndoutils ne tourne pas …” il faut :

Se connecter sur le serveur Nagios

Lancer la commande :

nagios_ndo_restore

Cette commande arrête Nagios et Ndoutils, supprime une éventuelle socket problématique, vide et restaure la base de données MySQL et relance ensuite Ndoutils et Nagios. Cela la règle la plupart des problèmes de ce genre.

Installation de ce script

Télécharger le script nagios_ndo_restore

Installer le dans /usr/local/sbin/nagios_ndo_restore

Ce script devra certainement être adapter pour que la ligne de restauration de la base se passe correctement (ajouter -u user -p password pour définir des identifiants de connexion)

Définisser les droits de ce fichier pour le rendre executable

chown root:root /usr/local/sbin/nagios_ndo_restore
chmod 700 /usr/local/sbin/nagios_ndo_restore

Télécharger le fichier ndo.mysql servant pour la restauration de la base

Placer ce fichier dans /etc/nagios3/ndo.mysql

Adapter les premières lignes de ce fichier définissant le login et le password utiliser par ndo pour la connexion à la base MySQL