Ce document couvre l’installation d’un serveur Nagios version 2 ou 3 sur Linux Ubuntu 6.0.6 LTS, Ubuntu 8.04 LTS et 10.0.4 LTS. Il doit être possible de suivre ces instructions pour d’autres distributions avec quelques modifications. Néanmoins, l’ Ubuntu Server LTS est intéressante pour sa dimension “Entreprise Ready” et son suppport gratuit assuré par Canonical pour une durée de 5 ans. Cette distribution représente un bon compromis paquets récents, sécurité (le compte root est désactivé) et stabilité.
A la fin de l’installation, le serveur doit contenir l’ensemble des programmes et librairies nécessaires au fonctionnement de Nagios en production. Ne sera pas abordé l’installation des programmes satellites de la supervision comme la gestion des configurations, des changements, ntop, smokeping…) Par contre, pour nos besoins, nous couvrirons l’installation à partir des sources de :
Notre serveur comprendra un mix de programmes installés par la commande apt-get mais aussi de paquets compilés à partir des sources de façon à contrôler les paramètres d’installation de ces programmes et de pouvoir les mettre à jour plus rapidement (patches et correctifs mineurs)
Nous n’allons pas couvrir en détail l’installation de la distribution Linux. Il suffit de choisir une installation de serveur LAMP et de suivre les indications. Pour que cette installation soit opérationnelle, il convient d’exécuter les commandes suivantes :
sudo apt-get update sudo apt-get upgrade sudo apt-get install openssh-server
Ces commandes mettent à jour l’ensemble de la distribution installée et installe le serveur ssh pour la prise en main à distance.
Préparation des dépôts apt pour l’installation
sudo nano /etc/apt/sources.list
Le contenu désiré est le suivant:
deb http://fr.archive.ubuntu.com/ubuntu/ dapper main universe restricted deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper main universe restricted deb http://fr.archive.ubuntu.com/ubuntu/ dapper-updates main universe restricted deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-updates universe restricted deb http://security.ubuntu.com/ubuntu dapper-security main universe restricted deb-src http://security.ubuntu.com/ubuntu dapper-security main universe restricted
Nous installons quelques utilitaires de base pour notre serveur de supervision
sudo apt-get install php5-gd mailx fping snmp ntp smbclient nmap saidar traceroute php5-snmp curl gettext
Installation de l’environnement de compilation
sudo apt-get install build-essential
Création de l’utilisateur nagios
sudo groupadd -g 9000 nagios sudo groupadd -g 9001 nagcmd sudo useradd -u 9000 -g nagios -G nagcmd -d /usr/local/nagios -c "Nagios Admin" nagios
Avant de pouvoir compiler Nagios le plus complètement possible, il faut installer quelques librairies de développement. Les en-têtes du noyau sont facultatifs :
sudo apt-get install libperl-dev libgd2-xpm-dev libltdl3-dev linux-headers-`uname -r`
Pour la version 3 de Nagios, ajouter la librairie libglib2
sudo apt-get install libglib2.0-dev
Quelques corrections pour que Nagios trouve les librairies que le configure a du mal à détecter
sudo ln -s /usr/include/sys/uio.h /usr/include/ sudo ln -s /usr/include/sys/socket.h /usr/include/
Ensuite compilation de Nagios, des plugins, de NRPE et NSCA.
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.3.tar.gz tar -xzf nagios-3.2.3.tar.gz pushd nagios-3.2.3 ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-command-user=nagios --with-command-group=nagcmd --enable-event-broker --enable-nanosleep --enable-embedded-perl --with-perlcache make all sudo make install sudo make install-init sudo make install-commandmode sudo make install-config popd
/usr/bin/install: omitting directory `includes/rss/extlib' /usr/bin/install: omitting directory `includes/rss/htdocs' /usr/bin/install: omitting directory `includes/rss/scripts' make[1]: *** [install] Error 1 make[1]: Leaving directory `/srv/d_bilbo/install/nagios/nagios/html' make: *** [install] Error 2
Surtout pas de panique ! Il suffit d’apporter quelques corrections de bugs avant la compilation, c’est-à-dire juste après notre ./configure
(voir précédemment) :
$ sed -i 's/for file in includes\/rss\/\*\;/for file in includes\/rss\/\*\.\*\;/g' ./html/Makefile $ sed -i 's/for file in includes\/rss\/extlib\/\*\;/for file in includes\/rss\/extlib\/\*\.\*\;/g' ./html/Makefile
Ensuite vous pouvez poursuivre le tutoriel avec la compilation :).
Configurer apache2 pour Nagios
sudo nano /etc/apache2/conf.d/nagios.conf
Coller dans le fichier ouvert la configuration suivante :
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" <Directory "/usr/local/nagios/sbin"> # SSLRequireSSL Options ExecCGI AllowOverride None Order allow,deny Allow from all # Order deny,allow # Deny from all # Allow from 127.0.0.1 AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users Require valid-user </Directory> Alias /nagios "/usr/local/nagios/share" <Directory "/usr/local/nagios/share"> # SSLRequireSSL Options None AllowOverride None Order allow,deny Allow from all # Order deny,allow # Deny from all # Allow from 127.0.0.1 AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users Require valid-user </Directory>
Avec Nagios 3, un simple install-webconf suffit
sudo make install-webconf
Création du fichier d’utilisateur
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin sudo chown nagios:nagcmd /usr/local/nagios/etc/htpasswd.users
Ajouter l’utilisateur apache au groupe nagcmd pour pouvoir exécuter les commandes externes de Nagios depuis l’interface (ex : nagcmd:x:9001:www-data)
sudo adduser www-data nagcmd sudo /etc/init.d/apache2 restart
Pour que Nagios démarre automatiquement au boot de la machine
sudo chmod +x /etc/init.d/nagios sudo update-rc.d nagios defaults
sudo apt-get install libgnutls-dev libmysqlclient15-dev libssl-dev libsnmp-perl libkrb5-dev libldap2-dev libsnmp-dev libnet-snmp-perl gawk libwrap0-dev libmcrypt-dev fping snmp gettext smbclient dnsutils
Quelques corrections pour que le configure trouve les librairies qu’il a du mal à détecter
sudo ln -s /usr/include/inttypes.h /usr/include/sys/ sudo ln -s /usr/include/mntent.h /usr/include/sys/
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz tar -xzf nagios-plugins-1.4.15.tar.gz pushd nagios-plugins-1.4.15/ ./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-libtap --enable-extra-opts --enable-perl-modules make sudo make install
Installation de openssl
sudo apt-get install openssl
wget http://downloads.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.12/nrpe-2.12.tar.gz tar -xzf nrpe-2.12.tar.gz pushd nrpe-2.12/ ./configure --enable-ssl --with-log-facility --enable-command-args --enable-threads=posix --with-trusted-path=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/nagios/bin:/usr/local/nagios/libexec make sudo make install sudo cp sample-config/nrpe.cfg /usr/local/nagios/etc/
Pas de script de démarrage fourni, aussi en voici un minimal
#!/bin/sh start() { rm -f /var/run/nrpe.pid /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d } stop() { nrpe=`pgrep nrpe` kill -9 $nrpe } if [ -f /etc/rc.d/init.d/functions ]; then . /etc/rc.d/init.d/functions fi case "$1" in start) echo 'Le service nrpe est demarrer' start exit 0 ;; stop) echo 'Le serviec nrpe est arreter' stop exit 0 ;; restart) echo 'Le serviec nrpe est arreter' stop echo 'Le service nrpe est demarrer' start exit 0 ;; *) echo 'Usage: nrpe {start|stop|restart}' exit 1 ;; esac
Pour l’activer
sudo chmod +x /etc/init.d/nrpe sudo update-rc.d nrpe defaults
Quelques fichiers mal linkés
sudo apt-get install libbind-dev libdb-dev sudo ln -s /usr/include/linux/config.h /usr/include/sys/ sudo ln -s /usr/include/dns/db.h /usr/include/
Compilation
wget http://downloads.sourceforge.net/project/nagios/nsca-2.x/nsca-2.7.2/nsca-2.7.2.tar.gz tar -xzf nsca-2.7.2.tar.gz pushd nsca-2.7.2/ ./configure make
copier les exécutables et le fichier de configuration pour finir l’installation
sudo cp src/nsca /usr/local/nagios/bin/ sudo cp src/send_nsca /usr/local/nagios/libexec/ sudo cp sample-config/nsca.cfg /usr/local/nagios/etc/
Le script de démarrage fourni fonctionnant, nous avons utilisé le code ci-dessous qui est un dérivé du script nrpe comme script de démarrage
#!/bin/sh # Start/stop the nsca daemon. # # Contributed by Andrew Ryder 06-22-02 # Slight mods by Ethan Galstad 07-09-02 NscaBin=/usr/local/nagios/bin/nsca NscaCfg=/usr/local/nagios/etc/nsca.cfg test -f $NscaBin || exit 0 case "$1" in start) echo -n "Starting nagios service check acceptator daemon: nsca" start-stop-daemon --start --quiet --exec $NscaBin -- -c $NscaCfg --daemon echo "." ;; stop) echo -n "Stopping nagios service check acceptator daemon: nsca" start-stop-daemon --stop --quiet --exec $NscaBin echo "." ;; restart) echo -n "Restarting nagios service check acceptator daemon: nsca" start-stop-daemon --stop --quiet --exec $NscaBin start-stop-daemon --start --quiet --exec $NscaBin -- -c $NscaCfg --daemon echo "." ;; reload|force-reload) echo -n "Reloading configuration files for nagios service check acceptator daemon: nsca" # nsca reloads automatically echo "." ;; *) echo "Usage: /etc/init.d/nsca start|stop|restart|reload|force-reload" exit 1 ;; esac exit 0
Pour l’activer
sudo chmod +x /etc/init.d/nsca sudo update-rc.d nsca defaults
Compilation et installation de NDOUtils
wget http://puzzle.dl.sourceforge.net/sourceforge/nagios/ndoutils-1.4b7.tar.gz tar -xzf ndoutils-1.4b7.tar.gz pushd ndoutils-1.4b7/ ./configure --enable-mysql make cd src sudo cp log2ndo file2sock sockdebug /usr/local/nagios/bin sudo cp ndomod-3x.o /usr/local/nagios/bin/ndomod.o sudo cp ndo2db-3x /usr/local/nagios/bin/ndo2db cd ../config/ sudo cp ndomod.cfg ndo2db.cfg /usr/local/nagios/etc
Ne reste plus qu’à créer une base de données “nagios”, un utilisateur possédant les droits SELECT, INSERT, UPDATE, et DELETE sur cette base et à y insérer le fichier de structure fourni.
CREATE USER 'nagios'@'localhost' IDENTIFIED BY '****'; GRANT USAGE ON * . * TO 'nagios'@'localhost' IDENTIFIED BY '****' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; CREATE DATABASE IF NOT EXISTS `nagios` ; GRANT SELECT , INSERT , UPDATE , DELETE ON `nagios` . * TO 'nagios'@'localhost';
Insertion du fichier de structure
cd ../ mysql -uroot -ppaswd nagios < db/mysql.sql
Modifier le fichier de configuration /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
Démarrage du démon
/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg
ndo2db étant fourni sans script de démarrage, le suivant a été utilisé
#!/bin/sh # Start/stop the nsca daemon. # # Contributed by Andrew Ryder 06-22-02 # Slight mods by Ethan Galstad 07-09-02 Ndo2dbBin=/usr/local/nagios/bin/ndo2db Ndo2dbCfg=/usr/local/nagios/etc/ndo2db.cfg test -f $Ndo2dbBin || exit 0 case "$1" in start) echo -n "Starting ndo2db daemon: ndo2db" start-stop-daemon --start --quiet --exec $Ndo2dbBin -- -c $Ndo2dbCfg echo "." ;; stop) echo -n "Stopping ndo2db daemon: ndo2db" start-stop-daemon --stop --quiet --exec $Ndo2dbBin echo "." ;; restart) echo -n "Restarting ndo2db daemon: ndo2db" start-stop-daemon --stop --quiet --exec $Ndo2dbBin start-stop-daemon --start --quiet --exec $Ndo2dbBin -- -c $Ndo2dbCfg --daemon echo "." ;; reload|force-reload) echo -n "Reloading configuration files for ndo2db daemon: ndo2db" # ndo2db reloads automatically echo "." ;; *) echo "Usage: /etc/init.d/ndo2db start|stop|restart|reload|force-reload" exit 1 ;; esac exit 0
Pour l’activer
sudo chmod +x /etc/init.d/ndo2db sudo update-rc.d ndo2db defaults
Il y a certains cas où il n’est pas nécessaire d’envoyer toutes les données gérées par Nagios dans la base NDOUtil. Il existe une petite calculette en ligne pour aider à déterminer quoi envoyer et surtout avoir la valeur à renseigner dans ndomod.cfg.
Commençons par compléter notre couche SNMP et librairie perl pour faire fonctionner SNMPTT
sudo apt-get install snmpd libconfig-inifiles-perl
Installation SNMPTT
wget http://switch.dl.sourceforge.net/sourceforge/snmptt/snmptt_1.2.tgz tar -xzf snmptt_1.2.tgz pushd snmptt_1.2/ sudo mv snmpttconvert snmpttconvertmib snmptt-net-snmp-test /usr/local/bin/ sudo mv snmptt snmptthandler /usr/local/sbin/ sudo mkdir -p /usr/local/etc/snmptt.d sudo cp snmptt.ini /usr/local/etc/ sudo cp examples/snmptt.conf.generic /usr/local/etc/snmptt.d/
Il faut ensuite convertir les MIBS dont on a besoin. Afin de tester la validité de notre installation SNMPTT, nous générons une trap SNMP que nous lui passons
sudo snmptt < /home/system/src/snmptt_1.2/examples/sample-trap.generic
Modifier le fichier /etc/default/snmpd pour activer le démon trap
TRAPDRUN=yes # snmptrapd options (use syslog). TRAPDOPTS='-Lsd -On -p /var/run/snmptrapd.pid'
Modifier le fichier de configuration /etc/snmp/snmptrapd.conf
traphandle default /usr/local/sbin/snmptt disableAuthorization yes donotlogtraps yes
Pour convertir au format snmptt des MIB, il faut utiliser snmpttconvertmib et c’est long. Voilà une moulinette qui accepte en entrée un répertoire et qui convertit chacun des fichiers qui s’y trouvent au format snmptt.
#!/bin/bash ls $1 > /tmp/mibs.txt while read enreg; do /usr/local/snmptt/bin/snmpttconvertmib --in=/usr/share/snmp/mibs/$enreg --out=/etc/snmp/snmptt.d/$enreg echo "processing $enreg..." done < /tmp/mibs.txt rm /tmp/mibs.txt exit 0
Il suffit de l’appeler ensuite avec le répertoire en argument
mibs-directory-convert.sh /usr/share/snmp/mibs/
NagTrap est une interface bien pratique pour voir les traps snmp reçus et injectés dans une base de données MySQL. Il fournit également un plugin Nagios pour requêter cette base.
Installation
wget http://surfnet.dl.sourceforge.net/sourceforge/nagtrap/nagtrap-0.1.2.tar.gz tar xzf nagtrap-0.1.2.tar.gz cd nagtrap mysql -u root -p snmptt < db/snmptt-1.2.sql
Création d’une nouvelle table pour stocker les traps reçues mais inconnues
CREATE TABLE `snmptt`.`snmptt_unknown` ( `id` mediumint( 9 ) NOT NULL AUTO_INCREMENT , `eventname` VARCHAR( 50 ) DEFAULT NULL , `eventid` VARCHAR( 50 ) DEFAULT NULL , `trapoid` VARCHAR( 100 ) DEFAULT NULL , `enterprise` VARCHAR( 100 ) DEFAULT NULL , `community` VARCHAR( 20 ) DEFAULT NULL , `hostname` VARCHAR( 100 ) DEFAULT NULL , `agentip` VARCHAR( 16 ) DEFAULT NULL , `category` VARCHAR( 20 ) DEFAULT NULL , `severity` VARCHAR( 20 ) DEFAULT NULL , `uptime` VARCHAR( 20 ) DEFAULT NULL , `traptime` VARCHAR( 30 ) DEFAULT NULL , `formatline` VARCHAR( 255 ) DEFAULT NULL , `trapread` INT( 11 ) DEFAULT '0', PRIMARY KEY ( `id` ) ) ENGINE = MYISAM DEFAULT CHARSET = latin1; INSERT INTO `snmptt`.`snmptt_unknown` SELECT * FROM `snmptt`.`snmptt` ;
Mise en place des fichiers pour l’interface PHP
sudo mv nagtrap/ /usr/local/nagios/share/ sudo chown -R www-data:www-data /usr/local/nagios/share/nagtrap/ sudo cp -p /usr/local/nagios/share/nagtrap/etc/config.ini.php-dist /usr/local/nagios/share/nagtrap/etc/config.ini.php
Editer le fichier config.ini.php et renseigner les valeurs pour la connexion MySQL. C’est prêt !
Une fois l’installation de l’ensemble des composants terminés, il ne reste qu’à vérifier que les processes ont bien été démarré.
ps aux | grep nagios
nagios 3679 0.0 0.3 20820 1848 ? Ssl Jul11 1:55 /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg nagios 10670 0.0 0.1 1984 744 ? Ss Jul11 0:00 /usr/local/nagios/bin/nsca -c /usr/local/nagios/etc/nsca.cfg --daemon nagios 309 0.0 0.0 3604 320 ? Ss 13:39 0:00 /usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg nagios 3683 0.0 0.1 3348 968 ? Ss Jul11 0:17 /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d