Cet article va décrire l'installation d'un Nagios 3.0.6 et d'un Centreon 2.0.1 sur une Ubuntu 8.04. Je n'utiliserai que les sources Nagios™ (anciennement appelé Netsaint) est une application permettant la surveillance système et réseau. Elle surveille les hôtes et services spécifiés, alertant lorsque les systèmes vont mal et quand ils vont mieux. C'est un logiciel libre sous licence GPL. C'est un programme modulaire qui se décompose en trois parties :
- Le moteur de l'application qui vient ordonnancer les tâches de supervision.
- L'interface web, qui permet d'avoir une vue d'ensemble du système d'information et des possibles anomalies.
- Les plugins, une centaine de mini programmes que l'on peut compléter en fonction des besoins de chacun pour superviser chaque service ou ressource disponible sur l'ensemble des ordinateurs ou éléments réseaux du SI.
Centreon est un logiciel de surveillance et de supervision réseau, basé sur le moteur de récupération d'information libre Nagios. Centreon fournit une interface simplifiée en apparence pour rendre la consultation de l'état du système accessible à un plus grand nombre d'utilisateurs, y compris des non-techniciens, notamment à l'aide de graphiques. Les techniciens ont cependant toujours accès aux informations techniques de Nagios. Pour l'envoi des alertes, j'utiliserai Exim4. Il est léger et simple à configurer. Je veux juste envoyer des mails, par conséquent, pas besoin d'avoir un serveur de mails sur la machine. Supprimez tout MTA (Sendmail, Postfix, Qmail, etc) sur la machine.
Pré-requis J'installe tous les paquets que j'ai besoin
apt-get install sudo sysutils mailx lsb-release build-essential apache2 apache2-mpm-prefork php5 php5-mysql php-pear php5-ldap php5-snmp php5-gd mysql-server-5.0 libmysqlclient15-dev rrdtool librrds-perl libconfig-inifiles-perl libcrypt-des-perl libdigest-hmac-perl libdigest-sha1-perl libgd-gd2-perl snmp snmpd libnet-snmp-perl libsnmp-perl libgd2-xpm libgd2-xpm-dev libpng12-dev |
Puis, je reconfigure Exim4 afin d'envoyer les mails vers un serveur de relais (celui du FAI par exemple) et de ne pas accepter de mails en réception.
dpkg-reconfigure exim4-config |
Aux questions posées, répondez comme ceci:
General type of mail configuration: mail sent by smarthost; no local mail System mail name : IP-address to listen on for incoming SMTP connections : 127.0.0.1 Other destinations for which mail is accepted: Visible domain name for local users: IP address or host name of the outgoing smarthost : Keep number of DNS-queries minimal : No Split configuration into small files? : No |
Exim4 propose une fonction permettant de ré-écrire l'adresse email de l'expéditeur en une autre. Par exemple, les alertes de Nagios ont pour expéditeur "nagios@hostname. Sauf que "hostname" n'est pas forcément un nom d'hôte FQDN valide sur Internet et certains serveurs de messagerie sur Internet peuvent refuser l'alerte à cause du FQDN non valide. Editez le fichier email-addresses en y mettant un alias:
vi /etc/email-addresses et ajouter/modifer nagios: nagios@ root: root@ |
Pour vérifier la configuration, je fais ceci:
Nagios3 Je vais créer un utilisateur "nagios" et un groupe "nagcmd" et modifier l'appartenance des groupes:
/usr/sbin/useradd -m -s /bin/bash nagios passwd nagios /usr/sbin/groupadd nagcmd /usr/sbin/usermod -G nagios,nagcmd nagios /usr/sbin/usermod -G nagios,nagcmd www-data |
Je récupère les sources de Nagios et je l'installe:
cd /usr/local/src/ wget http://ovh.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.6.tar.gz tar -xzf nagios-3.0.6.tar.gz cd nagios-3.0.6 ./configure --prefix=/usr/local/nagios --with-command-group=nagcmd --enable-nanosleep \ --enable-event-broker make all make install make install-init make install-commandmode make install-config update-rc.d nagios defaults |
Nagios Plugins J'installe maintenant les plugins officiels de Nagios:
cd /usr/local/src wget http://ovh.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.13.tar.gz apt-get install dnsutils tar -xzf nagios-plugins-1.4.13.tar.gz cd nagios-plugins-1.4.13 ./configure --with-nagios-user=nagios --with-nagios-group=nagios make make install |
NDOutils J'installe le module NDOutils qui va permettre d'intercepter l'activité de Nagios et de l'envoyer vers une base MySQL. Centreon ne fonctionne qu'avec les données stockées dans la base MySQL:
apt-get install libmysqlclient15-dev cd /usr/local/src wget http://surfnet.dl.sourceforge.net/sourceforge/nagios/ndoutils-1.4b7.tar.gz tar -xzf ndoutils-1.4b7.tar.gz cd ndoutils-1.4b7 ./configure --prefix=/usr/local/nagios/ --enable-mysql --disable-pgsql --with-ndo2db-user=nagios \ --with-ndo2db-group=nagios make cp ./src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o cp ./src/ndo2db-3x /usr/local/nagios/bin/ndo2db cp ./config/ndo2db.cfg /usr/local/nagios/etc/ cp ./config/ndomod.cfg /usr/local/nagios/etc/ chmod 774 /usr/local/nagios/bin/ndo* chown nagios:nagios /usr/local/nagios/bin/ndo* |
Je dois modifier la configuration de Nagios afin qu'il charge ce module:
vi /usr/local/nagios/etc/nagios.cfg et je vérifie la ligne (doit être à -1): event_broker_option_=-1 et je rajoute la ligne suivante: broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg |
Je crée le script suivant:
et je rajoute ce qui suit:
#!/bin/sh # # # chkconfig: 345 99 01 # description: Nagios to mysql # # Author : Gaëtan Lucas # Realase : 07/02/08 # Version : 0.1 b # File : ndo2db # Description: Starts and stops the Ndo2db daemon # used to provide network services status in a database. # status_ndo () { if ps -p $NdoPID > /dev/null 2>&1; then return 0 else return 1 fi
return 1 }
printstatus_ndo() { if status_ndo $1 $2; then echo "ndo (pid $NdoPID) is running..." else echo "ndo is not running" fi }
killproc_ndo () { echo "kill $2 $NdoPID" kill $2 $NdoPID }
pid_ndo () { if test ! -f $NdoRunFile; then echo "No lock file found in $NdoRunFile" echo -n " checking runing process..." NdoPID=`ps h -C ndo2db -o pid` if [ -z "$NdoPID" ]; then echo " No ndo2db process found" exit 1 else echo " found process pid: $NdoPID" echo -n " reinit $NdoRunFile ..." touch $NdoRunFile chown $NdoUser:$NdoGroup $NdoRunFile echo "$NdoPID" > $NdoRunFile echo " done" fi fi
NdoPID=`head $NdoRunFile` }
# Source function library # Solaris doesn't have an rc.d directory, so do a test first if [ -f /etc/rc.d/init.d/functions ]; then . /etc/rc.d/init.d/functions elif [ -f /etc/init.d/functions ]; then . /etc/init.d/functions fi
prefix=/usr/local/nagios exec_prefix=${prefix} NdoBin=${exec_prefix}/bin/ndo2db NdoCfgFile=${prefix}/etc/ndo2db.cfg NdoRunFile=${prefix}/var/ndo2db.run NdoLockDir=/var/lock/subsys NdoLockFile=ndo2db.lock NdoUser=nagios NdoGroup=nagios # Check that ndo exists. if [ ! -f $NdoBin ]; then echo "Executable file $NdoBin not found. Exiting." exit 1 fi
# Check that ndo.cfg exists. if [ ! -f $NdoCfgFile ]; then echo "Configuration file $NdoCfgFile not found. Exiting." exit 1 fi # See how we were called. case "$1" in
start) echo -n "Starting ndo:" touch $NdoRunFile chown $NdoUser:$NdoGroup $NdoRunFile $NdoBin -c $NdoCfgFile if [ -d $NdoLockDir ]; then touch $NdoLockDir/$NdoLockFile; fi ps h -C ndo2db -o pid > $NdoRunFile if [ $? -eq 0 ]; then echo " done." exit 0 else echo " failed." $0 stop exit 1 fi ;;
stop) echo -n "Stopping ndo: "
pid_ndo killproc_ndo
# now we have to wait for ndo to exit and remove its # own NdoRunFile, otherwise a following "start" could # happen, and then the exiting ndo will remove the # new NdoRunFile, allowing multiple ndo daemons # to (sooner or later) run #echo -n 'Waiting for ndo to exit .' for i in 1 2 3 4 5 6 7 8 9 10 ; do if status_ndo > /dev/null; then echo -n '.' sleep 1 else break fi done if status_ndo > /dev/null; then echo echo 'Warning - ndo did not exit in a timely manner' else echo 'done.' fi
rm -f $NdoRunFile $NdoLockDir/$NdoLockFile ;;
status) pid_ndo printstatus_ndo ndo ;;
restart) $0 stop $0 start ;;
*) echo "Usage: ndo {start|stop|restart|status}" exit 1 ;;
esac # End of this script |
Je le rajoute au boot du serveur et le rend exécutable:
update-rc.d ndo2db defaults chmod +x /etc/init.d/ndo2db |
Centreon J'installe maintenant Centreon:
cd /usr/local/src/ wget http://download.centreon.com/index.php?id=103 tar -xzf centreon-2.0.1.tar.gz cd centreon-2.0.1 |
Il faut exécuter le script d'installation:
export PATH="$PATH:/usr/local/nagios/bin/" ./install.sh -i |
et répondre aux questions comme suit :
Do you want to install : Centreon Web Front : y Do you want to install : Centreon CentCore : y Do you want to install : Centreon Nagios Plugins : y Do you want to install : Centreon Snmp Traps process : n Where is your Centreon directory? : /usr/local/centreon Where is your Centreon log directory : /usr/local/centreon/log Where is your Centreon etc directory : /etc/centreon Where is your Centreon generation_files directory? /usr/local/centreon Where is the RRD perl module installed [RRDs.pm] : /usr/lib/perl5/RRDs.pm Where is PEAR [PEAR.php] : /usr/share/php/PEAR.php Where is installed Nagios ? : /usr/local/nagios Where is your nagios config directory : /usr/local/nagios/etc Where is your Nagios var directory ? : /usr/local/nagios/var Where is your Nagios plugins (libexec) directory ? : /usr/local/nagios/libexec Where is your Nagios p_w_picpath directory ? : /usr/local/nagios/share/p_w_picpaths/logos Where is your CentPlugins Traps binary : /usr/local/centreon/bin Where is sudo configuration file : /etc/sudoers Do you want me to configure your sudo ? (WARNING) : y Do you want to add Centreon Apache sub configuration file ? : y Do you want to reload your Apache ? : y Do you want me to install/upgrade your PEAR modules : y Where is your Centreon Run Dir directory? : /var/run/centreon Where is your Centreon variable library directory? /var/lib/centreon Where is your CentStorage binary directory : /usr/local/centreon/bin Where is your CentStorage RRD directory : /var/lib/centreon Do you want me to install CentStorage init script ? y Do you want me to install CentStorage run level ? y Where is your CentCore binary directory : /usr/local/centreon/bin Do you want me to install CentCore init script ? : y Do you want me to install CentCore run level ? : y Where is your CentPlugins lib directory : /var/lib/centreon/centplugins |
Je relance Apache:
/etc/init.d/apache2 reload |
Centreon récupère les informations de cette machine via SNMP. Par défaut, il utilise la communauté SNMP "public" pour les accès. Je modifie la configuration du démon snmpd pour accepter l'accès public:
et je modifie comme suit :
#com2sec paranoid default public com2sec readonly default public |
et je relance snmpd
/etc/init.d/snmpd restart |
Configuration de Centreon A l'aide de votre navigateur, je vais sur le Centreon : http:///centreon Un assistant de configuration apparaît. Sur la plupart des écrans, je clique sur Next. Par contre, je fais attention aux 2 écrans suivants :
Environment Configurations => Nagios user = nagios Nagios group = nagios Apache User = www-data Apache Group = www-data Nagios Version = 3.x Nagios configuration directory = /usr/local/nagios/etc/ Nagios plugins = /usr/local/nagios/libexec/ RRDTool binary = /usr/bin/rrdtool |
Component => Root password for Mysql = Centreon Database Name = centreon Centstorage Database Name = centstorage Database Password = centreon Confirm it = centreon Database location - Centreon Web Interface location - MySQL Client version >=4.1 - password |
Je démarre le script
/etc/init.d/centstorage start |
Création des bases MySQL pour NDOutils Je dois créer les bases qui seront utilisées par NDOutils:
mysql -u root -p CREATE DATABASE `ndo` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; exit |
je lance les scripts SQL:
mysql -u root -p ndo < /usr/local/src/centreon-2.0.1/www/install/createNDODB.sql |
Je définis les droits d'accès de l'utilsateur "centreon" sur la base NDO et je redéfinis l'utilisateur et le mot de passe qui sera utilisé par le script ndo2db:
mysql -u root -p GRANT SELECT , INSERT , UPDATE , DELETE ON `ndo` . * TO 'centreon'@'localhost'; use centreon; update cfg_ndo2db set db_user = 'centreon'; update cfg_ndo2db set db_pass = 'centreon'; exit |
Je configure le script ndo2db:
vi /usr/local/nagios/etc/ndo2db.cfg et modifier comme suit: #socket_type=unix socket_type=tcp db_name=ndo db_user=centreon db_pass= centreon |
Avec un navigateur, je vais dans Centreon http:///centreon et je vais Configuration -> Nagios -> Nagios.cfg -> Onglet Data. Je modifie le champ "Broker Module" comme ceci :
/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg |
Puis, j'exporte la configuration vers Nagios: Configuration -> Nagios -> Generate et je clique sur Export. S'il n'y a pas d'erreurs, je coche les 4 cases et je reclique sur Export. Je démarre le démon ndo2db
/etc/init.d/ndo2db start /etc/init.d/nagios restart |
Pour vérifier que le module ndo2db fonctionne correctement, je fais :
tail -f /usr/local/nagios/var/nagios.log | grep ndomod |
Je dois voir voir cette ligne :
ndomod: Successfully connected to data sink." |
Language Cette partie va mettre en français l'interface Centreon:
apt-get install gettext locales iso-codes |
Vérifiez le contenu du fichier "/var/lib/locales/supported.d/local" et s'il ne contient rien, faites ce qui suit:
cat > /var/lib/locales/supported.d/local << EOF fr_FR ISO-8859-1 fr_FR.UTF-8 UTF-8 en_US.UTF-8 UTF-8 EOF vi /etc/default/locale et je rajoute cette ligne LANG="fr_FR" Pour générer la table des caractères: locale-gen update-locale |
Pour éviter d'avoir des erreurs de compilation lorsque vous êtes connectés en SHH, il faut modifier la configuration du démon SSHD:
vi /etc/ssh/sshd_config
#Mettre le signe # en début de ligne #AcceptEnv LANG LC_* /etc/init.d/ssh restart |
Puis j'installe le fichier français de Centreon:
mkdir /usr/local/centreon/www/locale/fr_FR.UTF-8/ mkdir /usr/local/centreon/www/locale/fr_FR.UTF-8/LC_MESSAGES/ cd /usr/local/src wget http://translations.modules.centreon.com/svn/trunk/centreon/fr_FR/LC_MESSAGES/messages.po msgfmt messages.po -o /usr/local/centreon/www/locale/fr_FR.UTF-8/LC_MESSAGES/messages.mo chown -R www-data.www-data /usr/local/centreon/www/locale/fr_FR.UTF-8/ /etc/init.d/apache2 reload |
Dans Centreon, dans la configuration d'un utilisateur, une langue "fr_FR" doit être présent. Reconfiguration de l'interface Web de Nagios Lors de l'installation de Centreon, l'installeur propose de mettre à jour la configuration du serveur Apache pour l'adapter à l'interface web Centreon. La configuration pour l'interface Nagios s'est trouvé écraser. Pour récupérer la configuration et profiter de l'interface Nagios, il faut créer un mot de passe pour l'utilisateur Nagios et modifier la configuration du serveur Apache.
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagios |
Je vais modifier la configuration d'Apache afin d'avoir accès à l'interface Nagios:
vi /etc/apache2/httpd.conf |
et je rajoute les lignes suivantes :
ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin
Options ExecCGI AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users Require valid-user
Alias /nagios /usr/local/nagios/share
Options None AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users Require valid-user
|
Je relance Apache:
/etc/init.d/apache2 restart |
Il faut maintenant modifier la configuration de Centreon pour qu'il utilise l'utilisateur "nagios" car celui-ci possède les droits sur les cgi:
Configuration > Nagios > cgi remplacez les champs suivants en précisant l'utilisateur nagios à la place de nagiosadmin: *Default User Name *System/Process Information Access *System/Process Command Access *Configuration Information Access *Global Host Information Access *Global Host Command Access *Global Service Information Access *Global Service Command Access |
Sauvegardez et exportez la configuration vers Nagios. |