Installer et configurer le système de supervision Nagios
Auteur : Olivier BOYER - oboyer () ajoute ! org
Mots clés
Nagios, supervision, OpenBSD, ssh
Introduction
Ce document décrit comment mettre en place le système de supervision Nagios sur un système OpenBSD 4.3.
Le produit Nagios utilisé ici est la version 2.10, disponible à l'url : http://www.nagios.org
Présentation de la maquette
La maquette présentée dans se document est assez simple. Elle comprend :
- un serveur Nagios :
smoking.leaves.org - une machine à superviser :
machine.test.org
Sur la machine à superviser deux services vont être scrutés :
- le fonctionnement du daemon
sshd - l'espace disque disponible sur la partirion racine (
/)
Le test de fonctionnement du service sshd s'effectue à distance. Le serveur Nagios opérant comme un client standard du service. Par contre, l'analyse de l'espace disque disponible sur la partition racine oblige le serveur Nagios à se connecter sur la machine cliente, à exécuter la commande de diagnostique, et à retourner les informations collectées au serveur Nagios. Pour des raisons de sécurité (authentification et confidentialité) la connexion du serveur Nagios à la machine à superviser se fera via ssh.
Note
Toutes les commandes présentées ici, sont à exécuter, sauf mention contraire, en tant qu'administrateur de la machine.
Pré-requis
Sur la machine serveur Nagios, les pré-requis suivants doivent être validés :
- Le système OpenBSD doit être installé et fonctionnel
- Le serveur web livré par défaut avec OpenBSD doit être activé avec le support SSL
- Le client OpenSSH doit être fonctionnel
Sur la machine à superviser, les pré-requis suivants doivent être validés :
- Les plugins Nagios doivent être installés dans le répertoire
/usr/local/libexec/nagios - Le serveur OpenSSH doit être fonctionnel et actif
Installer Nagios sur le serveur
Installer les ports
Les plugins
Dans ce document, le produit Nagios fonctionnera dans un chroot(2), à partir du répertoire /var/www/nagios. Les packages de Nagios livrés par OpenBSD intègrent cette posibilité. Pour installer Nagios dans un chroot(2), exécutez les commandes suivantes :
# export PKG_PATH="ftp://ftp.irisa.fr/pub/OpenBSD/$(uname -r)/packages/i386/" # pkg_add nagios-plugins-1.4.11 nagios-plugins-1.4.11: complete --- nagios-plugins-1.4.11 ------------------- The check_dhcp and check_icmp plugins need to run with superuser privileges. For security reasons they are not installed suid root by default. If you want to use them, you have to either change their mode manually or use systrace's privilege elevation feature. For further details see /usr/local/share/doc/nagios-plugins/README.OpenBSD.
Nagios
# export PKG_PATH="ftp://ftp.irisa.fr/pub/OpenBSD/$(uname -r)/packages/i386/"
# pkg_add nagios-2.10p0-chroot
libltdl-1.5.22p3: complete
useradd: Warning: home directory `/var/www/nagios' doesn't exist, and -m was not specified
nagios-2.10p0-chroot: complete
--- nagios-2.10p0-chroot -------------------
Sample configuration files and web server configuration can be found in
/usr/local/share/examples/nagios.
Beware that Nagios might or might not work correctly on 64bit machines.
To start nagios automatically, add these lines to /etc/rc.local
if [ -x /usr/local/sbin/nagios ]; then
install -d -o _nagios /var/run/nagios
echo -n ' nagios'; /usr/local/sbin/nagios -d /etc/nagios/nagios.cfg
fi
Le frontal web
# export PKG_PATH="ftp://ftp.irisa.fr/pub/OpenBSD/$(uname -r)/packages/i386/" # pkg_add nagios-web-2.10-chroot nagios-web-2.10-chroot: complete
Créer un répertoire le pid
Le daemon nagios requière un répertoire particulier pour stocker son fichier de pid. Pour le créer, procédez comme suit :
# mkdir /var/run/nagios # chown _nagios:_nagios /var/run/nagios # chmod 750 /var/run/nagios
Configurer le serveur web Apache
Nagios utilise une interface web pour visualiser l'état des machines supervisées. Avant de procéder à la configuration à proprement parler de Nagios il faut commencer par configurer le serveur web pour qu'il prenne en compte les pages et CGI de Nagios.
Fichier /var/www/conf/httpd.conf
Modifiez comme suit le fichier /var/www/conf/httpd.conf
#
## nagios
#
ScriptAlias /cgi-bin/nagios /var/www/cgi-bin/nagios
<Directory "/var/www/cgi-bin/nagios">
# Enable SSL for nagios cgi engine
SSLVerifyClient none
SSLRequireSSL
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /var/www/etc/nagios/htpasswd
Require valid-user
</Directory>
Alias /nagios /var/www/nagios
<Directory "/var/www/nagios">
# Enable SSL for nagios engine
SSLVerifyClient none
SSLRequireSSL
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /var/www/etc/nagios/htpasswd
Require valid-user
</Directory>
Redémarrer le serveur Apache
Pour prendre en compte les modifications de configuration, il faut redémarrer le serveur Apache. Procédez comme suit :
# apachectl stop # apachectl start
Créer un utilisateur web dédié
Créez un utilisateur web autorisé à accéder à l'interface web comme suit :
# htpasswd -c /var/www/etc/nagios/htpasswd user New password: Re-type new password: Adding password for user user
Pour ajouter d'autres utilisateurs, exécutez la commande suivante :
# htpasswd /var/www/etc/nagios/htpasswd user2 New password: Re-type new password: Adding password for user user2
Premier test
Pour tester votre configuration, logez-vous en tant qu'utilisateur depuis un client du réseau, puis, dans un navigateur graphique (par exemple firefox), saisissez l'url suivante :
https://smoking.leaves.org/nagios
Une fenêtre popup s'ouvre et vous demande de vous authentifier. Saisissez le login user et le mot de passe associé. Vous devez voir apparaître la page de garde de Nagios. Dans le cas contraire, reprenez la configuration présentée dans ce chapitre.
Configurer l'accès SSH
Le système Nagios va scruter l'espace disque disponible sur la machine distante machine.test.org via le plugin check_by_ssh. Il s’agit d’une sur couche de la commande ssh(1). Il faut donc réaliser une configuration spécifique du service OpenSSH sur le client machine.test.org et le serveur.
Le serveur Nagios agit comme un client ssh qui se connecte au daemon sshd de la machine à superviser pour exécuter le plugin. Le serveur nagios fonctionne sur le serveur sous l'identité du pseudo-utilisateur _nagios.
Il faut, sur le serveur nagios, sous l'identité du pseudo-utilisateur _nagios générer une paire de clés, et la copier dans la home de l'utilisateur distant sur la machine à superviser.
Configuration du serveur Nagios
Sous l'identité de l'utilisateur _nagios, générer une paire de clés. Procédez comme suit :
Créez le répertoire personnel de configuration de ssh pour l'utilisateur _nagios :
# mkdir /var/www/nagios/.ssh # chown _nagios:_nagios /var/www/nagios/.ssh # chmod 700 /var/www/nagios/.ssh
Modifiez le shell de l'utilisateur _nagios pour pouvoir s'authentifier sous son identité :
# chsh -s /bin/ksh _nagios
Générez les clés pour l'utilisateur _nagios, sous l'identité de l'utilisateur _nagios
# su - _nagios $ ssh-keygen -t rsa [...] $ ssh-keygen -t dsa [...] $ exit
Repositionnez le shell du pseudo-utilisateur _nagios :
# chsh -s /sbin/nologin _nagios
Configuration de la machine à superviser
La machine à superviser machine.test.org doit avoir le service sshd actif et autoriser les connexions utilisateurs par clés.
Créer un utilisateur dédié pour le check_by_ssh
Sur la machine à superviser machine.test.org, en tant qu'utilisateur root, exécutez la commande suivante :
# useradd -m -c "Nagios check_by_ssh User" sshcheck # passwd sshcheck
Remarque : Il faut tout d'abord saisir un mot de passe pour l'utilisateur sshcheck pour que l'on puisse se connecter à la machine machine.test.org et copier les clés. Par la suite, dans le cadre de la supervision via Nagios, il est possible de vérouiller le mot de passe de cet utilisateur, puisque l'authentification s'effectuera par échanges de clés.
Copie des clés sur la machine à superviser
Depuis le serveur Nagios copiez les clés générées sur la machine à superviser. Exécutez la commande suivante :
# cd /var/www/nagios/.ssh # scp id_dsa.pub id_rsa.pub sshcheck@machine.test.org:~/.ssh
Intégrer les clés
Sur la machine à superviser machine.test.org, en tant qu'utilisateur sshcheck, exécutez les commandes suivantes :
$ mkdir ~/.ssh $ chmod 700 ~/.ssh $ cat id_dsa.pub >> .ssh/authorized_keys $ cat id_rsa.pub >> .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys $ $ rm *.pub $ exit
Tester l'accès à la machine à superviser
Sur le serveur Nagios, en tant qu'utilisateur _nagios, exécutez les commandes suivantes :
# chsh -s /bin/ksh _nagios # su - _nagios $ $ ssh sshcheck@machine.test.org The authenticity of host 'machine.test.org (www.xxx.yyy.zzz)' can't be established. RSA key fingerprint is 6b:5a:19:bc:1b:45:27:83:36:11:48:cc:4c:83:ff:b6. Are you sure you want to continue connecting (yes/no)? yes [...]
Vous devez être automatiquement logé sur machine.test.org. Dans le cas contraire, regardez le fichier de log sur machine.test.org. Une fois logé, vous pouvez vous déconnecter, l'authentification par échange de clés fonctionne.
Repositionnez le shell du pseudo-utilisateur _nagios :
# chsh -s /sbin/nologin _nagios
Configurer Nagios
Maintenant que l'interface de visualisation de Nagios est configurée sur le serveur, il faut configurer le daemon nagios lui-même.
Tous les fichiers de configuration de Nagios sont installés dans le répertoire /var/www/etc/nagios.
Configurer le fuseau horaire
Pour positionner le bon fuseau horaire, exécutez la commande suivante :
# cp /etc/localtime /var/www/etc
Configurer la résolution de noms
Pour configurer la résolution de noms, exécutez la commande suivante :
# cp /etc/resolv.conf /var/www/etc
Présentation des fichiers de configurations
| Fichier | Description |
|---|---|
| nagios.cfg | Fichier de configuration principal de nagios. |
| cgi.cfg | Configure les autorisations liées à l’exécution des CGI. |
| resource.cfg | Défini les différentes macros et variables utilisées dans nagios |
| checkcommands.cfg | Défini les commandes faisant appel aux modules. |
| contacts.cfg | Défini des personnes qui recevront les notifications. |
| contactgroups.cfg | Regroupe des contacts par groupe. |
| dependencies.cfg | Etabli des dépendances entre les services. |
| escalations.cfg | Défini d’éventuelles escalades suite à certaines notifications. |
| hostextinfo.cfg | Défini des informations externes à nagios pour chaque machine (ex. les logos) |
| hosts.cfg | Défini les machines à superviser. |
| hostgroups.cfg | Regroupe des machines par groupe. |
| misccommands.cfg | Défini les commandes qui ne sont pas liés aux modules (ex. les notifications) |
| services.cfg | Défini les services à surveiller pour chaque machine. |
| timeperiods.cfg | Défini les plages horaires. |
Dans la version 2.x de Nagios, tous les fichiers ce configuration, hormis nagios.cfg, cgi.cfg et resource.cfg sont regroupés dans un seul : minimal.cfg
Attention Après chaque modification d'un fichier de configuration, il faut redémarrer nagios.
Fichier nagios.cfg
Le fichier de configuration principal du daemon nagios est /var/www/etc/nagios/nagios.cfg. La configuration par défaut est plutôt bien faite. Modifiez juste les éléments suivants :
# Activer les commandes via l'interface web check_external_commands=1 # Desactive les log via syslog # Log dans le fichier NetAlarm use_syslog=0 # Affiche les dates au format europeen date_format=euro
Fichier cgi.cfg
Le paramétrage de l’exécution des CGI ainsi que les permissions liées aux scripts CGI s’effectue dans le fichier de configuration /var/www/etc/nagios/cgi.cfg.
Le fichier de configuration final doit être semblable à celui ci-dessous :
# egrep -v '^#|^ |^$' /var/www/etc/nagios/cgi.cfg main_config_file=/etc/nagios/nagios.cfg physical_html_path=/nagios url_html_path=/nagios show_context_help=0 nagios_check_command=/usr/local/libexec/nagios/check_nagios /var/nagios/status.dat 5 '/usr/local/bin/nagios' use_authentication=1 authorized_for_system_information=user authorized_for_configuration_information=user authorized_for_system_commands=user authorized_for_all_services=user authorized_for_all_hosts=user authorized_for_all_service_commands=user authorized_for_all_host_commands=user default_statusmap_layout=5 default_statuswrl_layout=4 ping_syntax=/sbin/ping -n -c 5 $HOSTADDRESS$ refresh_rate=90
ATTENTION :
A chaque création d’un nouvel utilisateur web dans la base /var/www/etc/nagios/htpasswd, il faut ajouter cet utilisateur au fichier cgi.cfg, dans les sections authorized_for_*. Les utilisateurs sont séparés par des virgules.
Par exemple :
authorized_for_system_information=user,user2 authorized_for_configuration_information=user,user2 authorized_for_system_commands=user,user2 authorized_for_all_services=user,user2 authorized_for_all_hosts=user,user2 authorized_for_all_service_commands=user,user2 authorized_for_all_host_commands=user,user2
Fichier minimal.cfg
Ce fichier est la concaténation des différents fichiers de configuration de Nagios présents dans les versions 1.x.
Section COMMANDS
Cette section définie les aliases utilisés dans les services pour tester les machines (ou groupes de machines) supervisées.
Dans cette maquette, deux services vont être testés sur la machine distante :
- le serveur sshd, via le plugin
check_sshinstallé sur le serveur Nagios. - un espace disque disponible, via le plugin
check_diskinstallé sur la machine distante. Pour accéder à ce plugin, nous utilisons le plugincheck_by_sshinstallé sur le serveur Nagios.
Pour définir ces deux services, ajoutez les lignes suivantes dans la section COMMANDS du fichier minimal.cfg :
# Command to check sshd daemon
define command{
command_name check_sshd
command_line $USER1$/check_ssh $HOSTADDRESS$
}
# Command to check by ssh disk usage
define command{
command_name ssh_check_disk
command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -l $ARG1$ -C "$USER1$/check_disk
-w $ARG2$ -c $ARG3$ -p $ARG4$"
}
Section HOSTS
La section HOSTS définie les machines à superviser via Nagios.
Déclarez comme suit la machine à superviser : machine.test.org
# machine.test.org
define host{
use generic-host ; Name of host template to use
host_name machine.test.org
alias machine.test.org
address machine.test.org
check_command check-host-alive
max_check_attempts 10
notification_interval 120
notification_period 24x7
notification_options d,r
contact_groups _nagios-admins
}
Section SERVICES
La section SERVICES décrit :
- la machine (ou groupe de machines) visée,
- le service à tester sur cette marchine (ou ce groupe de machines),
- l'alias de la commande à utiliser,
- la période de test.
Pour faciliter la déclaration des services, il est plus simple de regrouper les définitions semblables dans un template, et d'utiliser ce nouveau template pour décrire ensuite les services.
Les lignes suivantes définissent un nouveau template host-svc et associent les services à tester à la machine machine.test.org :
## Template for services on host
define service{
name host-svc ; template name
use generic-service ; template to use
is_volatile 0
check_period 24x7
max_check_attempts 4
normal_check_interval 15
retry_check_interval 1
contact_groups _nagios-admins
notification_options w,u,c,r
notification_interval 960
notification_period 24x7
register 0 ; DONT REGISTER THIS DEFINITION -
ITS NOT A REAL SERVICE, JUST A TEMPLATE!
}
define service{
use host-svc ; template to use
host_name machine.test.org
service_description SSHD Service
check_command check_sshd
}
define service{
use host-svc ; template to use
host_name machine.test.org
service_description Root Partition
check_command ssh_check_disk!sshcheck!20%!10%!/
}
Tester la configuration de Nagios
Pour tester d'éventuelles erreurs dans la configuration de Nagios, procédez comme suit :
# nagios -v /var/www/etc/nagios/nagios.cfg [...] Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check
Le résultat du test ne doit indiquer aucune erreur. Faites attention aux warning.
Dernières configurations
Démarrer automatiquement Nagios
Une fois que vous avez testé la configuration de nagios vous pouvez le démarrer. Pour que nagios soit activé automatiquement au démarrage de la machine, ajoutez les lignes suivantes au fichier /etc/rc.local :
# Start nagios (monitoring hosts & services daemon) if [ -x /usr/local/sbin/nagios ]; then echo -n ' nagios'; /usr/local/sbin/nagios -d /var/www/etc/nagios/nagios.cfg fi
Suivre l'évolution des fichiers de configuration
Pour suivre automatiquement l'évolution des fichiers de configuration de Nagios, ajouter les lignes suivantes au fichier /etc/changelist :
/var/www/etc/nagios/htpasswd /var/www/etc/nagios/cgi.cfg /var/www/etc/nagios/minimal.cfg /var/www/etc/nagios/nagios.cfg /var/www/etc/nagios/resource.cfg