Nagios

De wikilivois
Révision datée du 28 mai 2012 à 20:31 par Christophe (discussion | contributions) (1 version)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à 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 :

  /etc/apache2/httpd.conf
ScriptAlias /nagios/cgi-bin/ /usr/nagios/sbin/
Alias /nagios/ /usr/nagios/share/


Remarque : il est important de mettre la ligne Alias derrière la ligne ScriptAlias!!

  /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>


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 :

  /etc/conf.d/local.start
su utilisateur –c "/usr/local/bin/netsaint-statd"


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 :

  /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)


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

authorized_for_system_information=


Utilisateurs qui peuvent envoyer des commandes systèmes à Nagios par l’intermédiaire de l’interface web.

authorized_for_system_commands=


Accès à la définition des « objets nagios ».

authorized_for_configuration_information=


Utilisateurs qui ont accès aux informations de tous les systèmes et par conséquent de tous les services.

authorized_for_all_hosts=


Utilisateurs qui peuvent envoyer des commandes à Nagios (comme arrêter un test) par l’intermédiaire de l’interface web.

authorized_for_all_host_commands=


L’accès aux informations et aux commandes des services sont définis par:

authorized_for_all_services=
authorized_for_all_services_commands=


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.

  checkcommands.cfg
define command {
command_name                check_http
command_line                $USER1$/check_http -H $HOSTADDRESS$
}


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 :

  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
}


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 :

  hosts.cfg
define host {
use                            generic-host
host_name                      Serveur1 
alias                          Village #1
address                        212.157.122.98
}


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 :

  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        
}


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.

  services.cfg
define service{
use                            service-http
host_name                      serveur1, serveur2
}


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)

  hostgroups.cfg
define hostgroup {
hostgroup_name                 VC
alias                          Village Consultants
contact_groups                 admins
members                        Server1, Serveur2, Serveur3
}


La définition des contacts (contacts.cfg et contactgroups.cfg)

  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
}


  contactgroups.cfg
define contactgroup {
contactgroup_name              admins
alias                          Administrateurs
members                        nagios
}


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:

  cgi.cfg
xedtemplate_config_file=/usr/local/nagios/etc/hostextinfo.cfg
xedtemplate_config_file=/usr/local/nagios/etc/serviceextinfo.cfg


La carte des systèmes

Exemple de directive dans le fichier hostextinfo.cfg:

  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
}


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:

  serviceextinfo.cfg
define serviceextinfo{
host_name comete
service_description HTTP
notes_url /serverinfo/comete.html
icon_image mandrake.png
icon_image_alt Bibientest
}


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 :

  httpd.conf
AuthUserFile /usr/local/nagios/etc/htpasswd.users


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

  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
}


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.

  contactgroups.cfg
define contactgroup {
contactgroup_name              admins
alias                          Administrateurs
members                        nagios
}


Les groupes de contacts sont utilisés dans le fichier hostgroups.cfg pour les associer un groupe de systèmes.

define hostgroup {
hostgroup_name                 Village
alias                          Village Consultants
contact_groups                 admins
members                        Serveur1, Serveur2
}


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.

define hostgroup {
hostgroup_name                  IDF
alias                           GR
contact_groups                  admin_idf
members                         IDF
}


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 :

  checkcommands.cfg
define command {
command_name                check_http
command_line                $USER1$/check_http -H $HOSTADDRESS$
}


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) :

  services.cfg
define serviceextinfo{
host_name comete
service_description HTTP
notes_url /serverinfo/comete.html
icon_image mandrake.png
icon_image_alt Bibientest
}


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)

  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
}


Configurer la carte statusmap (hostextinfo.cfg)

  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
}


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.

  services.cfg
define service {
use                            http
hostgroup_name                 Village
}


Remarque : Il est aussi possible de diversifier les services par système :

  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%
}


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 :

su nobody –c "/usr/local/bin/netsaint-statd"


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 :

  escalations.cfg
define serviceescalation{
host_name host1, host2
service_description HTTP
first_notification 3
last_notification 100
notification_interval 86400
contact_groups nagios
}


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.