informatique:systeme:monitoring:nagios

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)

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

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.
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
  • 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.
Mémoire
/usr/local/lib/nagios/plugins/check_mem
  • Rendre le plugin exécutable :
chmod +x /usr/local/lib/nagios/plugins/check_mem
  • Ligne de la commande à ajouter dans nrpe_local.cfg :
command[mem]=/usr/local/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
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
  • Installation du plugin nagios :
    git clone https://github.com/tag1consulting/check_mongo /usr/local/src/check_mongo
    ln -s /usr/local/src/check_mongo/check_mongo /usr/local/lib/nagios/plugins/
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.
  • Puis ajouter la commande check_mongo dans la configuration d'NRPE et recharger sa configuration :
    echo "command[check_mongo]=/usr/local/lib/nagios/plugins/check_mongo -H 127.0.0.1 -P 27017 -A connect" > /etc/nagios/nrpe.d/mongo.cfg
PostgreSQL
  • Créér l'utilisateur PostgreSQL local nagios et lui donner les droits de se connecter :
    su - postgres
    createuser -D -R -S nagios
    exit
    echo "local    template1       nagios                                  ident" >> /etc/postgresql/9.1/main/pg_hba.conf
    service postgresql reload
  • Puis ajouter la commande check_psql dans la configuration d'NRPE et recharger sa configuration :
    echo "# Postgresql connexion
    # Requirement:
    #        * as user postgres, run "createuser -D -R -S nagios"
    #        * add this on top of pg_hba.conf rules:
    #          local template1 nagios ident
    command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -l nagios" > /etc/nagios/nrpe.d/postgresql.cfg
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
  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
  • 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
/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

Synchronisation LDAP
  • Utiliser ce script : check_syncrepl_extended
  • Copier le dans /usr/local/lib/nagios/plugins
  • Rendre le plugin exécutable :
    chmod +x /usr/local/lib/nagios/plugins/check_syncrepl_extended
  • Installer les dépenses :
    apt-get install python-ldap
  • Ligne de la commande à ajouter dans nrpe_local.cfg :
    command[ldapsync]=/usr/local/lib/nagios/plugins/check_syncrepl_extended -q -n -D"DN" -P "MDP" -b "BASEDN" -p "LDAPURI1" -c "LDAPURI2" -a

Avec :

  • DN = le DN de connexion à l'annuaire
  • MDP1 = le mot de passe de connexion à l'annuaire maitre
  • MDP2 = le mot de passe de connexion à l'annuaire esclave
  • BASEDN = le basedn de l'arbre LDAP
  • LDAPURI1 = l'URI de l'annuaire LDAP maître
  • LDAPURI2 = l'URI de l'annuaire LDAP secondaire
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
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/
  • Il faudra peut-être télécharger une librairie DNS pour Perl
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
  • Rendre le plugin exécutable :
chmod +x /usr/local/lib/nagios/plugins/check_domain
  • Ligne de la commande à ajouter dans nrpe_local.cfg
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
  • Rendre le plugin exécutable :
chmod +x /usr/local/lib/nagios/plugins/check_smart
  • Ligne de la commande à ajouter dans nrpe_local.cfg
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
  • Rendre le plugin exécutable :
chmod +x /usr/local/lib/nagios/plugins/check_heartbeat
  • Ligne de la commande à ajouter dans nrpe_local.cfg
command[heartbeat]=/usr/local/lib/nagios/plugins/check_heartbeat
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.

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

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.

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
  • informatique/systeme/monitoring/nagios.txt
  • Dernière modification : 2013/12/18 17:58
  • de bn8