1 - Généralités

Dans cette page :

Haut de page

Introduction

La surveillance des systèmes a une importance particulière et souvent négligée en entreprise.

Bien surveiller les systèmes permet:

D’être alerté en cas de panne

De prévenir des pannes

De connaître la capacité et la performance des systèmes

De calculer les SLA

Un bon système de surveillance n’échappera pas d’alertes mais n’enverra pas trop d’alertes non plus.

Il surveillera les bonnes métriques mais n’en surveillera pas d’inutiles.

Rôle de nagios

nagios est un système de surveillance des hôtes et des services d’un réseau qui permet d’obtenir des informations sur ces hôtes et ces services et de définir des alertes. Il s’intègre à de nombreux types d’infrastructure grâce à des plugins développés par une communauté d’utilisateurs très active. nagios est un logiciel libre. Quelques exemples de ses fonctionnalités:

  • Surveiller l’espace disque restant sur un serveur de fichiers;

  • Surveiller le nombre de requêtes à la seconde sur un serveur http;

  • Surveiller la charge subie par un cluster de répartition de charge.

Installation

L’installation se fait sur Centos.

Écrivez un script contenant les commandes suivantes et exécutez le :

#!/bin/bash

yum -y install httpd php gcc glibc glibc-common wget perl gd gd-devel unzip zip tar
useradd nagios
groupadd nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd apache
cd /tmp/
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.5.tar.gz
tar -zxvf nagios-4.4.5.tar.gz
cd /tmp/nagios-4.4.5/
./configure --with-nagios-group=nagios --with-command-group=nagcmd
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
systemctl restart httpd
systemctl enable httpd
cd /tmp
wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
tar -zxvf nagios-plugins-2.2.1.tar.gz
cd /tmp/nagios-plugins-2.2.1/
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install
systemctl start nagios
systemctl enable nagios

Vérifier la configuration

Lancez la commande suivante comme superutilisateur :

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

La console de nagios est accessible par une page web, sous répertoire /nagios/. Une authentification est requise :

login: nagiosadmin

mdp: celui qui a été fourni à l’installation

Configuration globale

Le fichier de configuration central est /usr/local/nagios/etc/nagios.cfg. Les paramètres sont nombreux, mais les deux plus importants en ce qui nous concerne sont les suivants:

cfg_file : un fichier qui contient des définitions d’objets

cfg_dir : un répertoire qui contient des fichiers de définition d’objets

Remarque importante, les valeurs de paramètres sont cumulatives: autrement dit si on définit deux fois cfg_file, alors nagios cherchera ses définitions dans les deux fichiers. Par exemple si on a les deux lignes suivantes dans nagios.cfg :

cfg_file=/etc/nagios/services.cfg
cfg_file=/etc/nagios/hotes.cfg

Dans ce cas, nagios lira services.cfg et hotes.cfg à la recherche de définitions d’objets.

Objets nagios

On peut définir plusieurs types d’objets dans nagios. Les incontournables sont les suivants:

host L’objet (serveur, poste de travail, commutateur, routeur…) à surveiller.
service Le service à surveiller sur un hôte donné (un hôte peut par exemple offrir les services DNS et DHCP)
command La commande à lancer pour effectuer la surveillance (une requête DNS, un ping, etc.)
contact Le contact qui recevra la notification en cas d’alerte
timeperiod Une intervalle de temps (heures de bureau, 7/7, etc.), utilisée pour définir la période de surveillance ou encore les moments où les notifications peuvent être envoyées.

Surveiller des hôtes

Lorsqu’on veut configurer les paramètres de surveillance d’un hôte, il faut obligatoirement spécifier un certain nombre de choses, par exemple son adresse IP et la commande à lancer pour faire la vérification de son état (le check, dans le jargon nagios). Dans les fichiers de configuration, la définition de tout type d’objet sera structurée de la manière suivante:

define objet {
	directive	valeur
	directive	valeur
	directive 	valeur
	...
}

Une documentation en ligne est disponible à partir de l’interface web.

Objet host

Les directives les plus courantes en ce qui concerne les hôtes sont répertoriées dans le tableau suivant - celles qui sont en caractères gras sont obligatoires:

