Marymoons
06-19-2008, 04:07 PM
Bonjour tout le monde, je suis étudiante en informatique et je suis en stage où j'utilise nagios 2.12 et centreon 1.4.2.6 (vivement la v2 stable) sur une debian etch 4r3!
Mon souci est simple mais nécessite surement de la programmation je ne sais où.
Je vais vous donner mon exemple :
Je surveille les vpn sur mon firewall et pour ça j'utilise la mib (NETASQ-VPNSA-MIB::ntqVPNState.$ARG1$).
Quand je test la commande avec le vpn 1 qui marche j'ai SNMP OK - mature(1) et quand je test sur un autre vpn "mort" j'ai SNMP OK - dead(3).
Du coup dans nagios et centreon les 2 vpn sont en vert dans OK alors q'un des deux est mort et devrait être mis dans une autre catégorie (critical ou warning).
En faite j'aimerais savoir comment faire pour que le vpn dead (3) devienne critical et en rouge ?
Comme je ne peux pas gérer la réponse de ma commande vu que ça utilise la mib, je ne sais pas trop comment faire!
Merci d'avance :D
surcouf
06-19-2008, 04:23 PM
Bonjour tout le monde, je suis étudiante en informatique et je suis en stage où j'utilise nagios 2.12 et centreon 1.4.2.6 (vivement la v2 stable) sur une debian etch 4r3!
Mon souci est simple mais nécessite surement de la programmation je ne sais où.
Je vais vous donner mon exemple :
Je surveille les vpn sur mon firewall et pour ça j'utilise la mib (NETASQ-VPNSA-MIB::ntqVPNState.$ARG1$).
Quand je test la commande avec le vpn 1 qui marche j'ai SNMP OK - mature(1) et quand je test sur un autre vpn "mort" j'ai SNMP OK - dead(3).
Du coup dans nagios et centreon les 2 vpn sont en vert dans OK alors q'un des deux est mort et devrait être mis dans une autre catégorie (critical ou warning).
En faite j'aimerais savoir comment faire pour que le vpn dead (3) devienne critical et en rouge ?
Comme je ne peux pas gérer la réponse de ma commande vu que ça utilise la mib, je ne sais pas trop comment faire!
Dans ce genre de cas, le plugin de base, check_snmp, est dépassé car il faut faire un traitement ultérieur à la collecte des valeurs des différents OID. Voir l'exemple donné pour les Netscreen sur nagiosexchange :
http://www.nagiosexchange.org/cgi-bin/page.cgi?g=Detailed%2F1681.html;d=1
Marymoons
06-19-2008, 05:25 PM
Merci pour ton lien, je vais tester cette nouvelle commande ces jours ci et je te dirais si ça marche!
Marymoons
07-01-2008, 01:29 PM
me revoilà,dsl pour le retard mais y a vraiment beaucoup de choses à faire avec nagios!!
Donc j'ai essayé d'arranger à ma sauce le plugin que surcouf m'a passé pour superviser les vpns et j'ai comme réponse "UNKNOW : ". Je suppose que le problème vient de la fonction :
if (! utils::is_hostname($hostname)){
usage();
exit $ERRORS{"UNKNOWN"};
}
Mais je m'y connais pas en perl, et j'ai pas réussi à savoir ce que voulais dire utils::is_hostname(), est ce que quelqu'un saurait m'expliquer svp?
Voici mon plugin arrangé, il ne demande que le numéro (1,2,...) du vpn :
#! /usr/bin/perl -w
use POSIX;
use strict;
# Update the following value to reflect your install
use lib "/usr/lib/nagios/script_securalis" ;
use lib "/usr/local/nagios/libexec" ;
use utils qw($TIMEOUT %ERRORS &print_revision &support);
use Net::SNMP;
use Getopt::Long;
&Getopt::Long::config('bundling');
my $PROGNAME = "check_snmp_vpn";
my $status;
my $version='1.0';
my $state = "UNKNOWN";
my $answer = "";
my $snmpkey = undef;
my $community = "public";
my $port = 161;
my $hostname=undef;
my $session;
my $error=undef;
my $response=undef;
my $snmp_version = 1 ;
my $opt_h ;
my $opt_list;
my $opt_w = 40 ;
my $opt_c = 60;
my $opt_checktunnelstate = undef;
my $numtunnel=undef;
my @snmpoids;
my $snmpnsntqVPNState = '.1.3.6.1.4.1.11256.1.1.1.1.11';
$status = GetOptions(
"n=i" => \$numtunnel, "numtunnel=i" => \$numtunnel,
"h" => \$opt_h, "help" => \$opt_h,
"l" => \$opt_list, "list" => \$opt_list,
"v=i" => \$snmp_version, "snmp_version=i" => \$snmp_version,
"C=s" =>\$community, "community=s" => \$community,
"H=s" => \$hostname, "hostname=s" => \$hostname);
if ($status == 0)
{
print_help();
exit $ERRORS{'OK'};
}
if ($opt_h) {
print_help();
exit $ERRORS{'OK'};
}
if (! utils::is_hostname($hostname)){
usage();
exit $ERRORS{"UNKNOWN"};
}
if ( $snmp_version =~ /[12]/ ) {
($session, $error) = Net::SNMP->session(
-hostname => $hostname,
-community => $community,
-port => $numtunnel,
-version => $snmp_version
);
if (!defined($session)) {
$state='UNKNOWN';
$answer=$error;
print ("$state: $answer");
exit $ERRORS{$state};
}
}elsif ( $snmp_version =~ /3/ ) {
$state='UNKNOWN';
print ("$state: No support for SNMP v3 yet");
exit $ERRORS{$state};
}else{
$state='UNKNOWN';
print ("$state: No support for SNMP v$snmp_version yet");
exit $ERRORS{$state};
}
# Just in case of problems, let's not hang Nagios
$SIG{'ALRM'} = sub {
print ("ERROR: No snmp response from $hostname (alarm)\n");
exit $ERRORS{"UNKNOWN"};
};
alarm($TIMEOUT);
@snmpoids=($snmpnsntqVPNState.$numtunnel);
if (!defined($response = $session->get_request(@snmpoids))) {
$answer=$session->error;
$session->close;
$state = 'CRITICAL';
print ("$state: $answer");
exit $ERRORS{$state};
}
$session->close;
if(defined($response = $session->get_request(@snmpoids))){
if(! $$response{$snmpnsntqVPNState}) {
$state = 'WARNING';
$answer .= "Monitor disabled ";
} else {
if($$response{$snmpnsntqVPNState}) {
$state = 'OK';
$answer .= "Tunnel UP ";
} else {
$state = 'CRITICAL';
$answer .= "Tunnel DOWN ";
}
}
}
print ("$state: $answer");
exit $ERRORS{$state};
sub usage {
printf "\nMissing arguments!\n";
printf "\n";
printf "usage: \n";
printf "$PROGNAME -H <HOSTNAME> [-C <community>] [-n numtunnel] [-v snmpversion] \n";
printf "For help, try: $PROGNAME -h \n";
printf "\n\n";
exit $ERRORS{"UNKNOWN"};
}
sub print_help {
printf "$PROGNAME plugin for Nagios monitors the state of \n";
printf "VPN tunnels for a Netasq firewall\n";
printf "\nUsage:\n";
printf " -H (--hostname) Hostname to query - (required)\n";
printf " -C (--community) SNMP read community (defaults to public,\n";
printf " used with SNMP v1 and v2c\n";
printf " -v (--snmp_version) 1 for SNMP v1 (default)\n";
printf " 2 for SNMP v2c\n";
printf " SNMP v2c will use get_bulk for less overhead\n";
printf " if monitoring with -d\n";
printf " -n (--numtunnel) Numero de Tunnel (required)\n";
printf " -h (--help) usage help \n\n";
print_revision($PROGNAME, $version);
}
Merci d'avance:D