Note: Nagios n'est pas destiné, ni écrit pour être un remplaçant "point pour point" d'applications natives SNMP , comme HP OpenView or OpenNMS [Anglais]. Cependant, vous pouvez le configurer de manière à ce que les interruptions SNMP reçues par un hôte génèrent des alertes dans Nagios. Voici comment ...
Introduction
Cet exemple explique comment générer facilement des alertes dans Nagios à partir des interruptions reçues par le daemon UCD-SNMP [Anglais] . Ces explications supposent que l'hôte qui reçoit les interruptions n'est pas le même que celui qui fait tourner Nagios. Si ce n'est pas le cas, vous devrez faire quelques mofidications aux exemples fournis. Je suppose également que vous avez installé le daemon nsca sur l'hôte chargé de la surveillance et le client nsca sur la machine qui reçoit les interruptions SNMP.
Dans cet exemple, je vais décrire comment j'ai configuré Nagios pour générer des alertes à partir d'interruptions SNMP reçues par un serveur de sauvegarde ArcServe, sur un serveur Novell. Je voulais être averti de l'échec de sauvegarde et cela a plutot bien fonctionné. Vous pourrez être obligé d'ajuster ces exemples à vos besoins.
Definition du service.
Tout d'abord, il faut définir un service dans le fichier de configuration des objets pour les interruptions SNMP.( dans cet exemple, pour un serveur de sauvegarde ArcServe). En supposant que cet hôte s'appelle novellserver, un exemple de définition pourrait être :
define service{ host_name novellserver service_description ArcServe Backup is_volatile 1 active_checks_enabled 0 passive_checks_enabled 1 max_check_attempts 1 contact_groups novell-backup-admins notification_interval 120 notification_period 24x7 notification_options w,u,c,r check_command check_none }
Il est important de noter que l'option volatile est activée, parce que nous voulons être notifié pour CHAQUE alerte survenant. Notez également que les contrôles actifs sont désactivés pour ce service, alors que les contrôles passifs sont activés. Ceci signifie que ce service ne sera jamais contrôlé activement puisque toutes les alertes seront envoyées passivement par le client nsca depuis la machine d'administration SNMP (appellée firestorm dans mon exemple).
Configuration ArcServe et Novell SNMP
Pour qu' ArcServe (et le serveur Novell ) envoient des interruptions SNMP à la machine d'adminsitration, il faut :
Configuration de l'hôte d'administration SNMP
Sur ma machine linux d'administartion SNMP (firestorm), j'ai installé le logiciel UCD-SNMP [Anglais] (NET-SNMP) . Une fois cela fait, j'ai du :
Pour que le daemon snmptrapd envoie les interruptions liées à ArcServe à l'hôte Nagios, il faut défnir un gestionnaire d'interruptions dans le fichier /etc/snmp/snmptrapd.conf file. Dans ma configuration, il ressemblait à ceci:
############################# # ArcServe SNMP Traps ############################# # Tape format failures traphandle ARCserve-Alarm-MIB::arcServetrap9 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 9 # Failure to read tape header traphandle ARCserve-Alarm-MIB::arcServetrap10 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 10 # Failure to position tape traphandle ARCserve-Alarm-MIB::arcServetrap11 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 11 # Cancelled jobs traphandle ARCserve-Alarm-MIB::arcServetrap12 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 12 # Successful jobs traphandle ARCserve-Alarm-MIB::arcServetrap13 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 13 # Imcomplete jobs traphandle ARCserve-Alarm-MIB::arcServetrap14 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 14 # Job failures traphandle ARCserve-Alarm-MIB::arcServetrap15 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 15
Cet exemple suppose que vous avez un répertoire /usr/local/nagios/libexec/eventhandlers/ sur votre machine d'administration SNMP et que le script handle-arcserve-trap y est placé. Vous pouvez modifier ceci pour l'adapter à votre environnement. Ceci dit, mon script était celui-ci:
#!/bin/sh # Arguments: # $1 = trap type # First line passed from snmptrapd is FQDN of host that sent the trap read host # Given a FQDN, get the short name of the host as it is setup in Nagios hostname="unknown" case $host in novellserver.mylocaldomain.com) hostname="novellserver" ;; nt.mylocaldomain.com) hostname="ntserver" ;; esac # Get severity level (OK, WARNING, UNKNOWN, or CRITICAL) and plugin output based on trape type state=-1 output="No output" case "$1" in # failed to format tape - critical 11) output="Critical: Failed to format tape" state=2 ;; # failed to read tape header - critical 10) output="Critical: Failed to read tape header" state=2 ;; # failed to position tape - critical 11) output="Critical: Failed to position tape" state=2 ;; # backup cancelled - warning 12) output="Warning: ArcServe backup operation cancelled" state=1 ;; # backup success - ok 13) output="Ok: ArcServe backup operation successful" state=0 ;; # backup incomplete - warning 14) output="Warning: ArcServe backup operation incomplete" state=1 ;; # backup failure - critical 15) output="Critical: ArcServe backup operation failed" state=2 ;; esac # Submit passive check result to monitoring host /usr/local/nagios/libexec/eventhandlers/submit_check_result $hostname "ArcServe Backup" $state "$output" exit 0
Notez que le script handle-arcserve-trap appelle le script submit_check_result pour envoyer l'alerte à l'hôte chargé de la surveillance. En supposant que celui-ci s'appelle monitor, le script submit check_result devrait ressembler à ceci (vous devrez l'adapter au chemin exact du programme send_nsca sur votre hôte d'administration):
#!/bin/sh
# Arguments
# $1 = name of host in service definition
# $2 = name/description of service in service definition
# $3 = return code
# $4 = output
/bin/echo -e "$1\t$2\t$3\t$4\n" | /usr/local/nagios/bin/send_nsca monitor -c /usr/local/nagios/etc/send_nsca.cfg
Finition deux couches et vernis :-)
Maintenant que tout est configuré, il vous suffit de redémarrer Nagios. C'est tout. Vous devriez recevoir des alertes de ArcServe via Nagios, à chaque fois qu'un processus réussit ou échoue , etc .