Directive Description
host_name nom court de l’hôte
alias description de l’hôte
address adresse IP
max_check_attempts nombre de vérifications faites par nagios lorsqu’un hôte n’est pas détecté
check_period le nom du timeperiod qui désigne durant quelle période la surveillance est faite
contacts liste séparée par des virgules des contacts à prévenir en cas de problème
notification_interval nombre de minutes entre chaque notification aux contacts, tant que l’hôte ne répond pas
notification_period le nom du timeperiod durant lequel les alertes peuvent être envoyées aux contacts
check_command le nomde l’objet command à lancer pour faire la vérification
check_interval nombre de minutes entre chaque vérification lorsque l’hôte répond
retry_interval nombre de minutes entre chaque vérification lorsque l’hôte ne répond pas

Par exemple, pour envoyer une requête ping à un serveur à l’adresse 10.20.30.40, 24/24:

define host{
	host_name					DNSSRV01
	alias						Le serveur DNS 1
	address						10.20.30.40
	check_command				check-host-alive
	check_interval				5
	retry_interval				1
	max_check_attempts			5
	check_period				24x7
	contact_groups				admin@bigshot.com
	notification_interval		30
	notification_period			24x7
}

Objets service

Les directives obligatoires en ce qui concerne les services sont répertoriées dans le tableau suivant :

Directive Description
host_name nom court de l’hôte associé au service
service_description nom du service (doit être unique pour l’hôte)
max_check_attempts nombre de vérifications faites par nagios lorsqu’un hôte n’est pas détecté
check_period le nom du timeperiod qui désigne durant quelle période la surveillance est faite
contacts liste séparée par des virgules des contacts à prévenir en cas de problème
notification_interval nombre de minutes entre chaque notification aux contacts, tant que l’hôte ne répond pas
notification_period le nom du timeperiod durant lequel les alertes peuvent être envoyées aux contacts
check_command le nomde l’objet command à lancer pour faire la vérification
check_interval nombre de minutes entre chaque vérification lorsque l’hôte répond
retry_interval nombre de minutes entre chaque vérification lorsque l’hôte ne répond pas

Par exemple, si on veut vérifier que le service DNS est actif sur un hôte, on aura la configuration suivante :

define service{
	host_name				DNSSRV01
	service_description		dns-interne
	check_command			check_dns_int
	check_interval			5
	retry_interval			1
	max_check_attempts		5
	check_period			24x7
	contacts				admin@bigshot.com
	notification_interval	30
	notification_period		24x7
}

Objet timeperiod

Permet de définir des intervalles de temps. Le format des directives peut être très complexe, par exemple pour accepter des périodes du genre “entre le 3e jeudi et le 4e lundi du mois sauf les dimanches”. Les paramètres obligatoires sont :

  • timeperiod_name

  • alias

On utilisera ensuite une désignation de jour comme directive, et une désignation d’intervalle en heures comme valeur (s’il y en a plusieurs, elles peuvent être séparées d’une virgule). Par exemple, pour spécifier les heures de bureau:

define timeperiod {
	timeperiod_name		bureau
	alias				Heures de bureau standard
	monday				09:00-17:00	
	tuesday				09:00-17:00			
	wednesday			09:00-17:00			
	thursday			09:00-17:00			
	friday				09:00-17:00				
}

Objets contacts

Permet de définir la liste des personnes à prévenir en cas d’alerte - celles qui sont en caractères gras sont obligatoires:

Directive Description
contact_name le nom de l’objet contacts
alias une description de cet objet
host_notifications_enabled [0/1] le contact peut recevoir les alertes des hôtes
service_notifications_enabled [0/1] le contact peut recevoir les alertes des services
host_notification_period la période où le contact est alerté en cas de problème de l’hôte
service_notification_period la période où le contact est alerté en cas de problème du service
host_notification_options le type d’alertes d’hôtes que le contact recevra
service_notification_options le type d’alertes de service que le contact recevra
host_notification_commands les commandes qui seront utilisées pour alerter le contact lorsque l’hôte ne répond pas
service_notification_commands les commandes qui seront utilisées pour alerter le contact lorsque le service ne répond pas
email l’adresse email du contact

Objets command

Décrivent les commandes qui seront utilisées par nagios, soit pour vérifier l’état d’un hôte, soit pour alerter un contact. Elles comprennennt deux directives qui sont obligatoires :

  • command_name

  • command_line

La directive command_line est la commande elle-même suivie de ses options. Par exemple pour lancer une requête DNS sur le serveur 10.20.30.40, on aura la définition suivante:

