Intégration de CD-SNMP (NET-SNMP)


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 :

  1. Modifier le processus ArcServe autopilot pour envoyer des interruptions SNMP à chaque erreur, succès, etc..
  2. Editez SYS:\ETC\TRAPTARG.CFG et l'adresse de mon hôte d'administration SNMP (celui qui reçoit les interruptions)
  3. Charger SNMP.NLM
  4. Chager ALERT.NLM pour permettre l'envoi des interruptions SNMP.

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 :

  1. Installez les MIBs ArcServe(incluses dans le CD d'installation ArcServe )
  2. Editez le fichier de configuration de snmptrapd (/etc/snmp/snmptrapd.conf) pour définir un gestionnaire d'interruption pour les alertes ArcServe. Voir plus bas.
  3. Démarrez le deamon snmptrapd, en attente des éventuelles interruptions SNMP.

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 .