Outils pour utilisateurs

Outils du site


tutoriels:nagios

NAGIOS : Supervision d'hôtes et services

Nagios

Solution de supervision avec Nagios en version 3.0.6:

  • NDO (base de données MYSQL)
  • Nagios PLUGINS
  • NRPE
  • PERL et modules
  • Vsphère SDK

Configuration de NAGIOS

User et group nécessaires pour Nagios

Création de l'utilisateur et et des groupes adéquates au bon fonctionnement de Nagios :

adduser nagios --no-create-home --shell /bin/false
groupadd nagcmd
usermod -G nagcmd nagios
usermod -G nagcmd www-data
usermod -G nagios www-data
Modifier le Home de l'utilisateur nagios :
vi /etc/passwd
Allez à la dernière ligne et remplacer le /home/nagios par /usr/local/nagios puis quitter +enregistrer

Compilation de Nagios

Après décompression de l'archive de Nagios 3.0.6 :
Installer les dépendances :

aptitude install build-essential libgd2 libgd2-xpm libgd2-xpm-dev libgd-dev libgd-gd2-perl libgd-graph-perl libgd-graph3d-perl

Compiler :

./configure --with-gd-lib=/usr/lib --with-gd-inc=/usr/include --with-nagios-user=nagios --with-nagios-group=nagios --with-command-group=nagios 
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf

Ajuster tout de suite le mail admin :

vi /usr/local/nagios/etc/objects/contacts.cfg

Création du mot de passe admin :

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Démarrer le logiciel de supervision:

/etc/init.d/nagios start

Composition de /usr/local/nagios :

  • bin/ Nagios core program
  • etc/ Main, resource, object, and CGI configuration files should be put here
  • sbin/ CGIs
  • share/ HTML files (for web interface and online documentation)
  • var/ Empty directory for the log file, status file, retention file, etc.
  • var/archives Empty directory for the archived logs
  • var/rw Empty directory for the external command file

Installation des Plugins de NAGIOS

Procédure pour venir compléter les commandes basic de notre supervision à l'aide de plugins : Nagios plugins

tar xvzf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
./configure --with-nagios-user=nagios --with-nagios-group=nagios  --without-world-permissions
make && make install

Mise en place de NDO (base de données)

Schéma de NDO
NDO est composé de deux modules: NDOMOD et NDO2DB.

NDOMOD doit être lancé sur le serveur Nagios et permet de récupérer les informations remontées par Nagios pour les transmettre via TCP (ou un socket Unix) vers NDO2DB.

Compilation de NDO

Commencer par récupérer l'URL de la dernière version stable de ndoutils sur SourceForge :

cd /root/sources
wget http://dfn.dl.sourceforge.net/sourceforge/nagios/ndoutils-1.4b9.tar.gz .
tar xzf ndoutils-1.4b9.tar.gz
cd ndoutils-1.4b9
./configure --disable-pgsql --with-mysql-lib=/var/lib/mysql --with-ndo2db-user=nagios --with-ndo2db-group=nagios

Pour avoir le /usr/lib/mysql, il faut installer les librairies de MYSQL

aptitude install libmysqlclient15-dev
et
make

Installation de NDO

Copier les fichiers de conf générique:

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*

Création de la base de données:

mysqladmin -u root -p create ndo
mysql -u root -p mysql
GRANT ALL ON ndo.* TO 'ndouser'@'localhost' IDENTIFIED BY 'ndopassword';
FLUSH PRIVILEGES;
exit

Création des tables de la base de données NDO:

cd /root/source/ndoutils-1.4b9/db/
./installdb -u ndouser -p ndopassword -h localhost -d ndo

:!: IGNOREZ : DBD::mysql::db do failed: La table 'ndo.nagios_dbversion' n'existe pas at ./installdb line 51.

Configuration de NDO

La configuration de NDO se fait par deux fichiers:

  • ndomod.cfg : configuration de NDOMOD
  • ndo2db.cfg: configuration de NDO2DB

cd /root/sources/ndoutils-1.4b9/
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*
Eiter les fichiers de conf :
vi /usr/local/nagios/etc/ndomod.cfg
instance_name=NAGIOS
output_type=unixsocket
output=/usr/local/nagios/var/ndo.sock
tcp_port=5668
output_buffer_items=5000
buffer_file=/usr/local/nagios/var/ndomod.tmp
vi /usr/local/nagios/etc/ndo2db.cfg
ndo2db_user=nagios
ndo2db_group=nagios
socket_type=unix
socket_name=/usr/local/nagios/var/ndo.sock
tcp_port=5668
db_servertype=mysql
db_host=localhost
db_name=ndo
db_port=3306
db_prefix=nagios_
db_user=ndouser
db_pass=ndopassword

Configurer Nagios pour NDO

Nous allons configurer Nagios pour qu’il passe les informations automatiquement à NDOMOD.

vi /usr/local/nagios/etc/nagios.cfg
Ces 2 lignes suffisent :
event_broker_options=-1
broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg

Automatisation du lancemant de NDO

Créer et ajouter le script de démarrage au Runlevel Config :

vi /etc/init.d/ndo2db
#!/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
Donner lui les droits adéquates:
chown root:root /etc/init.d/ndo2db
chmod 755 /etc/init.d/ndo2db
update-rc.d ndo2db defaults

Vérification du fonctionnement

Démarrer Nagios et NDO et vérifier les logs:

