Nagios
Remarque : Ce document est à mettre à jour et adapter à la distribution Gentoo.
Installation
Installer Nagios et Nagios-Plugins
Package Gentoo: nagios
Configurer apache
Modifier le fichier httpd.conf de la façon suivante :
<licode file=/etc/apache2/httpd.conf> ScriptAlias /nagios/cgi-bin/ /usr/nagios/sbin/ Alias /nagios/ /usr/nagios/share/ </licode>
Remarque : il est important de mettre la ligne Alias derrière la ligne ScriptAlias!!
<licode file=/etc/apache2/httpd.conf> <Directory "/usr/nagios/sbin/"> AllowOverride AuthConfig
Options ExecCGI Order allow,deny Allow from all
AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios/htpasswd.users require valid-user </Directory> </licode>
Pour créer le fichier de mot de passe, taper dans /etc/nagios :
#htpasswd -c htpasswd.users nagios
Installer l’agent Unix netsaint-statd
Copier le script netsaint-statd dans le répertoire /usr/local/bin/ du serveur à superviser.
Pour des raisons de sécurité, lancer le script sous un utilisateur NON root.
Pour lancer le script à chaque redémarrage du serveur, ajouter la ligne : <licode file=/etc/conf.d/local.start> su utilisateur –c "/usr/local/bin/netsaint-statd" </licode>
Remarque : L’agent ouvre le port TCP 1040.
Remarque : Il existe un agent nagios-statd écrit en python mais :
- il ne fonctionne pas avec les architectures installées en 2000
- je ne connais pas le python
Installer l’agent Windows NSC
Il faut télécharger l’agent opensource sur le site de NSC (http://nsclient.ready2run.nl) et l’installer sur la machine à superviser. La démarche d’installation est la suivante :
- copier pNSClient.exe dans un répertoire quelconque (C:\nsclient)
- ouvrir un prompt dos dans le répertoire choisi
- en tant qu’administrateur, lancer la commande >pNSClient /install
- Démarrer le service « Netsaint NT Agent » dans l’administration des services
L’agent est interrogé par le serveur Nagios par l’intermédiaire de la commande check_nt sur le port 1248.
Configuration
La commande
#nagios –v /etc/nagios.cfg
vérifie la syntaxe des fichiers de configuration avant le lancement de Nagios (/etc/init.d/nagios start)
Le détail de la syntaxe est disponible sur le site nagios (http://www.nagios.org).
La configuration générale (nagios.cfg)
Ce fichier donne les chemins des autres fichiers de configuration ainsi que les paramètres « administratifs » (logs, paramètres de temps…).
Les paramètres à changer sont : <licode file=/etc/nagios.cfg> admin_email=adresse_admin@mail.fr (mail de l'administrateur nagios) check_external_commands=1 (pour gérer les services définis par l’interface web) </licode>
Pour pouvoir utiliser les commandes externes (qui servent à activer/désactiver les notifications et les tests (checks), il faut aussi créer le fichier /var/nagios/rw/nagios.cmd avec les bons droits :
#mkdir /var/nagios/var/rw/ #chown nagios:nagios /var/nagios/rw/ #chmod 2770 /var/nagios/rw/ #touch /var/nagios/rw/nagios.cmd #chown nagios:nagios /var/nagios/rw/nagios.cmd #chmod u+rwx /var/nagios/rw/nagios.cmd #chmod g+rw /var/nagios/rw/nagios.cmd
Les autorisations sur les cgi (cgi.cfg)
Utilisateurs qui ont accès à la carte du réseau <licode>authorized_for_system_information=</licode>
Utilisateurs qui peuvent envoyer des commandes systèmes à Nagios par l’intermédiaire de l’interface web. <licode>authorized_for_system_commands=</licode>
Accès à la définition des « objets nagios ». <licode>authorized_for_configuration_information=</licode>
Utilisateurs qui ont accès aux informations de tous les systèmes et par conséquent de tous les services. <licode>authorized_for_all_hosts=</licode>
Utilisateurs qui peuvent envoyer des commandes à Nagios (comme arrêter un test) par l’intermédiaire de l’interface web. <licode>authorized_for_all_host_commands=</licode>
L’accès aux informations et aux commandes des services sont définis par: <licode>authorized_for_all_services= authorized_for_all_services_commands= </licode>
Remarque : Chaque liste d’autorisation séparent les utilisateurs par des virgules.
Remarque : La ligne suivante dans cgi.cfg permet de vérifier l’existence du processus Nagios.
nagios_check_command=/usr/local/nagios/libexec/check_nagios /usr/local/nagios/var/status.log 5 '/usr/local/nagios/bin/nagios'
La définition des objets nagios (commandes, hosts, services, contacts)
Variables Nagios
- $USER1$
- $HOSTADDRESS$
- $ARGn$
La définition des tests (checkcommands.cfg)
Les tests (checks) sont réalisés par les plugins nagios qui se trouvent dans le répertoire /usr/local/nagios/libexec/, noté $USER1$ dans la syntaxe nagios.
<licode file=checkcommands.cfg> define command { command_name check_http command_line $USER1$/check_http -H $HOSTADDRESS$ } </licode>
Remarque : La variable $HOSTADDRESS$ correspond à l’adresse de hôte pour lequel la commande va être utilisée dans les fichiers hosts.cfg et services.cfg.
La liste des tests utilisés et de leur syntaxe est donnée en annexe.
La définition des systèmes (hosts.cfg)
On commence par définir des « hôtes » génériques : <licode file=hosts.cfg> define host { name generic-host notifications_enabled 1 ... max_check_attempts 10 notification_interval 120 notification_period 24x7 notification_options d,u,r check_command check-host-alive register 0 } </licode>
Les hôtes génériques doivent avoir un nom (name) pour être réutilisés.
Les notifications (mail, pager, …) sont activées.
Au bout de 10 échecs consécutifs, nagios déclarera l’hôte comme indisponible.
Si le problème n’est pas réglé, les notifications seront envoyées toutes les 2 heures.
Les notifications sont envoyées pendant la période 24x7 définie dans le fichier timeperiods.cfg.
Les notifications sont envoyées si le système est down (d), unreacheable (u) ou à nouveau up – recovery (r).
Les hôtes génériques ne doivent pas être enregistrés (register à 0).
Ensuite la définition de chaque hôte est écrite en 4 lignes : <licode file=hosts.cfg> define host { use generic-host host_name Serveur1 alias Village #1 address 212.157.122.98 } </licode>
Remarque : la ligne parents permet de définir les liens dans un réseau.
La définition des services (services.cfg)
On commence par définir des services génériques par type de service à superviser :
<licode file=services.cfg> define service{ name service-ssh contact_groups admins notification_interval 120 notification_period 24x7 notification_options w,u,c,r check_command check_tcp!22 ... register 0 } </licode>
En cas d’alerte, le groupe des « admins » défini dans le fichier contactgroups.cfg sera notifié.
Si le problème ne s’est pas résolu avant, la notification sera renvoyée toutes les deux heures (120 minutes).
Les notifications seront envoyées pendant la période 24x7 définie dans le fichier timeperiods.cfg . Les notifications envoyées concernent les alertes warning (w), unknown (u), critical (c) et recovery (r).
Le test est la commande check_tcp avec la variable $ARG1$ à 22. Cet exemple vérifie que le port 22 est ouvert.
Les services génériques sont définis avec une variable register à 0.
Une fois les services génériques créés, les services par machine sont définis en deux lignes. <licode file=services.cfg> define service{ use service-http host_name serveur1, serveur2 } </licode>
Remarque : Pour gagner du temps et des lignes de configurations, il est possible de remplacer host_name par hostgroup_name.
La définition des groupes (hostgroups.cfg)
<licode file=hostgroups.cfg> define hostgroup { hostgroup_name VC alias Village Consultants contact_groups admins members Server1, Serveur2, Serveur3 } </licode>
La définition des contacts (contacts.cfg et contactgroups.cfg)
<licode file=contacts.cfg> define contact { contact_name nagios alias Nagios Admin service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r service_notification_commands notify-by-email host_notification_commands host-notify-by-email email c.de.livois@altran-tech.net } </licode>
<licode file=contactgroups.cfg> define contactgroup { contactgroup_name admins alias Administrateurs members nagios } </licode>
La définition de la carte du réseau
Remarque : Ce n'est possible que si l'on a installé la bibliothèque graphique gd avant la compilation de nagios.
Inclure dans le fichier cgi.cfg les lignes: <licode file=cgi.cfg> xedtemplate_config_file=/usr/local/nagios/etc/hostextinfo.cfg xedtemplate_config_file=/usr/local/nagios/etc/serviceextinfo.cfg </licode>
La carte des systèmes
Exemple de directive dans le fichier hostextinfo.cfg:
<licode file=hostextinfo.cfg> define hostextinfo{ host_name comete notes_url /serverinfo/comete.html icon_image mandrake.png icon_image_alt Bibientest vrml_image mandrake.png statusmap_image mandrake.gd2 2d_coords 100,250 3d_coords 100.0,50.0,75.0 } </licode> Seule la variable host_name est obligatoire.
notes_url doit être un lien web vers des informations sur le serveur en question
Les images sont mises dans le répertoire /usr/local/nagios/share/images/logos.
Des images sont téléchargeables sur le site de [1]].
L'image statusmap doit être en format gd2. (Utiliser pngtogd2 pour transformer un fichier png en gd2).
icon_image_alt donne un commentaire dans le cgi statusmap quand on se déplace sur le système avec la souris.
On peut aussi définir les coordonnées du système sur les cartes avec les options 2d_coords et 3d_coords.
Remarque : Pour utiliser le statuswrl.cgi, il faut disposer d'un navigateur spécial.
Images pour les services
Il est possible de définir des images pour les services affichés par les cgi status.cgi et extinfo.cgi (comments et downtime). Pour cela il faut créer le fichier serviceextinfo.cfg et définir les informations de la façon suivante:
<licode file=serviceextinfo.cfg> define serviceextinfo{ host_name comete service_description HTTP notes_url /serverinfo/comete.html icon_image mandrake.png icon_image_alt Bibientest } </licode>
Les paramètres host_name et service_description sont obligatoires.
Administration
Ajout/Retrait d’un administrateur
Apache
Dans le fichier httpd.conf, le fichier de mot de passe est indiqué par une ligne du type : <licode file=httpd.conf>AuthUserFile /usr/local/nagios/etc/htpasswd.users</licode>
Pour rajouter un utilisateur, taper:
#htpasswd /usr/local/nagios/etc/htpasswd.users new_user
Rentrer le mot de passe et l’accès est créé.
cgi.cfg
Les autorisations d’accès à Nagios sont définies dans ce fichier.
Par défaut, les contacts authentifiés ont les permissions suivantes pour chaque service pour lesquels ils sont contacts :
- accès au « service status information »
- accès au « service configuration information »
- accès à l’historique (history) et aux notifications
- autorisations d’envoi de commandes au service
Compte de notification
Les fichiers à configurer sont contacts.cfg, contactgroups.cfg et cgi.cfg
<licode file=contacts.cfg> define contact { contact_name nagios alias Nagios Admin service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r service_notification_commands notify-by-email host_notification_commands host-notify-by-email email c.de.livois@altran-tech.net } </licode>
Le contact peut être prévenu en cas d’alerte WARNING, UNKNOWN, CRITICAL et RECOVERY pour les services et DOWN, UNREACHABLE et RECOVERY pour les hôtes systèmes.
<licode file=contactgroups.cfg> define contactgroup { contactgroup_name admins alias Administrateurs members nagios } </licode>
Les groupes de contacts sont utilisés dans le fichier hostgroups.cfg pour les associer un groupe de systèmes.
<licode> define hostgroup { hostgroup_name Village alias Village Consultants contact_groups admins members Serveur1, Serveur2 } </licode>
Il est possible de mettre un hôte dans plusieurs hostgroups. Cela permet une souplesse d’association administrateurs/hôtes. En associant un hostgroup à un contactgroup, on peut restreindre les notifications et la consultations du site de supervision aux services d’un seul système pour ce groupe de contacts.
<licode> define hostgroup { hostgroup_name IDF alias GR contact_groups admin_idf members IDF } </licode>
L’ajout de l’administrateur pour la notification de services se fait dans le fichier services.cfg correspondant.
Ajout/Retrait d’un test (check)
Le test doit dépendre d’un script installé dans /usr/local/nagios/libexec/.
Définition de la commande
La commande est définie dans le fichier checkcommands.cfg.
Exemple de commande : <licode file=checkcommands.cfg> define command { command_name check_http command_line $USER1$/check_http -H $HOSTADDRESS$ } </licode>
Remarques : $USER1$ correspond au répertoire /usr/local/nagios/libexec/.
En général, l’usage de commande (comme check_http) est donnée par l’option –v (par exemple /usr/local/nagios/libexec/check_http –v).
Définition du service
Le service est défini dans le fichier services.cfg.
La description des paramètres se trouvent à l’adresse suivante : http://nagios.sourceforge.net/docs/1_0/xodtemplate.html#service
Si l’on veut associer une image au service, il faut rajouter quelques lignes au fichier serviceextinfo.cfg (en vérifiant qu’il est bien appelé par les fichiers nagios.cfg ou cgi.cfg) :
<licode file=services.cfg> define serviceextinfo{ host_name comete service_description HTTP notes_url /serverinfo/comete.html icon_image mandrake.png icon_image_alt Bibientest } </licode> Les paramètres host_name et service_description sont obligatoires.
Ajout/Retrait d’un serveur à superviser
Configuration du serveur Nagios
Les paramètres à surveiller sont :
- l’espace disque
- la charge (load)
- le nombre de processus
- le nombre d’utilisateurs connectés
- le trafic réseau ??
- la disponibilité des services (http, smtp, pop, …)
Définition du système (hosts.cfg) <licode file=hosts.cfg> define host { use generic-http host_name Serveur1 alias 212.157.122.102 address 212.157.122.102 parents Switch } <Licode>
Rajouter le système dans un groupe (hostgroups.cfg) <licode file=hostgroups.cfg> define hostgroup { hostgroup_name Village alias Village Consultants contact_groups admins members Serveur1, Serveur2 } </licode>
Configurer la carte statusmap (hostextinfo.cfg) <licode file=hostextinfo.cfg> define hostextinfo{ host_name 212.157.122.100 notes_url http://212.157.122.100/phpSysInfo/ icon_image suse.png icon_image_alt Système Nagios statusmap_image linux40.gd2 2d_coords 100,250 } </licode>
Configurer les services Les services génériques sont définies dans services.cfg. Ensuite, il existe un fichier de services par groupe d’hôtes. <licode file=services.cfg> define service { use http hostgroup_name Village } </licode>
Remarque : Il est aussi possible de diversifier les services par système : <licode file=services.cfg> define service { use disks host_name IDF, Lore, Cogix, Segime, Europe, EGTM, ASI check_command check_disks!none!100%!100% } define service { use disks host_name Tech check_command check_disks!/backup!100%!100% } </licode>
Configuration du serveur à superviser
Serveur Unix/Linux
Le script netsaint-statd se trouve dans \\saturne/net/projets/supervision/scripts
#cp netsaint-statd-x.x /usr/local/bin/ #ln –s /usr/local/bin/netsaint_statd-x.x /usr/local/bin/netsaint_statd #chmod a+x /usr/local/bin/netsaint_statd
Pour des raisons de sécurité, lancer le script sous un utilisateur NON root. Pour lancer le script à chaque redémarrage du serveur, ajouter la ligne : <licode>su nobody –c "/usr/local/bin/netsaint-statd"</licode> dans /etc/rc.d/boot.local (SuSe) ou /etc/rc.d/rc.local (RedHat). /etc/conf.d/local.start (gentoo) S’assurer qu’il existe un bash pour nobody dans /etc/passwd. (remplacer /bin/false ou /dev/null par /bin/bash )
Remarque : L’agent ouvre le port TCP 1040. Il faut donc configurer les firewalls en conséquence.
Remarque : Il existe un agent nagios-statd écrit en python mais :
- il ne fonctionne pas avec les architectures (trop vieilles) installées en 2000
- je ne connais pas le python
Serveur Windows
Il faut télécharger l’agent opensource sur le site de NSC (nsclient.ready2run.nl) et l’installer sur la machine à superviser. La démarche d’installation est la suivante :
- copier pNSClient.exe dans un répertoire quelconque (C:\nsclient)
- ouvrir un prompt dos dans le répertoire choisi
- en tant qu’administrateur, lancer la commande >pNSClient /install
- Démarrer le service « Netsaint NT Agent » dans l’administration des services
L’agent est interrogé par le serveur Nagios par l’intermédiaire de la commande check_nt sur le port 1248.
La gestion des notifications (Nagios)
Circuit de notification
Cf Notifications (http://nagios.sourceforge.net/docs/1_0/notifications.html )
- Host/Service Scheduled Downtime
- Flapping
- Host/Service Notification Options
- Host/Service Time Period test
- Host/Service Notification Interval
- Contact Notification Option
- Contact Notification Period
« Notification Escalations »
Cf Notifications Escalation (http://nagios.sourceforge.net/docs/1_0/escalations.html )
L’escalation de notifications permet de changer l’intervalle de notification en fonction du contact et du numéro de l’alerte. L’escalation de notification est possible pour les services, les hosts et les hostgroups. Les escalations sont définies dans le fichier escalations.cfg.
Exemple : <licode file=escalations.cfg> define serviceescalation{ host_name host1, host2 service_description HTTP first_notification 3 last_notification 100 notification_interval 86400 contact_groups nagios } </licode> A partir de la troisième alerte, les alertes ne sont envoyées plus qu’une fois par jour. Nagios est suffisament intelligent pour gérer les alertes de « Recovery » à part.
Le flapping
Le « flapping » est le fait qu’un état change souvent déclenchant ainsi un grand nombre d’alertes. Par exemple, le nombre moyen de processus tournant sur un système peut être égal au déclenchement warning. Si des processus sont lancés régulièrement sur la machine et s’arrêtent ensuite, les mails de warning et recovery vont se succéder.
Nagios garde en mémoire les 21 derniers états. Il y a donc 20 changements d’états possibles. 3 changements d’états correspond à environ 15% de flapping. Pour éviter le flapping, il faut d’abord activer sa détection (enable_flap_detection dans nagios.cfg). Ensuite, il faut régler pour chaque objet (host et service) les valeurs high_flap_threshold qui détecte le début du flapping et low_flap_threshold qui indique la fin du flapping.
Les valeurs par défaut sont définies dans nagios.cfg par les variables low_host_flap_threshold, high_host_flap_threshold, low_service_flap_threshold et high_service_flap_threshold.
La supervision par SNMP (windows)
Modification des tests LINUX
On distingue les tests « systèmes
Annexes
Liste des tests utilisés
Les tests nagios se trouvent dans /usr/local/nagios/libexec
Nous reprenons les variables définies dans le fichier checkcommands.cfg
La commande <test> -h donne souvent une explication des options des scripts.
Service | Test | options |
---|---|---|
ping | check_ping –H <host> -w <rta,pl> –c <rta,pl> –p <nombre ping> rta: temps en ms avant retour |
-p 1 |
http | check_tcp –H <host> -p 80 check_http –H <host> -a user:passwd |
|
https | A implémenter | |
ftp | check_tcp –H <host> -p 21 | |
smtp | check_smtp –H <host> -t <timeout> | -t 30 |
pop | check_pop –H <host> -t <timeout> Il faut mettre un timeout important pour diminuer les fausses alertes |
-t 60 |
ssh | check_tcp –H <host> -p 22 | |
webmin | check_tcp –H <host> -p 10000 | |
agent netsaint | check_tcp –H <host> -p 1040 |
Tests linux (agent netsaint) | (U) Utilisation (R) Retour (N2C) Nagios2cacti |
---|---|
Noms de processus |
(U)check_list_proc.pl <host> <liste séparée par des ,> |
Nombre de processus | |
Nombre d’utilisateurs | |
Espace disque | |
Charge | |
Mémoire | |
Trafic réseau |
(U)check_traffic.pl <host> [<ehtx>] [<port>] |
Le script netsaint-statd
Les commandes:
- df
- who
- proc
- uptime
- swap
Les routines:
- users
- disk / alldisk
- uptime
- procs / named_procs / list_proc
- swap /mem
- traffic
nagios2cacti.pl
Utilisation avec netsaint-statd syntaxe:
#perl /usr/local/nagios/libexec/nagios2cacti.pl netsaint <host> param <options>
Paramétrage de cacti
INPUT | SOURCE | GRAPH | |
---|---|---|---|
Disk | netsaint_disk nagios2cacti.pl netsaint <netsaint-host> disk <m1>,<m2>,<m3>,<m4>,<m5> |
Name : <ip>_disk |
|
Load | netsaint_load |
Name : <ip>_load |
|
Mem | netsaint_mem |
Name : <ip>_mem |
|
Procs | netsaint_proc |
Name : <ip>_procs |
|
Swap | netsaint_swap |
Name : <ip>_swap |
|
Traffic | netsaint_traffic |
Name : <ip>_traffic |
ITEM: LINE1 |
Uptime | netsaint_uptime |
Name : <ip>_uptime |
|
Users | netsaint_users |
Name : <ip>_users |
Les bases rra sont dans /usr/local/httpd/htdocs/cacti/rra
Copyright
© 2006 Christophe de Livois
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL. |