Surveiller les interfaces de son Cisco avec Nagios

Date: 5/01/2009 | Catégories: Open-source,Reseau | Tags: ,,

Qui veut surveiller l'état des interfaces de ses routeurs Cisco doit obligatoirement se plonger dans l'arborescence des MIB SNMP. Heureusement, Patrick Proy a eu la bonne idée d'intégrer dans un seul et même script Perl toutes les fonctions pour répondre à ce besoin.

Nous allons dans ce billet voir comment installer et tester le plugin check_snmp_int.pl puis configurer Nagios pour prendre en compte ce nouveau plugin.

Installation du plugin

Il faut dans un premier temps se rendre dans le répertoire ou les plugin Nagios sont stockés (/usr/local/libexec/nagios par exemple) puis y télécharger la dernière version du plugin (1.4.8 au moment de l'écriture de ce billet):

cd /usr/local/libexec/nagios
wget http://nagios.manubulon.com/check_snmp_int.pl

Ensuite on le rend executable par Nagios:

chown nagios:nagios check_snmp_int.pl
chmod 555 check_snmp_int.pl

Enfin on vérifie que l'utilisateur Nagios (ou celui qui doit lancer Nagios) peut exécuter ce script:

su - nagios
nagios> /usr/local/libexec/nagios/check_snmp_int.pl -h
... la syntaxe va s'afficher ...
nagios> exit

Si vous avez une erreur lors de l'éxécution du script, cela peut être dû à l'absence des pré-requis suivants sur votre système:

  • Perl doit être installé dans le répertoire /usr/bin/perl
  • La librairie Perl nommée Net::SNMP doit être installé (via CPAN)
  • Le fichier 'utils.pm doit être présent dans le répertoire des plugins Nagios

Test du plugin

Nous allons dans un premier temps chercher la liste des interfaces réseau du routeur Cisco (ou autre compatible avec MIB-2 standard) à superviser:

/usr/local/libexec/nagios/check_snmp_int.pl -H <adresseIPdurouteur> -C public -n zzzz -v
Alarm at 15 + 5
SNMP v1 login
Filter : zzzz
OID : 1.3.6.1.2.1.2.2.1.2.26, Desc : Async54
OID : 1.3.6.1.2.1.2.2.1.2.28, Desc : Async56
OID : 1.3.6.1.2.1.2.2.1.2.18, Desc : Async46
OID : 1.3.6.1.2.1.2.2.1.2.12, Desc : Async40
OID : 1.3.6.1.2.1.2.2.1.2.31, Desc : Async59
OID : 1.3.6.1.2.1.2.2.1.2.19, Desc : Async47
OID : 1.3.6.1.2.1.2.2.1.2.22, Desc : Async50
OID : 1.3.6.1.2.1.2.2.1.2.34, Desc : Async62
OID : 1.3.6.1.2.1.2.2.1.2.13, Desc : Async41
OID : 1.3.6.1.2.1.2.2.1.2.23, Desc : Async51
OID : 1.3.6.1.2.1.2.2.1.2.4, Desc : Null0
OID : 1.3.6.1.2.1.2.2.1.2.35, Desc : Loopback0
OID : 1.3.6.1.2.1.2.2.1.2.30, Desc : Async58
OID : 1.3.6.1.2.1.2.2.1.2.5, Desc : Async33
OID : 1.3.6.1.2.1.2.2.1.2.11, Desc : Async39
OID : 1.3.6.1.2.1.2.2.1.2.1, Desc : Ethernet3/0
OID : 1.3.6.1.2.1.2.2.1.2.39, Desc : Virtual-Access2
OID : 1.3.6.1.2.1.2.2.1.2.14, Desc : Async42
OID : 1.3.6.1.2.1.2.2.1.2.37, Desc : Virtual-Template1
OID : 1.3.6.1.2.1.2.2.1.2.16, Desc : Async44
OID : 1.3.6.1.2.1.2.2.1.2.20, Desc : Async48
OID : 1.3.6.1.2.1.2.2.1.2.17, Desc : Async45
OID : 1.3.6.1.2.1.2.2.1.2.29, Desc : Async57
OID : 1.3.6.1.2.1.2.2.1.2.36, Desc : Tunnel0
OID : 1.3.6.1.2.1.2.2.1.2.3, Desc : Serial3/1
OID : 1.3.6.1.2.1.2.2.1.2.25, Desc : Async53
OID : 1.3.6.1.2.1.2.2.1.2.2, Desc : Serial3/0
OID : 1.3.6.1.2.1.2.2.1.2.7, Desc : Async35
OID : 1.3.6.1.2.1.2.2.1.2.33, Desc : Async61
OID : 1.3.6.1.2.1.2.2.1.2.9, Desc : Async37
OID : 1.3.6.1.2.1.2.2.1.2.6, Desc : Async34
OID : 1.3.6.1.2.1.2.2.1.2.15, Desc : Async43
OID : 1.3.6.1.2.1.2.2.1.2.10, Desc : Async38
OID : 1.3.6.1.2.1.2.2.1.2.27, Desc : Async55
OID : 1.3.6.1.2.1.2.2.1.2.32, Desc : Async60
OID : 1.3.6.1.2.1.2.2.1.2.8, Desc : Async36
OID : 1.3.6.1.2.1.2.2.1.2.21, Desc : Async49
OID : 1.3.6.1.2.1.2.2.1.2.24, Desc : Async52

Il faut ensuite noter le nom système des interfaces à surveiller (par exemple Serial 3/0 et Serial 3/1 dans mon cas).

Puis on lance ensuite la commande pour vérifier l'état de l'interface Serial 3/0:

/usr/local/libexec/nagios/check_snmp_int.pl -H <adresseIPdurouteur> -C public -n "Serial3/0" -r
Serial3/0:UP:1 UP: OK

On a donc maintenant la commande à éxécuter, il ne reste plus qu'a l'intégrer dans notre configuration de Nagios.

Configuration de Nagios

On commence par se rednre dans le répertoire ou se trouve les fichiers de configuration de Nagios (/usr/local/etc/nagios par exemple):

cd /usr/local/etc/nagios

Puis si vous êtes sous Nagios 3.x ou supérieur dans le sous-répertoire objects:

cd objects

Enfin on édite le fichier commands.cfg puis on y ajoute la section suivante:

###################
# check_snmp_int.pl
###################

# 'check_snmp_int.pl', vérifier l'état de l'interface reseau
define command{
command_name    check_snmp_int
command_line    $USER1$/check_snmp_int.pl -H $HOSTADDRESS$ -C $ARG1$ -n $ARG2$ -r
}

On vient donc de créer une nouvelle commande Nagios qui appelera le plugin check_snmp_int avec deux paramètres:

  • $ARG1$: nom de la communauté SNMP à utiliser (public la plupart du temps)
  • $ARG2$: nom de l'interface à superviser

Enfin , on ajoute un nouveau service pour le routeur Cisco à superviser (par exemple dans le fichier network.cfg):

define host{
use             routeur
host_name       cisco
alias           Routeur liaison WAN
address         <adresseIProuteurcisco>
}
define service{
use                     generic-service
host_name               cisco
service_description     LS 1
check_command           check_snmp_int!public!"Serial3/0"
}

Et si en plus je veux...

...surveiller la bande passante utilisée et envoyer une alerte si celle-ci dépasse un certain seuil ? Aller Noël n'est pas si loin...

Il suffit de créer une nouvelle commande Nagios et d'utiliser l'option -k du plugin. Par exemple pour surveiller un interface Serial3/0 et emmettre une alerte de warning si  débit dépasse 1.6 Mbps puis une alerte critique si ce dernier passe la barre des 1.9 Mbps ?

/usr/local/libexec/nagios/check_snmp_int.pl -H <adresseIPdurouteur> -C public -n "Serial3/0" -k -w 1600,1600 -c 1900,1900

Je vous laisse convertir cette commande système vers une commande Nagios, cela vous fera un bon exercice 😉