/etc/init.d/nagios restart
/etc/init.d/ndo2db start
tail -f /usr/local/nagios/var/nagios.log
Vous devriez voir des retours du genre:
Event broker module '/usr/local/nagios/bin/ndomod.o' initialized successfully.
Auto-save of retention data completed successfully.

Installation de NAGIOS NRPE

Nagios NRPE

Installer cette librairie :

apt-get install libssl-dev

Récupérer l'archive de la dernière version stable :

tar xzf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure --enable-ssl
make all
make install-plugin

Du côté client, un paquet existe pour les distributions debian :

aptitude install nagios-nrpe-server
Configurer l'accès pour que le serveur Nagios (IP :uniquement) puisse venir checker :
vi /etc/nagios/nrpe.cfg

Installation des modules PERL et le vSphere SDK for Perl

CPAN perl logo Vsphere logo
Pour la supervision de serveurs ESX(i) de VMware :

Installer les modules PERL nécessaires:

perl -MCPAN -e shell
cpan[1]> install Bundle::CPAN
cpan[1]> reload CPAN
cpan[1]> install Nagios::Plugin
cpan[1]> install Crypt::SSLeay
cpan[1]> install Compress::Zlib
exit

Récupérer le vsphere SDK de VMware et installer:

cd /root
tar xvzf VMware-vSphere-SDK-for-Perl-4.0.0-161974.i386.tar.gz 
cd vmware-vsphere-cli-distrib/
Modifier le script perl vmware-install.pl pour DEBIAN:
if ( direct_command("cat /etc/*-release | grep -i ubuntu") || direct_command("cat /proc/version | grep -i ubuntu") ) {

A CORRIGER EN :

if ( direct_command("cat /etc/*-release | grep -i ubuntu") || direct_command("cat /proc/version | grep -i debian") ) {
Installer les dépendances :
aptitude install perl-doc libxml-libxml-perl
Ensuite l'install se déroule normalement en acceptant la licence:
./vmware-install.pl

Créer l'utilisateur et le groupe en lecture seule sur le serveur VMware : help

Déclarer les informations de connexion au moyen des variables :

vi /usr/local/nagios/etc/resource.cfg
$USER11$=username
$USER12$=password

Trucs et astuces

  • Vérifier la configuration de nagios :

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

  • Penser à relancer votre serveur Apache après l'installation, sinon l'interface web de nagios ne marche pas :

/etc/init.d/apache2 restart

Vous n'arriver par à utiliser la section “3-D Status Map” de l'interface WEB de nagios ? Installer le plugin VRML sur votre navigateur internet : http://cic.nist.gov/vrml/cosmoplayer.html#AUTOMATIC

Changer le template WEB de nagios

L'interface WEB de nagios est assez austère. Je vous invite a visiter ce site Internet afin de choisir un nouveau template afin de remplacer celui existant : http://exchange.nagios.org/directory/Addons/Frontends-%28GUIs-and-CLIs%29/Web-Interfaces/Themes-and-Skins

Pour installer un Template, rien de plus simple. Sur votre serveur Nagios, positionner vous dans le répertoire :

cd /usr/share/nagios

Télécharger le template choisi :

wget http://sourceforge.net/projects/arana-nagios/files/arana_style-1.0for-Nagios3x-ENG.zip

faire une sauvegarde du dossier nagios… au cas ou… :

cp -rf /usr/share/nagios /usr/share/nagios_backup

Extraire l'archive :

unzip arana_style-1.0for-Nagios3x-ENG.zip

remplacer le template par le nouveau :

 mv arana_style/* ./

Et voilà, vous avez mis le nouveau template !

Echange de clefs SSH pour le plugin check_by_ssh

  • En tant qu'utilisateur Nagios:

ssh-keygen -b 2048

  • Copier la clé publique sur le serveur distant:

ssh-copy -i /var/log/nagios/.ssh/id_rsa.pub root@192.168.1.1

  • La connexion doit se réaliser sans mdp, et copier les plugins que vous souhaitez jouer à distance:

ssh root@192.168.1.1
mkdir ~/scripts
exit
scp /usr/lib/nagios/plugins/check_dns root@192.168.1.1:~/scripts

  • Le check by SSH à distance en tant que Nagios:

/usr/lib/nagios/plugins/check_by_shh -H 192.168.1.1 -l root -C '~/scripts/check_dns -H test.local -s 192.168.1.50' -t 10

Dépendance d'hôte

* Déclaration dans le fichier des dépendances:

vi /etc/nagios/dependance.cfg
define hostdependency{
        host_name                       dns1.pcp.local
        dependent_host_name             srv-web.pcp.local
        dependent_host_name             srv-lan.pcp.local
        notification_failure_criteria   d,u
        }

Dépendance de services

  • Déclaration dans le fichier des dépendances:

vi /etc/nagios/dependencies.cfg
define servicedependency{
        host_name                       FAI-dns
        service_description             Service DNS
        dependent_host_name             dns1.pcp.local
        dependent_service_description   Service DNS
        execution_failure_criteria      w,u,c
        notification_failure_criteria   w,u,c
        }

Relation Parent/enfant

  • Déclaration du host avec son parent:

define host{
        host_name                       srv-web.pcp.local
        use                             srv-web.pcp.local
        alias                           svr-web.pcp.local
        address                         88.44.22.111
        hostgroups                      ENTREPRISE
        parents                         dns1.pcp.local
}

tutoriels/nagios.txt · Dernière modification: 15/04/2016 à 21:15 (modification externe)

Outils de la page