1 - Généralités
1 - Généralités Contact
Dans cette 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 |
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.
-
Créer le répertoire
/etc/nagios/config_perso
-
Copier /
usr/local/nagios/etc/nagios.cfg
vers/usr/local/nagios/etc/nagios.cfg.old
-
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.
- 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.
- 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
}
- 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
}
- 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.
- 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
}
- 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/
}
- À 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