Nagios

De wikilivois
Aller à la navigationAller à la recherche

http://www.nagios.org

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 :

  1. copier pNSClient.exe dans un répertoire quelconque (C:\nsclient)
  2. ouvrir un prompt dos dans le répertoire choisi
  3. en tant qu’administrateur, lancer la commande >pNSClient /install
  4. 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 :

  1. copier pNSClient.exe dans un répertoire quelconque (C:\nsclient)
  2. ouvrir un prompt dos dans le répertoire choisi
  3. en tant qu’administrateur, lancer la commande >pNSClient /install
  4. 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 )

  1. Host/Service Scheduled Downtime
  2. Flapping
  3. Host/Service Notification Options
  4. Host/Service Time Period test
  5. Host/Service Notification Interval
  6. Contact Notification Option
  7. 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
pl : % de ping perdu

-p 1
-w 3000.0,80%
-c 5000.0,100%

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 ,>
(R)process1 nbr1 process2 nbr2 process3 nbr3 …
(N2C)Pas d’objet

Nombre de processus
Nombre d’utilisateurs
Espace disque
Charge
Mémoire
Trafic réseau

(U)check_traffic.pl <host> [<ehtx>] [<port>]
(R)eth0:<in>;<out>
(N2C)nagios2cacti.pl netsaint <host> <ethx>

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
Type : GAUGE
Max : 100

Load netsaint_load

Name : <ip>_load
Type : GAUGE
Max : 20

Mem netsaint_mem

Name : <ip>_mem
Type : GAUGE
Max : 100

Procs netsaint_proc

Name : <ip>_procs
Type : GAUGE
Max : 500

Swap netsaint_swap

Name : <ip>_swap
Type : GAUGE
Max : 100

Traffic netsaint_traffic

Name : <ip>_traffic
Type: COUNTER
Max: 10000000

ITEM: LINE1
Consolidation:AVERAGE

Uptime netsaint_uptime

Name : <ip>_uptime
Type : GAUGE
Max : 2000

Users netsaint_users

Name : <ip>_users
Type : GAUGE
Max : 10

Les bases rra sont dans /usr/local/httpd/htdocs/cacti/rra

Copyright

© 2006 Christophe de Livois

Tête de GNU 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.