User Tools

Site Tools


informatique:logiciels:nagios

This is an old revision of the document!


supervision libre

Nagios

Nagios est un programme de supervision libre composé d'un scheduler, de greffons (plugins) et d'une interface web de management. Il est couramment utilisé pour faire des PING sur des équipements ou tester des services (HTTP, SMTP) via ses greffons.

Installation du paquet Ubuntu

Installation classique sous Ubuntu avec résolution automatique des dépendances :

aptitude install nagios3

Puis il faut créer un utilisateur et lui attribuer un mot de passe (si ce n'est pas déjà fait lors de l'installation) pour l'accès à l'interface web :

htpasswd -c /etc/nagios3/htpasswd.users nagiosadmin
 New password: 
 Re-type new password: 
 Adding password for user nagiosadmin

Tout est automatique c'est bien pour voir ce que ça donne. Mais si on veut :

  • maitriser le logiciel
  • profiter de la dernière version
  • utiliser l'installation de base pour simplifier l'installation de nouveaux plugins ou addons

… alors il faut le compiler à partir des sources.

Installation via les sources

sous Redhat 5.4 EL

Prérequis

  • Il faut disposer d'un serveur web (Apache2 par exemple) avec PHP (5 par exemple), la librairie GD et des outils de compilation (gcc & co) :
yum install httpd
yum install gd gd-devel
yum install gcc glibc glibc-common

Vérifier que le serveur web se lance bien au démarrage classique :

chkconfig --list | grep httpd

Si le service n'est pas listé, l'ajouter à la liste :

chkconfig --add httpd
chkconfig --list | grep httpd
 httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off

S'il n'est pas chargé au démarrage, l'y ajouter (runlevels de 2 à 5 par défaut) :

chkconfig httpd on
chkconfig --list | grep httpd
 httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  • création des utilisateurs et groupes qui seront utilisés par Nagios
# groupadd nagios
# groupadd nagcmd
# useradd -g nagios -G nagcmd -c "Nagios Admin" nagios

Nagios core

La dernière version de nagios “gratuit” (renommée nagios core, en opposition avec nagios XI qui est la version “pro” et payante) en date à l'heure actuelle (15/04/2010) est la 3.2.1. Pour information, le terme Nagios OSS désigne les composant libres et gratuits nagios core, nagios-plugins et nagios addons.

  • téléchargement + décompression
$ wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz
$ tar -zxf nagios-3.2.1.tar.gz
$ cd nagios-3.2.1
  • configurer les options de compilation :
$ ./configure --enable-event-broker --enable-embedded-perl --with-command-group=nagcmd
  • L'option –enable-event-broker n'est pas utile si on utilise juste Nagios et ses plugins de base ; en revanche si on veut utiliser l'addon NDOutils (par exemple) il faut l'activer.
  • –enable-embedded-perl permet de pouvoir utiliser le moteur d'exécution de perl intégré à nagios (je paraphrase ^^). Il permet d'optimiser l'exécution des plugins perl donc il est conseillé.
  • –with-command-group=nagcmd permet de spécifier le groupe de l'utilisateur (par défaut nagios) qui lancera les command-group.
  • lancer la compilation
$ make all
  • installation : ceci se fait en root

Ceci va copier les fichiers aux bons endroits :

  • make install : installe les binaires, CGI et fichiers HTML
  • make install-init : installe le script de démarrage dans /etc/rc.d/init.d
  • make install-commandmode : configuration du répertoire et du pipe pour les commandes externes (/usr/local/nagios/var/rw/nagios.cmd)
  • make install-config : installe les modèles de configuration par défaut dans /usr/local/nagios/etc
  • make install-webconf : installation du fichier de configuration d'Apache pour Nagios. Ce dernier sera accessible sur http://127.0.0.1/nagios/
# make install
# make install-init
# make install-commandmode
# make install-config
# make install-webconf
  • limitation de l'accès à Nagios : protection par authentification

On utilise un htaccess pour demander un login/mot de passe afin d'obtenir l'accès à l'interface web de Nagios.

<note> Attention, pour l'instant le mot de passe transite en clair (HTTP oblige) entre votre machine et le serveur Nagios. Pour une vraie sécurité, il est conseillé de passer en SSL (HTTPS). </note>

On ajoute l'utilisateur nagiosadmin au fichier htpasswd.users qui contient les couples login/mot de passe hashé. Puis on donne l'accès au fichier à l'utilisateur apache, sur lequel doit tourner le service httpd.

# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
# chown nagios:nagcmd /usr/local/nagios/etc/htpasswd.users
# usermod -a -G nagios,nagcmd apache
  • lancement de Nagios au démarrage du système