define command {
	command_name requete-dns
	command_line	/usr/local/nagios/libexec/check_dns -H www.google.com -s $HOSTADDRESS$
}

L’aide en ligne sur les exécutables pouvant être invoqués par command_line est disponible en ajoutant l’argument –help à la suite de cet exécutable, par exemple:

$ /usr/local/nagios/libexec/check_http --help

Aussi, on peut lancer directement ces commandes pour les tester: elles retournent alors les mêmes valeurs que celles qui sont affichées dans l’interface web. Par exemple:

$ /usr/local/nagios/libexec/check_http -H localhost -u / 

HTTP OK: HTTP/1.1 200 OK - 1301 bytes in 0.002 second response time |time=0.002337s;;;0.000000 size=1301B;;;0      

Atelier – Configuration de nagios

nagios peut être installé avec de nombreux fichiers de configuration prédéfinis et des « plugins » ; c’est ce que nous avons fait plus haut. Dans cet atelier cependant nous allons ignorer ces extras et monter notre propre configuration à partir de rien.

Afin que nagios ne tienne pas compte des fichiers de configuration fournis lors de l’installation, nous allons créer un répertoire où nous mettrons nos propres fichiers, et nous dirons à nagios de tenir compte uniquement de ce qu’il y a dans ce répertoire.

  1. Créer le répertoire /etc/nagios/config_perso

  2. Copier /usr/local/nagios/etc/nagios.cfg vers /usr/local/nagios/etc/nagios.cfg.old

  3. Modifier /etc/nagios/nagios.cfg : ajoutez la ligne suivante

cfg_dir=/etc/nagios/config_perso

et commentez toutes les autres directives cfg_dir et cfg_file

Nous allons ensuite créer les fichiers de configuration pour l’environnement à surveiller. Pour l’instant, on ne surveillera que la machine locale. Il faut donc créer le fichier de configuration des hôtes.

  1. Dans /etc/nagios/config_perso/hotes.cfg la définition suivante :
define host {
host_name				localhost    
alias					L'hôte local nagios
address					127.0.0.1
max_check_attempts		10
contacts				admin
notification_interval	0
notification_period		24x7
check_command			check-host-alive
}

Ensuite, vérifier la configuration : il y a des erreurs. Le contact, la période et la commande n’existent pas. On va donc les créer.

  1. Dans /etc/nagios/config_perso/contacts.cfg, ajoutez la définition suivante :
define contact{
        contact_name                    admin
        alias                           Utilisateur root
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_commands   notify-service-by-email
        host_notification_commands      notify-host-by-email
        email                           root@localhost
        }
  1. Dans /etc/nagios/config_perso/periodes.cfg, ajoutez la définition suivante :
define timeperiod{
        timeperiod_name 24x7
        alias           24h par jour, 7 jours/semaine
        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
        }
  1. On doit ajouter 3 définitions dans le fichier /etc/nagios/config_perso/commandes.cfg:
define command{
        command_name    check-host-alive
        command_line    /usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w 5000,100% -c 5000,100% -p 1
        }

define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** nagios *****\n\nNotification Type: $NOTIF$
        }
		
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** nagios *****\n\nNotification Type: $NOTIF$
        }

Ensuite, revérifiez la configuration. nagios annonce qu’il n’y a aucun service défini. On va créer le service « nagios » et l’associer à notre hôte. Pour cela, il faudra aussi créer une nouvelle commande : celle-ci vérifiera que la page web de nagios est visible.

  1. Dans le fichier /etc/nagios/config_perso/services.cfg, ajoutez la commande suivante :
define service{
	host_name				localhost
	service_description		nagios
	check_command			console-nagios
	check_interval			5
	retry_interval			1
	max_check_attempts		5
	check_period			24x7
	contacts				admin
	notification_interval	30
	notification_period		24x7
	}
  1. Dans le fichier /etc/nagios/config_perso/commandes.cfg, ajoutez la commande suivante :
	 define command{
        command_name    console-nagios
        command_line    /usr/local/nagios/libexec/check_http -H localhost -u /nagios/
}
  1. À ce point-ci, lorsqu’on vérifie la configuration, nagios ne trouve plus d’erreurs. Pour redémarrer le service lancez la commande suivante :
$ systemctl restart nagios