Implantation

Ce tutoriel développe la mise en place du logiciel de supervision Nagios. Nous allons surveiller les hôtes de la zone LOC et DMZ, toujours basé sur l'implantation du Site.


Installation des packages

apache2
nagios-logopack-1.0-2plf
nagios-plugins-1.4.0-0.20040930.1mdk
nagios-www-2.0a1-0.20041002.2mdk
nagios-2.0a1-0.20041002.2mdk



apache2
nagios-common_1.3-cvs.20050402-2_all.deb
nagios-plugins_1.4-3_i386.deb
nagios-text_1.3-cvs.20050402-2_i386.deb
nagios-logopack_1.0-3_all.deb
(créez un package .deb à partir du .rpm donné sur PLF :
srv11:~# alien -d nagios-logopack-1.0-2plf
srv11:~# ln -s /usr/share/nagios/images/logos/* /usr/share/nagios/htdocs/images/logos)



Configuration de Nagios

Tout les fichiers de configuration se trouvent dans :

/etc/nagios/

/etc/nagios/ et /etc/nagios-plugins/config/


Editez le fichier de configuration principal de Nagios
/etc/nagios/nagios.cfg pour changer la variable suivante :
...
# DATE FORMAT OPTION
# This option determines how short dates are displayed. Valid options
# include:
#    us             (MM-DD-YYYY HH:MM:SS)
#    euro           (DD-MM-YYYY HH:MM:SS)
#    iso8601        (YYYY-MM-DD HH:MM:SS)
#    strict-iso8601 (YYYY-MM-DDTHH:MM:SS)
#
date_format=euro
...



Adaptez les paramètres suivants dans le fichier
/etc/nagios/cgi.cfg :

...
# Ajouter la ligne suivante, elle sera expliquée plus bas :
xedtemplate_config_file=/etc/nagios/hostextinfo.cfg
...

# AUTHENTICATION USAGE
# Demande à Nagios d'authentifier les visiteurs.
use_authentication=1

# DEFAULT USER
# Cette variable doit être commentée, sinon tout le monde peut se connecter
# sans mot de passe.

#default_user_name=guest

# SYSTEM/PROCESS INFORMATION ACCESS
# Permet à l'utilisateur "nagiosadmin" d'exécuter le fichier extinfo.cgi.
# Par défaut, personne ne peut visualiser ces informations sur le système.
# Pour ajouter un utilisateur,
créez son compte et saisissez :
# authorized_for_system_information=nagiosadmin,arnofear

authorized_for_system_information=nagiosadmin

# CONFIGURATION INFORMATION ACCESS
# Permet de regarder les différentes informations sur les machines,
# les services, les groupes, les commandes... Ces informations doivent être
# visibles par tous, il est possible de positionner ces variables comme ceci
# pour simplifier la gestion des droits d'accès :
# authorized_for_configuration_information=*

authorized_for_configuration_information=nagiosadmin

# SYSTEM/PROCESS COMMAND ACCESS
# Permet de lancer diverses commandes systèmes et de processus pour Nagios.
# Cet accès est donc privilégié.

authorized_for_system_commands=nagiosadmin

# GLOBAL HOST/SERVICE VIEW ACCESS
# Donne accès aux informations sur les états, les services et les machines
# supervisées. Cet accès doit être sans limite. Il est possible de
# positionner ces variables comme ceci pour simplifier la gestion :
# authorized_for_all_services=*
# authorized_for_all_hosts=*

authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin

# GLOBAL HOST/SERVICE COMMAND ACCESS
# Donne accès à des envois de commandes à tous les services, et à toutes
# les machines. Cet accès doit être restreint.

authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
...


Configuration d'Apache pour Nagios
Pour accéder à l'interface web de Nagios vous devez créer (ou ajouter) un compte administrateur ou utilisateur pour éviter d'utiliser le compte par défaut "guest".

[root@srv11 user]# htpasswd /etc/nagios/passwd nagiosadmin
New password:
Re-type new password:
Adding password for user nagiosadmin

Puis modifiez le fichier
/etc/nagios/group :
nagios: nagiosadmin

srv11:/home/user# htpasswd /etc/nagios/htpasswd.users visitor








Définitions des hôtes
Un hôte peut être un serveur, une station de travail, un périphérique, ou un équipement présent sur votre réseau.

Editez le fichier /etc/nagios/hosts.cfg pour déclarer tout vos hôtes :


#######################################
# HOST DEFINITIONS
# SYNTAX:
#######################################

# Déclaration d'un modèle d'hôte générique qui sera utilisé plusieurs fois.
# Vous pouvez en créer d'autres selon vos besoins.

define host{
; Nom de ce modèle d'hôte.
     name                         generic-host
; Active les alertes.
     notifications_enabled        1
; Active le gestionnaire d'évènements.
     event_handler_enabled        1
; Active la détection de changement d'états.
     flap_detection_enabled       1
; Process performance data
     process_perf_data            1
; Retain status information across program restarts
     retain_status_information    1
; Retain non-status information across program restarts
     retain_nonstatus_information 1
; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
     register                     0
}


# Déclaration de l'hôte switch1
define host{
; On utilise les paramètres de l'hôte générique.
     use                   generic-host
; Nom de l'hôte.
     host_name             switch1
; Description de l'hôte.
     alias                 Switch Cisco LOC
; Son IP.
     address               192.168.0.253
; La commande à utiliser pour le surveiller.
; La liste des commandes possible dépend des plugins installés.
; Elle se trouve en partie dans le fichier checkcommands.cfg
     check_command         check-host-alive
; C'est le nombre de fois que Nagios relancera la commande de contrôle
; si celle-ci retourne un état différent de OK.
; Positionner cette valeur à 1 fera que Nagios générera une alerte sans
; re-contrôler l'hôte.
     max_check_attempts    10
; C'est l'intervalle écoulé en minute avant d'alerter un contact quand l'hôte
; est toujours hors service ou inaccessible. Si vous mettez cette valeur
; à 0, Nagios n'alertera pas les contacts pour cet hôte, une seule
; notification sera émise.
     notification_interval 60
; C'est la période durant laquelle les notifications d'évènements,
; concernant cet hôte, peuvent être émises vers les contacts. (24hx7j)
; Si un hôte est hors service, inaccessible ou se rétablit en dehors
; de la période de notification, aucune notification ne sera envoyée.
     notification_period   24x7
; Définit quand les avertissements pour cet hôte doivent être envoyés.
; Les options valides sont les suivantes :
; d = envoi de la notification pour un état DOWN
; u = envoi de la notification pour un état UNREACHABLE
; r = envoi de la notification pour le retour à la normale (état OK).
; n = (none) aucune notification ne sera envoyée.
     notification_options  d,u,r
# Pour la version 2.x de Nagios il faut ajouter la liste des contacts par hôte.
#     contact_groups        equipements-admins,linux-admins
}

# Déclaration de l'hôte srv1.alex.fr
define host{
; On utilise les paramètres de l'hôte générique.
     use                   generic-host
; Son hostname ou FQDN.
     host_name             srv1.alex.fr
; Description de l'hôte.
     alias                 Serveur DNS primaire
; Son IP.
     address               192.168.0.1
; Ce serveur est connecté au Switch1. Il a donc pour parent celui-ci.
     parents               switch1

     check_command         check_dns
     max_check_attempts    10
     notification_interval 60
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        linux-admins
}

# Déclaration de l'hôte srv5.alex.fr
define host{
; On utilise les paramètres de l'hôte générique.
     use                   generic-host

     host_name             srv5.alex.fr
     alias                 Serveur DNS secondaire et Intranet
     address               192.168.0.5
     parents               switch1
; Nous allons surveiller les services DNS et HTTP.
; Nous indiquons ici une seule des commandes, car les commandes qui nous
; intéressent seront données dans le fichier services.cfg
plus bas.
     check_command         check_dns
     max_check_attempts    10
     notification_interval 60
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        linux-admins
}

# Déclaration de l'hôte srv2.alex.fr
define host{
     use                   generic-host

     host_name             srv2.alex.fr
     alias                 Serveur OpenLDAP primaire
     address               192.168.0.2
     parents               switch1
; Nous allons surveiller les services LDAP et SMB.
     check_command         check_ldap
     max_check_attempts    10
     notification_interval 60
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        linux-admins
}

# Déclaration de l'hôte srv6.alex.fr
define host{
     use                   generic-host

     host_name             srv6.alex.fr
     alias                 Serveur OpenLDAP secondaire
     address               192.168.0.6
     parents               switch1
; Nous allons surveiller les services LDAP et SMB.
     check_command         check_ldap
     max_check_attempts    10
     notification_interval 60
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        linux-admins
}

# Déclaration de l'hôte srv12.alex.fr
define host{
     use                   generic-host

     host_name             srv12.alex.fr
     alias                 Serveur fichiers primaire
     address               192.168.0.12
     parents               switch1
; Nous allons surveiller les services SMB, NFS et usage disque dur par SNMP.
     check_command         check_disk_smb
     max_check_attempts    10
     notification_interval 480
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        linux-admins
}

# Déclaration de l'hôte srv7.alex.fr
define host{
     use                   generic-host

     host_name             srv7.alex.fr
     alias                 Serveur impression
     address               192.168.0.7
     parents               switch1
; Nous allons surveiller le service CUPS.
     check_command         check_tcp
     max_check_attempts    10
     notification_interval 60
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        linux-admins
}

# Déclaration de l'hôte printer1
define host{
     use                   generic-host

     host_name             printer1
     alias                 Imprimante HP 1
     address               192.168.0.18
     parents               switch1

     check_command         check_hpjd
     max_check_attempts    10
     notification_interval 60
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        printer-admins,equipements-admins,linux-admins
}

# Déclaration de l'hôte fw2.alex.fr
define host{
     use                   generic-host

     host_name             fw2.alex.fr
     alias                 Routeur firewall 2
     address               192.168.0.8
     parents               switch1
; Nous allons surveiller la connexion TCP.
     check_command         check_tcp
     max_check_attempts    10
     notification_interval 60
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        linux-admins
}

# Déclaration de l'hôte switch2
define host{
     use                   generic-host

     host_name             switch2
     alias                 Switch Cisco DMZ
     address               192.168.1.200
; Ce switch se trouve derrière le FW2. Il est donc enfant de celui-ci.
     parents               fw2.alex.fr

     check_command         check-host-alive
     max_check_attempts    10
     notification_interval 60
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        equipements-admins,linux-admins
}

# Déclaration de l'hôte srv3.dmz.alex.fr
define host{
     use                   generic-host

     host_name             srv3.dmz.alex.fr
     alias                 Serveur SMTP et POP3
     address               192.168.1.3
; Ce serveur se trouve derrière le switch2. Il est donc enfant de celui-ci.
     parents               switch2
; Nous allons surveiller les services SMTP et POP3.
     check_command         check_smtp
     max_check_attempts    10
     notification_interval 60
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        linux-admins
}

# Déclaration de l'hôte srv9.dmz.alex.fr
define host{
     use                   generic-host

     host_name             srv9.dmz.alex.fr
     alias                 Serveur de sauvegarde DMZ
     address               192.168.1.2
     parents               switch2
; Nous allons surveiller l'espace disque par SNMP.
     check_command         snmp_disk
     max_check_attempts    10
     notification_interval 480
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        linux-admins
}

# Déclaration de l'hôte srv4.dmz.alex.fr
define host{
     use                   generic-host

     host_name             srv4.dmz.alex.fr
     alias                 Serveur Proxy DMZ
     address               192.168.1.4
     parents               switch2
; Nous allons surveiller le service HTTP à travers le Proxy.
     check_command         check_squid
     max_check_attempts    10
     notification_interval 480
     notification_period   24x7
     notification_options  d,u,r
#     contact_groups        linux-admins
}


Définitions des services
Le terme "service" peut s'appliquer à un service tel que POP, SMTP, HTTP... ou bien tout autre type de mesure associé à l'hôte (temps de réponse à un ping, nombre d'utilisateurs connectés, utilisation des disques).

Editez le fichier /etc/nagios/services.cfg :


#######################################
# SERVICE DEFINITIONS
# SYNTAX:
#######################################

# Déclaration d'un modèle de service générique qui sera utilisé plusieurs fois.
define service{
     name                         generic-service
; Active la vérification des services actifs.
     active_checks_enabled        1
; Active la vérification des services passifs.
     passive_checks_enabled       1
; Il est conseillé de laisser activé ce paramètre pour des raisons de performance.
     parallelize_check            1
; We should obsess over this service (if necessary)
     obsess_over_service          1
; Déactive le contrôle de validité des données.
     check_freshness              0
; Active le service d'avertissements.
     notifications_enabled        1
; Active le gestionnaire d'évènements.
     event_handler_enabled        1
; Active la détection de changement d'états.
     flap_detection_enabled       1
; Process performance data
     process_perf_data            1
; Retain status information across program restarts
     retain_status_information    1
; Retain non-status information across program restarts
     retain_nonstatus_information 1
; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
     register                     0
}


# Déclaration du service à surveiller pour l'hôte switch1
define service{

; On utilise les paramètres du service générique.
     use                   generic-service
; Nom de l'hôte.
     host_name             switch1
; Description du service à surveiller.
     service_description   Ping du switch LOC
; Si le service à surveiller n'est pas important mettre à 1.
     is_volatile           0
; C'est la période durant laquelle les vérifications actives de ce service
; peuvent être faites (24hx7j). Voir le fichier timeperiods.cfg
     check_period          24x7
; C'est le nombre de fois que Nagios relancera la commande de contrôle du
; service si celle-ci retourne un état différent de OK.
; Positionner cette valeur à 1 fera que Nagios générera une alerte sans
; re-contrôler ce service.
     max_check_attempts    3
; C'est l'intervalle écoulé en minute entre chaque vérifications standards.
     normal_check_interval 5
; Pareil que l'option précédente mais pour une autre tentative.
     retry_check_interval  1
; Indique le nom du groupe à contacter en cas de problèmes.
     contact_groups        equipements-admins
; C'est l'intervalle écoulé en minute avant d'alerter un contact quand le
; service ne répond plus ou est inaccessible. Si vous mettez cette valeur
; à 0, Nagios n'alertera pas les contacts pour ce service, une seule
; notification sera émise.
     notification_interval 240
; C'est la période durant laquelle le gestionnaire d'évènements peut
; envoyer des avertissements.
     notification_period   24x7
; Définit quand les avertissements pour ce service doivent être envoyés.
; Les options valides sont les suivantes :

; w = envoi de la notification pour un état WARNING

; u = envoi de la notification pour un état UNKNOWN

; c = envoi de la notification pour un état CRITICAL
; r = envoi de la notification pour un retour à la normale (état OK).

; n = (none) aucune notification ne sera envoyée.
     notification_options  c,r
; La commande à utiliser pour le surveiller.
; La liste des commandes possible dépend des plugins installés.
; Voir le chapitre "
Définition des commandes" pour plus de détails.
     check_command         check_ping!100.0,20%!500.0,60%
}

# Déclaration du service à surveiller pour l'hôte srv1.alex.fr
define service{

; On utilise les paramètres du service générique.
     use                   generic-service
; Son hostname ou FQDN.
     host_name             srv1.alex.fr
; Description du service à surveiller.
     service_description   Requetes DNS
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_dns
}

# Déclaration n°1 du service à surveiller pour l'hôte srv5.alex.fr
define service{
     use                   generic-service

     host_name             srv5.alex.fr
     service_description   Requetes DNS
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_dns
}

# Déclaration n°2 du service à surveiller pour l'hôte srv5.alex.fr
define service{
     use                   generic-service

     host_name             srv5.alex.fr
     service_description   Requetes HTTP
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_http
}

# Déclaration n°1 du service à surveiller pour l'hôte srv2.alex.fr
define service{
     use                   generic-service

     host_name             srv2.alex.fr
     service_description   Connexions LDAP
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 3
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
; Les arguments de la commande sont séparés par des points d'exclamation.
     check_command         check_ldap!dc=alex,dc=fr!389
}

# Déclaration n°2 du service à surveiller pour l'hôte srv2.alex.fr
define service{
     use                   generic-service

     host_name             srv2.alex.fr
     service_description   Connexions TCP SMB
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 3
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_tcp!139
}

# Déclaration n°1 du service à surveiller pour l'hôte srv6.alex.fr
define service{
     use                   generic-service

     host_name             srv6.alex.fr
     service_description   Connexions LDAP
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 3
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_ldap!dc=alex,dc=fr!389
}

# Déclaration n°2 du service à surveiller pour l'hôte srv6.alex.fr
define service{
     use                   generic-service

     host_name             srv6.alex.fr
     service_description   Connexions TCP SMB
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 3
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_tcp!139
}

# Déclaration n°1 du service à surveiller pour l'hôte srv12.alex.fr
define service{
     use                   generic-service

     host_name             srv12.alex.fr
     service_description   Connexions sur un volume SMB
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 240
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_disk_smb!pdc-linux!arnofear!arnofear!passwd
}

# Déclaration n°2 du service à surveiller pour l'hôte srv12.alex.fr
define service{
     use                   generic-service

     host_name             srv12.alex.fr
     service_description   Connexions NFS
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 240
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check-nfs
}

# Déclaration n°3 du service à surveiller pour l'hôte srv12.alex.fr
define service{
     use                   generic-service

     host_name             srv12.alex.fr
     service_description   Usage Disque dur par SNMP
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 240
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         snmp_disk!public!1!1!40!45!46!100!
}

# Déclaration n°4 du service à surveiller pour l'hôte srv12.alex.fr
define service{
     use                   generic-service

     host_name             srv12.alex.fr
     service_description   Charge CPU par SNMP
     is_volatile           0
; Vérification de ce service pendant les heures travaillées.
; Voir le fichier timeperiods.cfg
     check_period          workhours
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   workhours
     notification_options  w,u,c,r
     check_command         snmp_cpustats!public
}

# Déclaration n°5 du service à surveiller pour l'hôte srv12.alex.fr
define service{
     use                   generic-service

     host_name             srv12.alex.fr
     service_description   Utilisation RAM par SNMP
     is_volatile           0
     check_period          workhours
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   workhours
     notification_options  w,u,c,r
     check_command         snmp_mem!public!50000!90000
}

# Déclaration n°1 du service à surveiller pour l'hôte srv7.alex.fr
define service{
     use                   generic-service

     host_name             srv7.alex.fr
     service_description   Connexions CUPS
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 3
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_tcp!631
}

# Déclaration du service à surveiller pour l'hôte printer1
define service{
     use                   generic-service

     host_name             printer1
     service_description   Connexion imprimante HP 1
     is_volatile           0
     check_period          workhours
     max_check_attempts    4
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        printer-admins
     notification_interval 960
     notification_period   workhours
     notification_options  c,r
     check_command         check_hpjd
}

# Déclaration du service à surveiller pour l'hôte fw2.alex.fr
define service{
     use                   generic-service

     host_name             fw2.alex.fr
     service_description   Requetes TCP
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 240
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_tcp!22
}

# Déclaration du service à surveiller pour l'hôte switch2
define service{
     use                   generic-service

     host_name             switch2
     service_description   Ping du switch DMZ
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        equipements-admins
     notification_interval 240
     notification_period   24x7
     notification_options  c,r
     check_command         check_ping!100.0,20%!500.0,60%
}

# Déclaration n°1 du service à surveiller pour l'hôte srv3.dmz.alex.fr
define service{
     use                   generic-service

     host_name             srv3.dmz.alex.fr
     service_description   Connexions SMTP
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 3
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_smtp
}

# Déclaration n°2 du service à surveiller pour l'hôte srv3.dmz.alex.fr
define service{
     use                   generic-service

     host_name             srv3.dmz.alex.fr
     service_description   Connexions POP3
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
     check_command         check_pop
}

# Déclaration du service à surveiller pour l'hôte srv4.dmz.alex.fr
define service{
     use                   generic-service

     host_name             srv4.dmz.alex.fr
     service_description   Connexions Proxy DMZ
     is_volatile           0
     check_period          24x7
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   24x7
     notification_options  w,u,c,r
; J'interroge le serveur HTTP de la DMZ en passant par le Proxy avec une URL
; contenant /cgi-bin/ pour ne pas recevoir une réponse du cache mais
; bien du serveur Apache.
     check_command         check_squid!3128!http://www.alex.fr/cgi-bin/stats.pl
}

# Déclaration du service à surveiller pour l'hôte srv9.dmz.alex.fr
define service{
     use                   generic-service

     host_name             srv9.dmz.alex.fr
     service_description   Usage Disque dur par SNMP
     is_volatile           0
; Vérification de ce service pendant les heures non travaillées.
     check_period          nonworkhours
     max_check_attempts    3
     normal_check_interval 5
     retry_check_interval  1
     contact_groups        linux-admins
     notification_interval 120
     notification_period   nonworkhours
     notification_options  w,u,c,r
     check_command         snmp_disk!public!1!1!40!45!46!100!
}



Définitions des contacts
Une définition de contact s'applique à la personne physique, qui doit être contactée en cas de problèmes sur le réseau.

Editez le fichier /etc/nagios/contacts.cfg :

#######################################
# CONTACT DEFINITIONS
# don't forget to make sure these point to a real person/alias!
#######################################

# 'nagios' contact definition

define contact{
; Définit les paramètres du contact nagios.
     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,notify-by-epager
; Envoi par mail des alertes concernant les services.
     service_notification_commands notify-by-email
#
     host_notification_commands    host-notify-by-email,notify-by-epager
; Envoi par mail des alertes concernant les commandes.
     host_notification_commands    host-notify-by-email
     email                         arnofear@alex.fr
#
     pager                         pagerarnofear@alex.fr
}


Définitions des groupes d'hôtes
Les groupes d'hôtes permettent de regrouper un ou plusieurs hôtes pour simplifier les notifications. Chaque hôte que vous définissez doit être membre d'au moins un groupe d'hôtes; même si c'est le seul hôte du groupe. Un hôte peut faire partie de plusieurs groupes. Quand un hôte est hors service, inaccessible, ou se rétablit, Nagios recherche les groupes dont cet hôte fait partie, en extrait chaque groupe de contacts, et avertit tous les contacts associés à ces groupes de contacts.

Editez le fichier /etc/nagios/hostgroups.cfg :

#######################################
# HOST GROUP DEFINITIONS
# SYNTAX:
#######################################

# Définition du groupe d'hôtes 'linux-boxes'.
define hostgroup{
     hostgroup_name linux-boxes
     alias           Linux Servers
# Pour la version 2.x de Nagios il ne faut pas mettre la ligne contact_groups
     contact_groups  linux-admins
; Liste des hôtes membres de ce groupe.
     members         srv1.alex.fr, srv2.alex.fr, srv5.alex.fr, srv6.alex.fr, srv7.alex.fr, srv12.alex.fr, srv3.dmz.alex.fr, srv4.dmz.alex.fr, srv9.dmz.alex.fr, fw2.alex.fr
}

# Définition du groupe d'hôtes 'printers'.
define hostgroup{
     hostgroup_name printers
     alias          Printers
# Pour la version 2.x de Nagios il ne faut pas mettre la ligne contact_groups
; Groupes à contacter.
     contact_groups printer-admins,equipements-admins,linux-admins
     members        printer1
}

# Définition du groupe d'hôtes 'equipements'.
define hostgroup{
     hostgroup_name equipements
     alias          Equipements
# Pour la version 2.x de Nagios il ne faut pas mettre la ligne contact_groups
     contact_groups equipements-admins,linux-admins
     members        switch1, switch2
}


Définitions du contact par groupes

Editez le fichier /etc/nagios/contactgroups.cfg :

#######################################
# CONTACT GROUP DEFINITIONS
# SYNTAX:
#######################################

# 'linux-admins' contact group definition
define contactgroup{
     contactgroup_name linux-admins
     alias             Linux Administrators
     members           nagios
}

# 'printer-admins' contact group definition
define contactgroup{
     contactgroup_name printer-admins
     alias             Printer Administrators
     members           nagios
}

# 'equipements-admins' contact group definition
define contactgroup{
     contactgroup_name equipements-admins
     alias             Equipements Administrators
     members           nagios
}


Définitions des commandes
Les commandes peuvent être des contrôles ou notifications de service et d'hôtes. Les commandes peuvent contenir des macros, mais vous devez vous assurer de n'utiliser que des macros "valides" dans le contexte de la commande.
Les commandes utilisent les scripts et les binaires fournit dans le package plugins de Nagios. Vous pouvez créer vos propres scripts si vous ne trouvez pas de plugin adaptez à vos besoins.

Pour connaître la syntaxe d'un plugin, il suffit de lui passer l'option -h :
srv11:/home/user# /usr/lib/nagios/plugins/check_http -h
...
Usage: check_http -H <vhost> | -I <IP-address> [-u <uri>] [-p <port>]
[-w <warn time>] [-c <critical time>] [-t <timeout>] [-L]
[-a auth] [-f <ok | warn | critcal | follow>] [-e <expect>]
[-s string] [-l] [-r <regex> | -R <case-insensitive regex>]
[-P string] [-m <min_pg_size>:<max_pg_size>] [-4|-6] [-N]
[-M <age>] [-A string] [-k string]
...

Editez le fichier /etc/nagios/checkcommands.cfg :

# La commande 'check_disk_smb' n'existe pas par défaut, mais le plugin est
# présent dans /usr/lib/nagios/plugins/
# Il suffit de donner un nom à la commande et de saisir les options en
# rapport avec le plugin. On récupère les données passées dans le fichier
# services.cfg dans des variables de type $ARG1$
define command{
     command_name check_disk_smb
     command_line /usr/lib/nagios/plugins/check_disk_smb -H $ARG1$ -s $ARG2$ -u $ARG3$ -p $ARG4$
}

Sous Mandrake il n'y a pas beaucoup de commandes deja écrites. Vous pouvez vérifier celles qui vous manque, par rapport à votre configuration, en testant Nagios :
[root@srv11 user]# /etc/init.d/nagios configtest

Par rapport à mon exemple, il va vous manquez les commandes suivantes :
# 'snmp_cpustats' command definition
define command{
     command_name snmp_cpustats
     command_line /usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.2021.11.9.0,.1.3.6.1.4.1.2021.11.10.0,.1.3.6.1.4.1.2021.11.11.0 -l 'CPU usage (user system idle)' -u '%'
}
# 'snmp_disk' command definition
define command{
     command_name snmp_disk
     command_line /usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.2021.9.1.7.$ARG2$,.1.3.6.1.4.1.2021.9.1.9.$ARG3$ -w $ARG4$:,:$ARG5$ -c $ARG6$:,:$ARG7$ -u 'kB free (','% used)' -l 'disk space'
}
# 'snmp_mem' command definition
define command{
     command_name snmp_mem
     command_line /usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.2021.4.6.0,.1.3.6.1.4.1.2021.4.5.0 -w $ARG2$: -c $ARG3$:
}
# 'check-nfs' command definition
define command{
     command_name check-nfs
     command_line /usr/lib/nagios/plugins/check_rpc -H $HOSTADDRESS$ -C nfs -c2,3
}
# 'check_ldap' command definition
define command{
     command_name check_ldap
     command_line /usr/lib/nagios/plugins/check_ldap -H $HOSTADDRESS$ -b $ARG1$ -p $ARG2$
}
# 'check_squid' command definition
define command{
     command_name check_squid
#     command_line /usr/lib/nagios/plugins/check_http -H $HOSTADDRESS$ -p $ARG1$ -u $ARG2$ -e 'HTTP/1.0 200 OK'
     command_line /usr/lib/nagios/plugins/check_http -H $HOSTADDRESS$ -p $ARG1$ -u $ARG2$
}


Définitions des dépendances de service
Les dépendances de service sont une fonctionnalité avancée de Nagios qui permet de supprimer des notifications et des contrôles actifs, à partir de l'état d'un ou plusieurs services. Elles sont optionnelles et sont principalement destinées aux utilisateurs avertis qui ont des configurations de supervisions complexes. (
/etc/nagios/dependencies.cfg).


Définitions de l'escalade des services
La définition de l'escalade pour un service est complètement optionnelle, elle est utilisée pour notifier un ou plusieurs contacts différents de la 1ere notification. (
/etc/nagios/escalations.cfg).


Définitions des informations sur les hôtes
Ce fichier est optionnel mais apporte des icônes et des informations sur les machines.

Cré
ez le fichier /etc/nagios/hostextinfo.cfg :


define hostextinfo {
host_name       srv1.alex.fr
icon_image      mandrake.png
vrml_image      mandrake.png
statusmap_image mandrake.png
}

define hostextinfo {
host_name       srv2.alex.fr
icon_image      linux40.png
vrml_image      linux40.png
statusmap_image linux40.png
}

define hostextinfo {
host_name       srv5.alex.fr
icon_image      debian.png
vrml_image      debian.png
statusmap_image debian.png
notes_url       http://192.168.0.5
}

define hostextinfo {
host_name       srv6.alex.fr
icon_image      linux40.png
vrml_image      linux40.png
statusmap_image linux40.png
}

define hostextinfo {
host_name       srv7.alex.fr
icon_image      linux40.png
vrml_image      linux40.png
statusmap_image linux40.png
}

define hostextinfo {
host_name       srv12.alex.fr
icon_image      debian.png
vrml_image      debian.png
statusmap_image debian.png
}

define hostextinfo {
host_name       printer1
icon_image      HPlj4550p.png
vrml_image      HPlj4550p.png
statusmap_image HPlj4550p.png
}

define hostextinfo {
host_name       fw2.alex.fr
icon_image      debian.png
vrml_image      debian.png
statusmap_image debian.png
}

define hostextinfo {
host_name       switch1
icon_image      switch40.png
vrml_image      switch40.png
statusmap_image switch40.png
icon_image_alt  Switch LOC
}

define hostextinfo {
host_name       switch2
icon_image      switch40.png
vrml_image      switch40.png
statusmap_image switch40.png
icon_image_alt  Switch DMZ
}

define hostextinfo {
host_name       srv3.dmz.alex.fr
icon_image      mandrake.png
vrml_image      mandrake.png
statusmap_image mandrake.png
}

define hostextinfo {
host_name       srv4.dmz.alex.fr
icon_image      debian.png
vrml_image      debian.png
statusmap_image debian.png
}

define hostextinfo {
host_name       srv9.dmz.alex.fr
icon_image      debian.png
vrml_image      debian.png
statusmap_image debian.png
}


Interface web de Nagios

Vous pouvez vérifier la synthax de la configuration de Nagios avant de lancer le daemon :
[root@srv11 user]# /etc/init.d/nagios configtest

Une fois validé, démarrez Nagios :
[root@srv11 user]# /etc/init.d/nagios start

srv11:/home/user# /etc/init.d/nagios start







Tapez dans votre navigateur l'adresse :

https://srv11.alex.fr/admin/nagios/

http://srv11.alex.fr/nagios/ ou https://srv11.alex.fr/nagios/


Le menu Tactical Overview :
C'est la vue synthétique où l'on trouve l'essentiel des informations importantes sur le bon fonctionnement du système supervisé.

Le menu Service Detail :
Liste des équipements par ordre alphabétique avec leurs services supervisés.

Le menu Host Detail :
Cette page résume l'état global des machines de votre réseau, avec leurs états (ACTIF, EN PANNE ...).

Le menu Status Overview :
Cette page affiche tous les hôtes par groupes, cela permet une vue rapide sur un sous-ensemble de votre parc.

Le menu Status Map :
Cette page représente l'implantation de vos hôtes sous plusieurs formes graphiques. Vous avez un aprecu de la topologie de vos hôtes en 2D ou en 3D pour le fun (installez un plugin VRML).


Le menu Scheduling Queue :
Cette page liste les services qui vont être testés prochainement. C'est ici que vous pouvez demander le test d'un service manuellement (l'icone montre au poignet), suite à une modification de votre configuration par exemple.



Configuration d'un agent SNMP

Si vous souhaitez connaître l'espace disque, l'état des différentes ressources et bien d'autres informations encore sur des machines distantes depuis le superviseur Nagios, il faut que vous installiez un agent SNMP. (vous pouvez utiliser des agents Nagios à la place : NRPE et NSCA mais cela revient à installer autant de superviseurs Nagios que d'hôtes à intérroger !)

net-snmp-mibs-5.1.2-6mdk
libnet-snmp5-5.1.2-6mdk
net-snmp-5.1.2-6mdk
net-snmp-utils-5.1.2-6mdk

snmpd_5.1.2-6.1_i386.deb
snmp_5.1.2-6.1_i386.deb
libsnmp-base_5.1.2-6.1_all.deb
libsnmp5_5.1.2-6.1_i386.deb


Configurez /etc/snmp/snmpd.conf :

#
# PLEASE: read the snmpd.conf(5) manual page as well!
#
#######################################
# Access Control
#######################################
#
# First, map the community name (COMMUNITY) into a security name:
#        Security name  Source          Community
com2sec  local          localhost       private
com2sec  mynetwork      192.168.0.0/16  public

# Second, map the security names into group names:
#     Security model   Security name
group MyROSystem v1    local
group MyROSystem v2c   local
group MyROSystem usm   local
group MyRWGroup  v1    local
group MyRWGroup  v2c   local
group MyRWGroup  usm   local
group MyROGroup  v1    mynetwork
group MyROGroup  v2c   mynetwork
group MyROGroup  usm   mynetwork

# Third, create a view for us to let the groups have rights to:
#           incl/excl subtree                                 mask
view all    included  .1                                      80
view system included  .iso.org.dod.internet.mgmt.mib-2.system

# Finally, grant the 2 groups access to the 1 view with different
# write permissions:
#                 context sec.model sec.level match  read   write notif
access MyROSystem ""      any       noauth    exact  system none  none
access MyROGroup  ""      any       noauth    exact  all    none  none
access MyRWGroup  ""      any       noauth    exact  all    all   none

#######################################
# System contact information
#######################################

syslocation Alex, France
syscontact Root <root@alex.fr>

# Example output of snmpwalk:
# snmpwalk -v 1 -c public 192.168.1.2 system


#######################################
# Process checks.
#######################################
# The following are examples of how to use the agent to check for
# processes running on the host. The syntax looks something like:
#
# proc NAME [MAX=0] [MIN=0]
#
# NAME: the name of the process to check for. It must match
# exactly (ie, http will not find httpd processes).
# MAX: the maximum number allowed to be running. Defaults to 0.
# MIN: the minimum number to be running. Defaults to 0.

#
# Examples:
#
# Make sure mountd is running
#proc mountd

# Make sure at least one sendmail, but less than or equal to 10 are running.
#proc sendmail 10 1

# A snmpwalk of the prTable would look something like this:
# snmpwalk -v 1 -c public 192.168.1.2 .1.3.6.1.4.1.2021.2

#######################################
# Executables/scripts
#######################################
#
# You can also have programs run by the agent that return a single
# line of output and an exit code. Here are two examples.
#
# exec NAME PROGRAM [ARGS ...]
#
# NAME: A generic name.
# PROGRAM: The program to run. Include the path!
# ARGS: optional arguments to be passed to the program

# a simple hello world
#exec echotest /bin/echo hello world

# Run a shell script containing:
#
# #!/bin/sh
# echo hello world
# echo hi there
# exit 35
#
# Note: this has been specifically commented out to prevent
# accidental security holes due to someone else on your system writing
# a /tmp/shtest before you do. Uncomment to use it.
#
#exec shelltest /bin/sh /tmp/shtest

# Example output of snmpwalk:
# snmpwalk -v 1 -c public 192.168.1.2 .1.3.6.1.4.1.2021.8

#######################################
# disk checks
#######################################
#
# The agent can check the amount of available disk space, and make
# sure it is above a set limit.

# disk PATH [MIN=DEFDISKMINIMUMSPACE]
#
# PATH: mount path to the disk in question.
# MIN: Disks with space below this value will have the Mib's errorFlag set.
# Default value = DEFDISKMINIMUMSPACE.

# Check the / partition and make sure it contains at least 10 megs.

disk / 10000

# Example output of snmpwalk:
# snmpwalk -v 1 -c public 192.168.1.2 .1.3.6.1.4.1.2021.9

#######################################
# load average checks
#######################################
#
# load [1MAX=DEFMAXLOADAVE] [5MAX=DEFMAXLOADAVE] [15MAX=DEFMAXLOADAVE]
#
# 1MAX: If the 1 minute load average is above this limit at query
# time, the errorFlag will be set.
# 5MAX: Similar, but for 5 min average.
# 15MAX: Similar, but for 15 min average.

# Check for loads:
load 12 14 14

# Example output of snmpwalk:
# snmpwalk -v 1 -c public 192.168.1.2 .1.3.6.1.4.1.2021.10




Source : http://archil.nerim.net/nagios/index.html


Dernière modification : 30/06/05

 

Copyright © 04/02/2004, Arnofear

Contrat Creative Commons Ce document est publié sous licence Creative Commons
Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique :
http://creativecommons.org/licenses/by-nc-sa/3.0/deed.fr