Installation de Nagios 3.0.6 et Centreon 2.0.1   
 
 

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 :

  1. Le moteur de l'application qui vient ordonnancer les tâches de supervision.
  2. L'interface web, qui permet d'avoir une vue d'ensemble du système d'information et des possibles anomalies.
  3. 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 : <domaine-fqdn-valide>
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: <domaine-fqdn-valide>
IP address or host name of the outgoing smarthost : <ip/nom-smtp-fai>
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@<fqdn-valide>
root: root@<fqdn-valide>

Pour vérifier la configuration, je fais ceci:

mail "email@email"
 

 

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:

vi /etc/init.d/ndo2db
 

 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:

vi /etc/snmp/snmpd.conf

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


<Directory "/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
</Directory>

Alias /nagios /usr/local/nagios/share

<Directory "/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
</Directory>

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.