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 :
- 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.
- 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.
- 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.
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!...
- 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.
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
- Ajouter les lignes des services en fonction des services tournant sur la machine.
Mémoire
- Plugin : check_mem
- Copier le ici :
/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
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/
- 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
- 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.
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
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
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
- Utiliser ce plugin : check_domain
- Copier le ici :
/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
- Utiliser ce script : check_smart
- Copier le ici :
/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
- Utiliser ce script : check_heartbeat
- Copier le ici :
/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.
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 :
- 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
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, .
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
- 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