Intégration à UCD-SNMP (NET-SNMP)


Note : NetSaint n'est pas prévu pour remplacer une application de gestion SNMP complète comme HP OpenView ou OpenNMS. Toutefois, vous pouvez vous arranger de manière à ce que des interruptions [traps] SNMP reçus par un hôte de votre réseau générent des alertes dans NetSaint. Voici comment...

Introduction

Cette exemple vous montre comment générer facilement des alertes dans NetSaint pour des interruptions SNMP reçus par le démon UCD-SNMP snmptrapd. Ces directives supposent que l'hôte qui reçoit les interruptions SNMP n'est pas celui qui exécute NetSaint. Si votre machine de supervision est la même que celle qui reçoit les interruptions SNMP, vous devrez faire quelques modifications à l'exemple que je fournis. Je suppose également que vous avez installé le démon nsca sur votre serveur de supervision et le client nsca (send_nsca) sur la machine que reçoit les interruptions SNMP.

Dans cet exemple, je décrirai comment j'ai paramétré NetSaint de manière à générer des alertes lorsque des interruptions SNMP sont émises par les travaux de sauvegarde d'ArcServe qui tournent sur mes serveurs Novell. Je voulais être notifié lorsque les sauvegardes échouent, ce qui fonctionne très bien. Vous devrez arranger cet exemple pour répondre à vos propres besoins.

Definir le service

Tout d'abord vous devrez définir un service dans votre fichier de configuration des hôtes pour les interruptions SNMP (dans cet exemple, je définis un service pour les travaux de sauvegarde d'ArcServe). En supposant que l'hôte qui émet les alertes s'appelle novellserver, une définition de service pourrait ressembler à ça :

service[novellserver]=ArcServe Backup;1;none;1;1;1;novell-backup-admins;120;24x7;1;1;1;;check_ping

Il est important de noter que le paramétre volatile est activé pour ce service. Ce paramétre a été activé parce que nous voulons qu'une notification soit émise pour chaque alerte qui entre. Notez également que le nom de la période spécifiée dans le paramétre check_period renvoie à une définition de période n'ayant pas de plage de temps valide. Cela signifie que le service ne sera jamais contrôlé activement — toutes les informations de l'alerte devront être envoyées passivement par le client nsca de l'hôte de gestion SNMP (dans mon exemple, il s'appellera firestorm).

Configuration SNMP d'ArcServe et de Novell

Pour qu'ArcServe (et mon serveur Novell) envoient des interruptions SNMP à la machine de supervision, il m'a fallu faire les choses suivantes :

  1. Modifier le travail autopilot d'ArcServe pour envoyer des interruptions SNMP sur échec d'un travail, réussite, etc.
  2. Editer SYS:\ETC\TRAPTARG.CFG et ajouter l'adresse IP de ma machine de gestion (celle qui reçoit les interruptions SNMP)
  3. Charger SNMP.NLM
  4. Charger ALERT.NLM pour permettre l'émission effective des interruptions SNMP

Configuration de l'hôte de gestion SNMP

Sur ma machine Linux de gestion SNMP (firestorm), j'ai installé le logiciel UCD-SNMP (NET-SNMP). Ensuite, j'ai dû :

  1. Installer les MIB ArcServe (fournies sur le CD d'installation d'ArcServe)
  2. Editer le fichier de configuration de snmptrapd (/etc/snmp/snmptrapd.conf) pour définir un gestionnaire d'interruptions pour les alertes d'ArcServe. Cela est détaillé plus loin.
  3. Démarrer le démon snmptrapd pour se mettre à l'écoute des interruptions SNMP entrantes

Pour que le démon snmptrapd route les interruptions SNMP d'ArcServe à notre hôte NetSaint, il nous faut définir un gestionnaire d'interruptions [traphandler] dans le fichier /etc/snmp/snmptrapd.conf. Dans mon installation, le fichier de configuration ressemble à ça :

#############################
# ArcServe SNMP Traps
#############################

# Tape format failures
traphandle ARCserve-Alarm-MIB::arcServetrap9 /usr/local/netsaint/libexec/eventhandlers/handle-arcserve-trap 9

# Failure to read tape header
traphandle ARCserve-Alarm-MIB::arcServetrap10 /usr/local/netsaint/libexec/eventhandlers/handle-arcserve-trap 10

# Failure to position tape
traphandle ARCserve-Alarm-MIB::arcServetrap11 /usr/local/netsaint/libexec/eventhandlers/handle-arcserve-trap 11

# Cancelled jobs
traphandle ARCserve-Alarm-MIB::arcServetrap12 /usr/local/netsaint/libexec/eventhandlers/handle-arcserve-trap 12

# Successful jobs
traphandle ARCserve-Alarm-MIB::arcServetrap13 /usr/local/netsaint/libexec/eventhandlers/handle-arcserve-trap 13

# Imcomplete jobs
traphandle ARCserve-Alarm-MIB::arcServetrap14 /usr/local/netsaint/libexec/eventhandlers/handle-arcserve-trap 14

# Job failures
traphandle ARCserve-Alarm-MIB::arcServetrap15 /usr/local/netsaint/libexec/eventhandlers/handle-arcserve-trap 15

Cet exemple suppose que vous avez un répertoire /usr/local/netsaint/libexec/eventhandlers/ sur votre hôte de gestion SNMP et que le script handle-arcserve-trap y est présent. Vous pouvez modifier cela en fonction de votre installation. Quoiqu'il en soit, le script handle-arcserve-trap sur mon hôte de gestion SNMP ressemble à ça :

#!/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 NetSaint
    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/netsaint/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 effectivement les alertes à l'hôte de supervision. En supposant que que votre machine de supervision s'appelle monitor, le script submit check_result peut ressembler à ça (vous devrez sans doute modifier le chemin du programme send_nsca en fonction de son emplacement sur machine de supervision :

#!/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/netsaint/send_nsca monitor -c /usr/local/netsaint/send_nsca.cfg

Pour terminer

Tout ce qui doit être configuré l'est maintenant, vous n'avez plus qu'à redémarrer NetSaint sur votre machine de supervision. Et voilà ! Vous devriez recevoir des alertes dans NetSaint chaque fois qu'un travail d'ArcServe échoue, réussit, etc.