Configuration pour que Nagios se lance automatiquement au démarrage du système :

# chkconfig --add nagios
# chkconfig nagios on
  • redémarrage du serveur web pour qu'il prenne en compte sa nouvelle configuration
service httpd restart

Avant d'avoir un Nagios qui fonctionne correctement, il reste 2 étapes :

  • installer les plugins “de base” (nagios-plugins)
  • lancer le service nagios

Nagios-plugins

Ce pack contient tous les plugins de base de Nagios (d'autres pourront être ajoutés plus tard).

<note> Les plugins dont le support n'est pas installé ne seront pas compilés ; par exemple il faut installer net-snmp et net-snmp-utils pour que le plugin check_snmp soit compilé </note>

Pour compilation du module check_snmp :

yum install net-snmp net-snmp-utils

il me semble que seul ces paquets sont nécessaires ; sinon, installer aussi net-snmp-devel net-snmp-libs net-snmp-perl

  • téléchargement et décompression
$ wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.14.tar.gz
$ tar zxf nagios-plugins-1.4.14.tar.gz
$ cd nagios-plugins-1.4.14
  • configuration des options de compilation
$ ./configure --with-command-group=nagcmd --enable-perl-modules

Les options suivent la logique de compilation de Nagios.

  • compilation
$ make
  • installation
# make install
  • vérification de la configuration de Nagios
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
  • enfin, on lance Nagios
service nagios start

Configuration

Les fichiers principaux se trouvent dans /etc/nagios3/ : nagios.cfg et cgi.cfg.

Contacts et groupes de contacts

On renseigne les personnes de contact (qui seront notifiées lors d'un problème) dans le fichier /etc/nagios3/conf.d/contacts_nagios2.cfg. Exemple de déclaration :

define contact{
        contact_name                    root
        alias                           Root
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,r
        service_notification_commands   notify-service-by-email
        host_notification_commands      notify-host-by-email
        email                           root@localhost
        }

On voit, dans l'ordre, le nom d'utilisateur, le nom complet, les périodes de notifications pour les “service” et les “host”, les options de notification, et les moyens de notification. Chaque valeur est un objet défini dans la configuration de Nagios (on retrouve par exemple les périodes de temps), alors que les options de notifications définissent le degré d'alerte.

Pour les services (service_notification_options) :

  • w (Warning) : avertissement
  • u (Unknown) : inconnu
  • c (Critical) : critique
  • r (Recovery) : retour à l'état normal (up)

Pour les machines (host_notification_options) :

  • d (Down) : machine éteinte
  • u (Unreachable) : machine injoignable
  • r (Recovery) : retour à l'état normal (up)

On définit dans ce même fichier les groupes de contact :

define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 root
        }

Droits des contacts

Pour attribuer des droits à un utilisateur, il faut éditer le fichier /etc/nagios3/cgi.cfg et ajouter les noms d'utilisateurs après les directives idoines, séparés par des virgules ; par exemple :

authorized_for_system_information=nagiosadmin,toto

Périodes de temps

On peut consulter ou définir des périodes de temps dans le fichier /etc/nagios3/conf.d/timeperiods_nagios2.cfg. Voici un exemple de déclaration :

define timeperiod{
        timeperiod_name 24x7
        alias           24 Hours A Day, 7 Days A Week
        sunday          00:00-24:00
        monday          00:00-24:00
        tuesday         00:00-24:00
        wednesday       00:00-24:00
        thursday        00:00-24:00
        friday          00:00-24:00
        saturday        00:00-24:00
        }

Déclaration d'un host

Ça se passe dans le fichier /etc/nagios3/conf.d/localhost_nagios2.cfg :

define host{
        use                     generic-host
        host_name               routeur1
        alias                   Routeur passerelle R1
        address                 192.168.0.254
        check_command           check-host-alive
        }

Cet host utilise le template generic-host qui définit tous les paramètres nécessaires par défaut. On peut surcharger l'objet càd redéfinir les paramètres du template en modifiant leurs valeurs.

Création de hostgroup

On doit mettre chaque host dans un hostgroup, défini dans le fichier /etc/nagios3/conf.d/hostgroups_nagios2.cfg :

define hostgroup {
        hostgroup_name  routeurs
        alias           Debian GNU/Linux Servers
        members         routeur1
        contact_groups  admins-routeur
        }

Création d'un service

Ils sont déclarés dans le fichier /etc/nagios3/conf.d/service_nagios2.cfg

define service {
        hostgroup_name                  ping-servers
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

Ce service utilise le greffon check_ping ; en fonction du retour de ce dernier, on passe à différents niveau d'alerte :

  • un temps de réponse > 100 ms ou 20% de perte et on passe à l'état WARNING
  • un temps de réponse > 500 ms ou 60% de perte et on passe à l'état CRITICAL

L'intervalle de notification (notification_interval) indique si l'alerte doit être répétée si le problème perdure.

D'autres arguments sont intéressants à utiliser :

  • normal_check_interval 5 définit l'intervalle de check du service, en minutes
  • max_check_attempts 3 définit le seuil au delà duquel le service passe en HARD state
  • retry_check_interval 1 si le statut du service est nOK, on passe en SOFT state et on reteste le service toutes les X minutes

Vérifications

Pour vérifier la validité de la configuration de Nagios sans relancer le démon :

nagios3 -v /etc/nagios3/nagios.cfg

(très utile quand on travaille sur de la prod !)

Installation de Nagvis

Nagvis est un addon pour Nagios qui permet d'afficher ses état sur un carte interactive. Il nécessite beaucoup de prérequis, qui ont eux-même des prérequis. Cette partie traite de l'installation à partir des sources de Nagvis, NDOutils et Graphviz.

MySQL

MySQL est un prérequis de notre installation de NDOUtils.

# Installation du serveur, du client des librairies de développement.
yum install mysql-server mysql-devel

# Lancement du service
service mysqld start

# Assistant de configuration (mot de passe root, etc)
/usr/bin/mysql_secure_installation

# Lancement automatique du serveur MySQL au démarrage
chkconfig mysqld on
chkconfig --list | grep sql
 mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

NDOUtils

installation depuis les sources : ndoutils-1.4b9.tar.gz

NDOUtils est un addon qui récupère les états, la configuration, etc… de Nagios pour les enregistrer dans une base (MySQL dans notre cas).

wget http://prdownloads.sourceforge.net/sourceforge/nagios/ndoutils-1.4b9.tar.gz
tar zxf ndoutils-1.4b9.tar.gz
cd ndoutils-1.4b9
./configure --disable-pgsql
make

Configuration de la base de donnée : Se connecter avec

mysql -u root -p

# créer l'utilisateur MySQL "ndouser" et la base "ndoutils"
mysqladmin -u root -p create ndoutils
mysql -u root -p mysql
 mysql> GRANT ALL ON ndoutils.* TO ndouser@localhost IDENTIFIED BY 'ndopassword';
 mysql> FLUSH PRIVILEGES;

Création de la structure de la base avec le script fourni :

cd db/
./installdb -u ndouser -p ndopassword -h localhost -d ndoutils
DBD::mysql::db do failed: Table 'ndoutils.nagios_dbversion' doesn't exist at ./installdb line 51.
** Creating tables for version 1.4b9
     Using mysql.sql for installation...
** Updating table nagios_dbversion
Done!

J'obtiens un message d'erreur qui n'empêche pas la terre de tourner…

Installation du module :

# binaires
cp src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o
cp src/ndo2db-3x /usr/local/nagios/bin/ndo2db
chown nagios:nagios /usr/local/nagios/bin/ndo*
chmod 774 /usr/local/nagios/bin/ndo*

# fichiers de config
cp config/ndomod.cfg-sample /usr/local/nagios/etc/ndomod.cfg
cp config/ndo2db.cfg-sample /usr/local/nagios/etc/ndo2db.cfg
chown nagios:nagios /usr/local/nagios/etc/ndo*
chmod 660 /usr/local/nagios/etc/ndo*

# paramétrage du fichier de config
vi /usr/local/nagios/etc/ndo2db.cfg
 db_name=ndoutils
 db_prefix=nagios_
 db_user=ndouser
 db_pass=ndopassword

# ajout du broker dans le fichier de conf de nagios :
vi /usr/local/nagios/etc/nagios.cfg
 event_broker_options=-1
 broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg

# création du script de démarrage ('tention aux yeux)
# idée de script (conçu pour ubuntu) : http://www.nicolargo.com/blogdata/ndo2db
vi /etc/rc.d/init.d/ndoutils
 #!/bin/sh
 /usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg
chmod +x /etc/rc.d/init.d/ndoutils

# lancer le service NDOUtils et redémarrer nagios
/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg
service nagios restart

# vérif
tail -f /usr/local/nagios/var/nagios.log

Graphviz

Graphviz est un outil de génération de graphiques. Il existe un paquet pour Redhat dont l'installation est décrite ici : http://www.graphviz.org/Download_linux_rhel.php

# ajout du repository yum
wget http://www.graphviz.org/graphviz-rhel.repo
mv graphviz-rhel.repo /etc/yum.repos.d/

# vérification de bonne pirse en compte par yum
yum list available 'graphviz*'
 Loaded plugins: rhnplugin
 Available Packages
 graphviz.i386                               2.26.3-1.el5                           graphviz-stable
 graphviz-devel.i386                         2.26.3-1.el5                           graphviz-stable
 graphviz-doc.i386                           2.26.3-1.el5                           graphviz-stable
 graphviz-gd.i386                            2.26.3-1.el5                           graphviz-stable
 graphviz-graphs.i386                        2.26.3-1.el5                           graphviz-stable
 graphviz-guile.i386                         2.26.3-1.el5                           graphviz-stable
 graphviz-java.i386                          2.26.3-1.el5                           graphviz-stable
 graphviz-perl.i386                          2.26.3-1.el5                           graphviz-stable
 graphviz-php.i386                           2.16-1.el5                             graphviz-stable
 graphviz-python.i386                        2.26.3-1.el5                           graphviz-stable
 graphviz-ruby.i386                          2.26.3-1.el5                           graphviz-stable
 graphviz-tcl.i386                           2.26.3-1.el5                           graphviz-stable

# Installation des paquets idoines
yum install graphviz.i386 graphviz-gd.i386 graphviz-perl.i386 graphviz-doc.i386 graphviz-graphs.i386

# oui, il y a pas mal de dépendances :
====================================================================================================
 Package                   Arch         Version                   Repository                   Size
====================================================================================================
Installing:
 graphviz                  i386         2.26.3-1.el5              graphviz-stable             1.5 M
 graphviz-doc              i386         2.26.3-1.el5              graphviz-stable             2.4 M
 graphviz-gd               i386         2.26.3-1.el5              graphviz-stable             117 k
 graphviz-graphs           i386         2.26.3-1.el5              graphviz-stable             4.3 M
 graphviz-perl             i386         2.26.3-1.el5              graphviz-stable              54 k
Installing for dependencies:
 alsa-lib                  i386         1.0.17-1.el5              bt-rhel-i386-server-5       411 k
 audiofile                 i386         1:0.2.6-5                 bt-rhel-i386-server-5       107 k
 avahi-glib                i386         0.6.16-7.el5              bt-rhel-i386-server-5        15 k
 chkfontpath               i386         1.10.1-1.1                bt-rhel-i386-server-5        15 k
 esound                    i386         1:0.2.36-3                bt-rhel-i386-server-5       130 k
 freeglut                  i386         2.4.0-7.1.el5             bt-rhel-i386-server-5       142 k
 gnome-keyring             i386         0.6.0-1.fc6               bt-rhel-i386-server-5       170 k
 gnome-mime-data           i386         2.4.2-3.1                 bt-rhel-i386-server-5       691 k
 gnome-mount               i386         0.5-3.el5                 bt-rhel-i386-server-5        70 k
 gnome-vfs2                i386         2.16.2-6.el5              bt-rhel-i386-server-5       1.2 M
 gtkglext-libs             i386         1.2.0-6.el5               graphviz-stable             149 k
 gts                       i386         0.7.6-11.el5              graphviz-stable             202 k
 libFS                     i386         1.0.0-3.1                 bt-rhel-i386-server-5        30 k
 libXaw                    i386         1.0.2-8.1                 bt-rhel-i386-server-5       325 k
 libXfont                  i386         1.2.2-1.0.3.el5_1         bt-rhel-i386-server-5       241 k
 libXmu                    i386         1.0.2-5                   bt-rhel-i386-server-5        63 k
 libart_lgpl               i386         2.3.17-4                  bt-rhel-i386-server-5        76 k
 libbonobo                 i386         2.16.0-1.fc6              bt-rhel-i386-server-5       501 k
 libbonoboui               i386         2.16.0-1.fc6              bt-rhel-i386-server-5       390 k
 libcroco                  i386         0.6.1-2.1                 bt-rhel-i386-server-5       127 k
 libfontenc                i386         1.0.2-2.2.el5             bt-rhel-i386-server-5        19 k
 libglade2                 i386         2.6.0-2                   bt-rhel-i386-server-5        96 k
 libgnome                  i386         2.16.0-6.el5              bt-rhel-i386-server-5       859 k
 libgnomecanvas            i386         2.14.0-4.1                bt-rhel-i386-server-5       222 k
 libgnomeui                i386         2.16.0-5.el5              bt-rhel-i386-server-5       977 k
 libgsf                    i386         1.14.1-6.1                bt-rhel-i386-server-5       116 k
 librsvg2                  i386         2.16.1-1.el5              bt-rhel-i386-server-5       179 k
 libxslt                   i386         1.1.17-2.el5_2.2          bt-rhel-i386-server-5       485 k
 mesa-libGLU               i386         6.5.1-7.8.el5             bt-rhel-i386-server-5       225 k
 netpbm                    i386         10.35.58-8.el5            bt-rhel-i386-server-5       834 k
 shared-mime-info          i386         0.19-5.el5                bt-rhel-i386-server-5       148 k
 ttmkfdir                  i386         3.0.9-23.el5              bt-rhel-i386-server-5        46 k
 urw-fonts                 noarch       2.3-6.1.1                 bt-rhel-i386-server-5       4.5 M
 xorg-x11-font-utils       i386         1:7.1-2                   bt-rhel-i386-server-5        75 k
 xorg-x11-xfs              i386         1:1.0.2-4                 bt-rhel-i386-server-5        68 k

Transaction Summary
====================================================================================================

Nagvis

Nagvis est un scripts PHP qui récupère les états Nagios pour générer une carte interactive.

Paquets à installer :

yum install php-gd php-mbstring php-xml php-mysql

Redémarrage du serveur HTTP pour prise en compte des paquets PHP

service httpd restart
wget http://downloads.sourceforge.net/project/nagvis/NagVis%201.4%20%28stable%29/nagvis-1.4.7.tar.gz?use_mirror=freefr
tar zxf nagvis-1.4.7.tar.gz
cd nagvis-1.4.7

# lancer l'assistant installeur
./install.sh
[..]
+------------------------------------------------------------------------------+
| Summary                                                                      |
+------------------------------------------------------------------------------+
| NagVis home will be:           /usr/local/nagios/share/nagvis                |
| Owner of NagVis files will be: apache                                        |
| Group of NagVis files will be: apache                                        |
| Path to Apache config dir is:  /etc/httpd/conf.d                             |
|                                                                              |
| Installation mode:             install                                       |
|                                                                              |
| Do you really want to continue? [y]:
+------------------------------------------------------------------------------+
| Starting installation                                                        |
+------------------------------------------------------------------------------+
| Creating directory /usr/local/nagios/share/nagvis...                   done  |
| Copying files to /usr/local/nagios/share/nagvis...                     done  |
| Creating main configuration file...                                    done  |
|                                                                              |
|                                                                              |
|                                                                              |
+--- Setting permissions... ---------------------------------------------------+
| /usr/local/nagios/share/nagvis/etc/nagvis.ini.php-sample               done  |
| /usr/local/nagios/share/nagvis/etc/maps                                done  |
| /usr/local/nagios/share/nagvis/nagvis/images/maps                      done  |
|                                                                              |
+------------------------------------------------------------------------------+
| Installation complete                                                        |
|                                                                              |
| You can safely remove this source directory.                                 |
|                                                                              |
| What to do next?                                                             |
| - Read the documentation                                                     |
| - Maybe you want to edit the main configuration file?                        |
|   Its location is: /usr/local/nagios/share/nagvis/etc/nagvis.ini.php         |
| - Configure NagVis via browser                                               |
|   <http://localhost/nagios/nagvis/nagvis/config.php>                         |
+------------------------------------------------------------------------------+

# Prise en compte de la base SQL
vi /usr/local/nagios/share/nagvis/etc/nagvis.ini.php
 dbname="ndoutils"
 dbuser="ndouser"
 dbpass="ndopassword"

Les images dans /usr/local/nagios/share/nagvis/nagvis/images/maps/

Installation de l'add-on NRPE

NRPE (Nagios Remote Plugin Executor) est un add-on permettant de lancer des plugins à distance sur une autre machine. C'est aussi le nom du protocole applicatif utilisé pour dialoguer entre le serveur Nagios et la machine distante qui exécute le plugin. Il faut donc installer NRPE sur le serveur Nagios mais aussi sur chaque machine distante. NRPE est téléchargeable sur le site de Nagios car il fait partie intégrante du projet.

Son fonctionnement est simple : le serveur distant fait tourner le démon NRPE qui écoute sur le port tcp/5666 (par défaut). Le serveur nagios émet une requête vers ce serveur distant grâce au plugin check_nrpe ; il lui demande d'exécuter un plugin (que le serveur distant a d'installer en local, d'où la nécessité d'installer nagios-plugins sur le serveur distant). Le résultat de l'exécution du plugin sur le serveur distant est renvoyé au serveur nagios pour traitement.

Sur le serveur Nagios

Prérequis

NRPE utilise par défaut SSL pour échanger les données ; pour le compiler on doit installer le support SSL :

yum install openssl openssl-devel

Compilation et installation

L'installation est classique : téléchargement des sources, décompression, configuration du make, compilation, installation :

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
tar zxf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure
make all
make install

Normalement on obtient le nouveau plugin : check_nrpe

ll /usr/local/nagios/libexec | grep nrpe
 -rwxrwxr-x 1 nagios nagios  58237 May 18 10:45 check_nrpe

Vérification

Le protocole NRPE utilise par défaut le port tcp/5666 qu'il faudra donc ouvrir sur les serveurs et les éventuels pare-feux intermédiaires.

serveur nagios, port tcp>1023 -----> serveur distant, port tcp/5666

Sur le serveur distant

(Pour les prérequis, voir partie précédente : sur le serveur nagios)

Si l'utilisateur et le groupe “nagios” n'existent pas déjà, il faut les créer :

groupadd nagios
useradd -g nagios nagios

Installation des nagios-plugins

Installer les nagios-plugins qui seront lancés sur le serveur distant (cf partie plus haut).

Compilation et installation

Même chose que sur le serveur nagios :

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
tar zxf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure
make all
make install

Configuration

Comme pour le serveur nagios, on s'inspire du fichier d'exemple (mais ici on créer le répertoire “etc” car il n'existe pas encore normalement) :

mkdir /usr/local/nagios/etc
cp sample-config/nrpe.cfg /usr/local/nagios/etc/

Configuration du contrôle d'accès : ajouter l'adresse IP du serveur nagios (192.168.90.110)

vi nrpe.cfg
 allowed_hosts=127.0.0.1,192.168.90.110

On remarque au passage que le fichier contient certains services pré-configurés :

# The following examples use hardcoded command arguments...

command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200

Ajout au démarrage de la machine :

cp init-script /etc/init.d/nrpe
chmod 755 /etc/init.d/nrpe
chkconfig --add nrpe

Lancement du démon :

/etc/init.d/nrpe start

Pour information, le démon se lance ainsi : /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d -n Explication des paramètres :

  • -c <config_file>
  • -d : lancer en temps que démon autonome (n'utilise pas inetd)
  • -n : ne pas utiliser la couche SSL

Configuration

Pour vérifier la connectivité NRPE entre les 2 serveurs, lancer sur le serveur nagios :

/usr/local/nagios/libexec/check_nrpe -n -H <serveur distant>
 NRPE v2.12

La syntaxe pour appeler un plugin est la même, en ajoutant -c <nom_du_plugin_distant>.

Bien ; maintenant il faut créer le service associé ! Je vous laisse placer les lignes suivantes dans les fichiers de conf correspondants à votre installation (command.cfg, services.cfg et hosts.cfg par exemple)

# -n = pas de SSL (le demon doit etre lance avec la meme option
# -H <IP> = adresse IP du serveur distant
# -c <plugin> = nom du plugin distant a appeler ; il est passe en argument par l'objet service
define command{
        command_name    check_nrpe_no_ssl
        command_line    $USER1$/check_nrpe -n -H $HOSTADDRESS$ -c $ARG1$
}

# check_users sera passe en argument a l'objet "command"
# (check_nrpe_no_ssl declare ci-dessus), en tant que $ARG1$
define service{
        use                             generic-service
        service_description             ping_google
        host_name                       serveur_distant
        check_command                   check_nrpe_no_ssl!check_users
}

# on declare ce service sur l'objet serveur distant
# son adresse sera envoyee automatiquement via la variable $HOSTADDRESS$
define host{
        use             linux-server
        host_name       serveur_distant
        alias           serveur_distant
        address         192.168.90.111
        }

Ajout de plugins

Les plugins sont des programmes/scripts qui étendent les fonctionnalités de nagios.

Check_multi

Check_multi est un plugin Nagios qui permet de créer des services dont l’état dépend de plusieurs paramètres. Il utilise pour cela une syntaxe particulière et des expressions logiques.

Par exemple, si on veut tester l'accessibilité d'un site web redondé sur 2 machines, Nagios ne permet que de tester l'accès de l'un puis de l'autre. Mais pas du service réparti sur les 2 machines. check_multi permet de combler ce manque et de créer un service dont l'état dépendra de 2 autres services : l'état HTTP des 2 serveurs.

Compilation

<note important> Il est conseillé (par la doc officielle) de changer les buffers MAX_PLUGIN_OUTPUT_LENGTH et MAX_INPUT_BUFFER ; ceci dit je n'en ai pas vu l'utilité pour l'instant </note>

wget http://my-plugin.de/check_multi/check_multi-0.20.current.tgz
tar zxf check_multi-0.20.current.tgz
cd check_multi-0.20
./configure
 -------------------------------------------------------------------
 --- check_multi configure summary (SVN : 272 $)
 -------------------------------------------------------------------

 Release date   : 2009-10-15 08:22:59 +0200 (Thu, 15 Oct 2009) $
 Author         : flackem $
 Configure args : 'help' 'build_alias=help' 'host_alias=help' 'target_alias=help'

 --- Directories
 -------------------------------------------------------------------
 Install ${prefix}         /usr/local/nagios
 Exec ${exec_prefix}       ${prefix}
 Libexec directory         ${exec_prefix}/libexec
 CGI directory (sbin)      ${exec_prefix}/sbin
 HTML directory (dataroot) ${prefix}/share
 Contrib directory
 Temporary directory       /tmp/check_multi
 Temp dir permissions      01777

 --- System options
 -------------------------------------------------------------------
 Parent timeout (BIG T)    60
 Child timeout (small t)   10
 Nagios user/group         nagios,nagios
 Nagios name               nagios
 RC if no checks defined   3
 default file extension    cmd
 ignore missing cmd file?  0
 Client perl path          /usr/bin/perl

 --- Output options
 -------------------------------------------------------------------
 Name / Label              ''
 Report option default     13
 HTML target frame         _self
 Child checks indented?    1
 Ascii indentation char    ' '
 Collapse tree?            1
 Collapse plus style       style='color:#4444FF;line-height:0.1em;font-size:1.5em;cursor:crosshair'
 Extinfo in status.cgi?    0
 Verbosity level default   0
 PNP chart with mouseover  0

 --- Links
 -------------------------------------------------------------------
 action URL               ''
 notes URL                ''
 documentation URL        ''

 --- Advanced Options
 -------------------------------------------------------------------
 cmdfile update interval  86400
 illegal chars in cmdfile \r
 check_multi persistent?  0


*** Next step:  type 'make all'. ***


make all
make test
 [..]
 not ok 2 - output correct
 #   Failed test 'output correct'
 #   in check_multi.t at line 44.
 #                   'OK - 1 plugins checked, 1 ok [please don't run plugins as root!]
 # [ 1] procs PROCS OK: 107 processes|check_multi::check_multi::plugins=1 time=0.070733 '
 #     doesn't match '/^OK - 1 plugins checked, 1 ok\n\[ 1\] procs PROCS OK: \d+ processes|check_multi::check_multi::plugins=1 time=\d+$/'
 [..]
 # Looks like you failed 11 tests of 22.
 make[1]: *** [test] Error 11
 make[1]: Leaving directory `/produits/sources/check_multi-0.20/plugins/t'
 make: *** [test] Error 2

Le make test produit des erreurs que je n'ai pas encore résolues. Mais j'ai la moyenne ;)

Le plugin fonctionne tout de même, alors on poursuit.

Installation

make install
make install-config

Le plugin s'installe dans le répertoire /usr/local/nagios/check_multi.

Configuration

Le concept est le suivant : on créer un fichier .cmd correspondant, suivant la syntaxe particulière de check_multi, qui va décrire :

  • les état nagios à récupérer (directive statusdat) ou les commandes à lancer (directive command)
  • l'état de la sortie qui découle de ces checks (directive state)

Ce fichier sera appelé par un service déclaré dans Nagios, sous la forme : check_multi -f /usr/local/nagios/etc/check_multi/test.cmd.

Création de http.cmd

Les états de Nagios sont récupérés via le fichier <NAGIOS>/var/status.dat ; donc <host> et <service> doivent exister dans Nagios.

Pour coder le tableau de décision de l'exemple :

  • tant qu'un des 2 serveurs est OK, le service est OK
  • si les 2 serveurs sont CRITICAL le service est CRITICAL
  • si les 2 serveurs sont WARNING ou pire (un WARNING et un CRITICAL) le service est WARNING
serveur 1
OK warning critical
serveur 2 OK OK OK OK
warning OK warning warning
critical OK warning critical

Les états peuvent être écris en toute lettre ou avec leur code retour Nagios (OK=0 ; WARNING=1 ; CRITICAL=2 ; UNKNOWN=3 et plus).

# format : statusdat [ <tag> ] = <host>:<service>
# ou <tag> est un identifiant local
# <host>:<service> déterminent l'objet service et l'objet host a evaluer
statusdat [ serveur1 ] = www-princi:check-http
statusdat [ serveur2 ] = www-secour:check-http

# format : state [ <OK|UNKNOWN|WARNING|CRITICAL> ] = <expression>
# 2 possibilités pour coder le retour en fonction de ces états :
# - en testant chaque retour de statusdat/command independamment
# - en utilisant la directive COUNT pour compter le nombre d'états
state [ OK       ] = ( serveur1_www-princi_check-http == OK || serveur2_www-secour_check-http == OK )
state [ WARNING  ] = ( COUNT(WARNING) == 2 || ( COUNT(CRITICAL) == 1 && COUNT(WARNING) == 1 ) )
state [ CRITICAL ] = COUNT(CRITICAL) == 2

On peut utiliser des commandes : par exemple on peut re-checker l'état HTTP des serveurs plutôt que d'utiliser les résultats de Nagios (pas vraiment d'intérêt dans notre cas) ; dans ce cas on récupère le résultat de la commande ainsi : $<tag>$

# format : command [ <tag> ] = <plugin command line>
command [ serveur1 ] = check_http -H www-princi
command [ serveur2 ] = check_http -H www-secour

# on récupère l'etat des commandes avec $<tag>$
state [ OK       ] = ( $serveur1$ == OK || $serveur2$ == OK )
state [ WARNING  ] = ( COUNT(WARNING) == 2 || ( COUNT(CRITICAL) == 1 && COUNT(WARNING) == 1 ) )
state [ CRITICAL ] = COUNT(CRITICAL) == 2
  • Une commande n'est pas nécessairement un plugin Nagios ; on peut utiliser n'importe quelle expression perl, des commande externes, etc.
  • on peut utiliser les macros Nagios avec les commandes ($HOSTNAME$, $HOSTADDRESS$, etc)
Création du service Nagios

Dans la conf de Nagios :

define command{
        command_name    cm_http
        command_line    $USER1$/check_multi -f /usr/local/nagios/etc/check_multi/http.cmd
}

define service{
        use                     generic-service
        host_name               localhost
        service_description     Site web alive
        check_command           cm_http
        }

Il faut ensuite re démarrer Nagios pour prendre en compte ces 2 nouveau objets.

Pour aller plus loin je vous recommande fortement le wiki officiel : http://my-plugin.de/wiki/projects/check_multi/configuration/file

Passage de paramètres

  • on ne peut passer de paramètres qu'avec les commandes

Exemple : déclaration dans nagios

define command{
        command_name    cm_http
        command_line    $USER1$/check_multi -f /usr/local/nagios/etc/check_multi/http.cmd -c $ARG1
}
define service{
        use                     generic-service
        host_name               localhost
        service_description     Site web alive
        check_command           cm_http!www
        }

http.cmd

# $ARG1$ = www
command [ serveur1 ] = check_http -H $ARG1$-princi
command [ serveur2 ] = check_http -H $ARG1$-secour

# on récupère l'etat des commandes avec $<tag>$
state [ OK       ] = ( $serveur1$ == OK || $serveur2$ == OK )
state [ WARNING  ] = ( COUNT(WARNING) == 2 || ( COUNT(CRITICAL) == 1 && COUNT(WARNING) == 1 ) )
state [ CRITICAL ] = COUNT(CRITICAL) == 2

Problèmes et solutions

Installation du paquet Ubuntu par défaut

Sous Ubuntu (9.10) il y a 2 problèmes avec l'installation par défaut :

  • problème avec le plugin check_ssh : en fait il n'y a pas de serveur SSH installé sous Ubuntu par défaut. Pour l'installer il faut installer le paquet openssh-server.
  • problème de droit d'accès avec le plugin check_disk : DISK CRITIQUE - /home/<user>/.gvfs is not accessible: Permission non accordée

Pour ignorer le fichier qui pose ce problème de droit d'accès, il faut éditer la configuration du plugin check_disk et ajouter à la fin de la ligne : -A -i .gvfs

sudo vi /etc/nagios-plugins/config/disk.cfg
# 'check_all_disks' command definition
define command{
   command_name    check_all_disks
   #ancienne ligne
   #command_line   /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e
   #nouvelle ligne
   command_line    /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e -A -i .gvfs
   }

Puis il faut recharger la conf dans Nagios :

sudo service nagios3 stop
 * Stopping nagios3 monitoring daemon nagios3                                                               

sudo service nagios3 start                              [ OK ]
 * Starting nagios3 monitoring daemon nagios3
kill: 1: No such process                                [ OK ]

source : https://help.ubuntu.com/community/Nagios3#Post%20Install%20Tasks

Liens

informatique/logiciels/nagios.1274283351.txt.gz · Last modified: 2013/10/14 20:55 (external edit)