====== 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//. 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. 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!... * **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 == * Plugin : [[http://git.zionetrix.net/check_mem|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 Le plugin officiel ne retourne pas d'information de performance en suivant la syntaxe Nagios. J'ai écris [[http://git.zionetrix.net/check_mysql_with_perfdata|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 [[https://github.com/tag1consulting/check_mongo/pull/3|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 - **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 {{:informatique:systeme:monitoring:nagios_check_mount.sh|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 == Synchronisation LDAP == * Utiliser ce script : [[http://git.zionetrix.net/check_syncrepl_extended|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 : [[http://git.zionetrix.net/check_domain|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 : [[http://git.zionetrix.net/check_smart|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 : [[http://git.zionetrix.net/check_heartbeat|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 {{:informatique:systeme:monitoring:nagios_check_multi.sh|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 **[[informatique:systeme:monitoring:nagios: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 : [[informatique:systeme:monitoring:nagios#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 [[informatique:reseau:messagerie:passerelle_sms|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 : * 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 {{:informatique:systeme:monitoring:nagios_ndo_restore.sh|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 {{:informatique:systeme:monitoring:nagios_ndo.mysql|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