Table des matières

Nagios

Présentation

Les objets manipulés par Nagios

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

Les directives des templates peuvent être remplacées/réécrites dans la configuration des objets les utilisant.
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.

Lien entre les objets

Configuration du serveur

La configuration du serveur se trouve dans les dossiers suivants :

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.
Lors d'une installation classique du paquet Debian nagios3, les droits sur le dossier /var/lib/nagios3/rw/ sont incorrectes et empêche l'utilisation des commandes externes depuis l'interface CGI. Il faut exécuter la commande suivante afin de permettre au daemon Apache de communiquer avec Nagios via sa socket :
chmod g+rx /var/lib/nagios3/rw/

Le paramètre check_external_commands du fichier de configuration nagios.cfg doit par ailleurs valoir 1.

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!...

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

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.
Certains check peuvent fonctionner en local mais pas depuis le serveur de monitoring. Par exemple lors d'un check faisant appel à fdisk.

On peut donc rajouter une règle de ce type via visudo.

nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/check_moncheck

Il ne reste plus qu'a modifier la définition du check dans le nrpe.cfg pour lui demander d'executer la commande avec sudo

command[check_moncheck]=/usr/bin/sudo /usr/lib/nagios/plugins/check_moncheck

Installation du service NRPE sur les clients
aptitude  install nagios-nrpe-server nagios-plugins
Configuration
command[~~~]

ou exécuter simplement la commande suivante :

sed -i 's/^command\[/#command\[/' /etc/nagios/nrpe.cfg
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.
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.
Mémoire
/usr/local/lib/nagios/plugins/check_mem
chmod +x /usr/local/lib/nagios/plugins/check_mem
command[mem]=/usr/local/lib/nagios/plugins/check_mem -w 80,20 -c 90,50
Charge
command[load]=/usr/lib/nagios/plugins/check_load -w 1,1,1 -c 2,2,2
MySQL
CREATE USER nagios IDENTIFIED BY 'mdpnagios';
command[mysql]=/usr/lib/nagios/plugins/check_mysql -u nagios -p mdpnagios
Le plugin officiel ne retourne pas d'information de performance en suivant la syntaxe Nagios. J'ai écris un plugin qui utilise le plugin officiel et réécris le résultat en intégrant les informations de performances en suivant la syntaxe de Nagios.
MongoDB
Il y avait une coquille dans le script original que j'ai corrigé. Une pull request a été proposé sur le github du projet pour corrigé cela.
PostgreSQL
SMTP
command[smtp]=/usr/lib/nagios/plugins/check_smtp -H 127.0.0.1
HTTP
command[http]=/usr/lib/nagios/plugins/check_http -H 127.0.0.1
HTTPS
command[https]=/usr/lib/nagios/plugins/check_http --ssl -H 127.0.0.1 -p 443
Onduleur / Nut
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
  1. UPS : La connexion à l'onduleur (driver)
  2. UPSD : Le daemon dialoguant avec l'onduleur
  3. 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
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
/usr/lib/nagios/plugins/check_mount
chmod +x /usr/lib/nagios/plugins/check_mount
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
command[disk_slash]=/usr/lib/nagios/plugins/check_disk -w30% -c15% -m /
command[disk_tmp]=/usr/lib/nagios/plugins/check_disk -w30% -c15% -m /tmp
command[disk_var]=/usr/lib/nagios/plugins/check_disk -w30% -c15% -m /var
command[disk_home]=/usr/lib/nagios/plugins/check_disk -w30% -c15% -m /home
LDAP
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

Synchronisation LDAP

Avec :

Accès Web
command[acces_web]=/usr/lib/nagios/plugins/check_http -H www.google.fr -u http://www.google.fr
RBL Messagerie

Permet de vérifier si un host est blacklisté ou pas au niveau de la messagerie. Téléchargement du plugin et installation.

cd /tmp
wget http://freshmeat.net/urls/a49afc30ffffe6d87d403f8b149f4fa0 -O nagios-check_bl-1.0.tar.gz
tar zxfv nagios-check_bl-1.0.tar.gz
cd nagios-check_bl-1.0
cp check_bl /usr/lib/nagios/plugins/
apt-get install libnet-dns-perl

Test du plugin.

cd /usr/lib/nagios/plugins/
./check_bl -H mail.yourdomain.com zen.spamhaus.org

Création d'une commande personnalisée dans /etc/nagios3/commands.conf.

define  command {
command_name    check_bl
command_line    $USER1$/check_bl -H $HOSTADDRESS$ -B zen.spamhaus.org,bl.spamcop.net,dnsbl.ahbl.org, 
dnsbl.njabl.org,dnsbl.sorbs.net,virbl.dnsbl.bit.nl,rbl.efnet.org,phishing.rbl.msrbl.net,0spam.fusionzero.com, 
list.dsbl.org,multihop.dsbl.org,unconfirmed.dsbl.org,will-spam-for-food.eu.org,blacklist.spambag.org, 
blackholes.brainerd.net,blackholes.uceb.org,spamsources.dnsbl.info,map.spam-rbl.com,ns1.unsubscore.com, 
psbl.surriel.com,l2.spews.dnsbl.sorbs.net,bl.csma.biz,sbl.csma.biz,dynablock.njabl.org,no-more-funn.moensted.dk,  
ubl.unsubscore.com,dnsbl-1.uceprotect.net,dnsbl-2.uceprotect.net,dnsbl-3.uceprotect.net,spamguard.leadmon.net, 
opm.blitzed.org,bl.spamcannibal.org,rbl.schulte.org,dnsbl.ahbl.org,virbl.dnsbl.bit.nl,combined.rbl.msrbl.net
}
Check l'état de l'enregistrement d'un domaine DNS
/usr/local/lib/nagios/plugins/check_domain
chmod +x /usr/local/lib/nagios/plugins/check_domain
command[domain_mydomain_tld]=/usr/local/lib/nagios/plugins/check_domain mydomain.tld

Avec mydomain.tld le domaine DNS à surveiller.

Check état SMART d'un disque
/usr/local/lib/nagios/plugins/check_smart
chmod +x /usr/local/lib/nagios/plugins/check_smart
command[smart_sda]=/usr/local/lib/nagios/plugins/check_smart -d /dev/sda -i ata
Check de l'état d'un cluster Heartbeat
/usr/local/lib/nagios/plugins/check_heartbeat
chmod +x /usr/local/lib/nagios/plugins/check_heartbeat
command[heartbeat]=/usr/local/lib/nagios/plugins/check_heartbeat
Check multiple

Les plus

É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 :

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

Passerelle SMS

Une passerelle SMS permet de faire de la notification par SMS. Il fait dans un premier temps mettre en place une passerelle mail/SMS. Pour cela, suivre le guide dédié. Ensuite, FIXME.

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 :

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

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)
chown root:root /usr/local/sbin/nagios_ndo_restore
chmod 700 /usr/local/sbin/nagios_ndo_restore