diff --git a/centreon-plugins/src/check_centreon_snmp_cpu b/centreon-plugins/src/check_centreon_snmp_cpu index a575fbdae..6ada20fb0 100644 --- a/centreon-plugins/src/check_centreon_snmp_cpu +++ b/centreon-plugins/src/check_centreon_snmp_cpu @@ -27,7 +27,8 @@ use strict; use Net::SNMP qw(:snmp); use FindBin; use lib "$FindBin::Bin"; -use lib "@NAGIOS_PLUGINS@"; +use lib "/usr/local/nagios/libexec"; +#use lib "@NAGIOS_PLUGINS@"; use utils qw($TIMEOUT %ERRORS &print_revision &support); if (eval "require centreon" ) { diff --git a/centreon-plugins/src/check_centreon_snmp_loadaverage b/centreon-plugins/src/check_centreon_snmp_loadaverage index 6765a533e..0b347683c 100644 --- a/centreon-plugins/src/check_centreon_snmp_loadaverage +++ b/centreon-plugins/src/check_centreon_snmp_loadaverage @@ -28,7 +28,8 @@ use strict; use Net::SNMP qw(:snmp); use FindBin; use lib "$FindBin::Bin"; -use lib "@NAGIOS_PLUGINS@"; +use lib "/usr/local/nagios/libexec"; +#use lib "@NAGIOS_PLUGINS@"; use utils qw($TIMEOUT %ERRORS &print_revision &support); if (eval "require centreon" ) { diff --git a/centreon-plugins/src/check_centreon_snmp_packetErrors b/centreon-plugins/src/check_centreon_snmp_packetErrors index 17faf90a6..cffe4f478 100644 --- a/centreon-plugins/src/check_centreon_snmp_packetErrors +++ b/centreon-plugins/src/check_centreon_snmp_packetErrors @@ -28,7 +28,8 @@ use strict; use Net::SNMP qw(:snmp oid_lex_sort); use FindBin; use lib "$FindBin::Bin"; -use lib "@NAGIOS_PLUGINS@"; +use lib "/usr/local/nagios/libexec"; +#use lib "@NAGIOS_PLUGINS@"; use utils qw($TIMEOUT %ERRORS &print_revision &support); if (eval "require centreon" ) { @@ -152,8 +153,8 @@ foreach my $err (oid_lex_sort(keys %$result_out)) { # ## for (my $i = 0; $i < scalar(@nb_in_errors); $i++) { - if (-e "/tmp/packet_errors_if".$i."_".$opt_H.".tmp") { - open(FILE,"<"."/tmp/packet_errors_if".$i."_".$opt_H.".tmp"); + if (-e "/usr/local/centreon/temp/packet_errors_if".$i."_".$opt_H.".tmp") { + open(FILE,"<"."/usr/local/centreon/temp/packet_errors_if".$i."_".$opt_H.".tmp"); while($row = ){ my @last_values = split(":",$row); $last_check_time[$i] = $last_values[0]; @@ -167,8 +168,8 @@ for (my $i = 0; $i < scalar(@nb_in_errors); $i++) { } $update_time = time; - unless (open(FILE,">"."/tmp/packet_errors_if".$i."_".$opt_H.".tmp")){ - print "Unknown - /tmp/tmp/packet_errors_if".$i."_".$opt_H.".tmp!\n"; + unless (open(FILE,">"."/usr/local/centreon/temp/packet_errors_if".$i."_".$opt_H.".tmp")){ + print "Unknown - /usr/local/centreon/temp/packet_errors_if".$i."_".$opt_H.".tmp!\n"; exit $ERRORS{"UNKNOWN"}; } print FILE "$update_time:$nb_in_errors[$i]:$nb_out_errors[$i]"; diff --git a/centreon-plugins/src/check_centreon_snmp_remote_storage b/centreon-plugins/src/check_centreon_snmp_remote_storage index 20214850a..e2f772e28 100644 --- a/centreon-plugins/src/check_centreon_snmp_remote_storage +++ b/centreon-plugins/src/check_centreon_snmp_remote_storage @@ -28,7 +28,8 @@ use strict; use Net::SNMP qw(:snmp); use FindBin; use lib "$FindBin::Bin"; -use lib "@NAGIOS_PLUGINS@"; +use lib "/usr/local/nagios/libexec"; +#use lib "@NAGIOS_PLUGINS@"; use utils qw($TIMEOUT %ERRORS &print_revision &support); if (eval "require centreon" ) { @@ -208,9 +209,8 @@ if ($opt_s) { # Get description table my $result = $session->get_table( Baseoid => $OID_hrStorageDescr - ); - if (!defined($result)) { + ); printf("ERROR: hrStorageDescr Table : %s.\n", $session->error); $session->close; exit $ERRORS{'UNKNOWN'}; @@ -219,12 +219,11 @@ if ($opt_s) { foreach my $key ( oid_lex_sort(keys %$result)) { my @oid_list = split (/\./,$key); my $index = pop (@oid_list) ; - print "hrStorage $index :: $$result{$key}\n"; + print "hrStorage $index :: @$result{$key}\n"; } exit $ERRORS{'OK'}; } - my $result = $session->get_request( -varbindlist => [$OID_hrStorageDescr.".".$partition , $OID_hrStorageAllocationUnits.".".$partition , diff --git a/centreon-plugins/src/check_centreon_snmp_traffic b/centreon-plugins/src/check_centreon_snmp_traffic index 4447c3fca..1cd9f02fe 100644 --- a/centreon-plugins/src/check_centreon_snmp_traffic +++ b/centreon-plugins/src/check_centreon_snmp_traffic @@ -28,7 +28,8 @@ use strict; use Net::SNMP qw(:snmp oid_lex_sort); use FindBin; use lib "$FindBin::Bin"; -use lib "@NAGIOS_PLUGINS@"; +use lib "/usr/local/nagios/libexec"; +#use lib "@NAGIOS_LIBEXEC@"; use utils qw($TIMEOUT %ERRORS &print_revision &support); if (eval "require centreon" ) { use centreon qw(get_parameters); @@ -307,8 +308,8 @@ $last_out_bits = 0; my $flg_created = 0; -if (-e "/tmp/centreon_traffic_if".$interface."_".$opt_H) { - open(FILE,"<"."/tmp/centreon_traffic_if".$interface."_".$opt_H); +if (-e "/usr/local/centreon/temp/traffic_if".$interface."_".$opt_H) { + open(FILE,"<"."/usr/local/centreon/temp/traffic_if".$interface."_".$opt_H); while($row = ){ @last_values = split(":",$row); $last_check_time = $last_values[0]; @@ -323,8 +324,8 @@ if (-e "/tmp/centreon_traffic_if".$interface."_".$opt_H) { $update_time = time(); -unless (open(FILE,">"."/tmp/centreon_traffic_if".$interface."_".$opt_H)){ - print "Unknown - /tmp/centreon_traffic_if".$interface."_".$opt_H. " !\n"; +unless (open(FILE,">"."/usr/local/centreon/temp/traffic_if".$interface."_".$opt_H)){ + print "Unknown - /usr/local/centreon/temp/traffic_if".$interface."_".$opt_H. " !\n"; exit $ERRORS{"UNKNOWN"}; } print FILE "$update_time:$in_bits:$out_bits"; diff --git a/centreon-plugins/src/check_snmp_load.pl b/centreon-plugins/src/check_snmp_load.pl index f77be3eaa..ecc735cf9 100644 --- a/centreon-plugins/src/check_snmp_load.pl +++ b/centreon-plugins/src/check_snmp_load.pl @@ -1,12 +1,11 @@ -#!/usr/bin/perl -w +#!/usr/bin/perl -w ############################## check_snmp_load ################# -# Version : 1.2 / BETA -# Date : Aug 27 2005 +my $Version='1.12'; +# Date : Oct 12 2007 # Author : Patrick Proy ( patrick at proy.org) -# Help : http://www.manubulon.com/nagios/ +# Help : http://nagios.manubulon.com/ # Licence : GPL - http://www.fsf.org/licenses/gpl.txt -# Changelog : HP Procurve -# TODO : +# Contributors : F. Lacroix and many others !!! ################################################################# # # Help : ./check_snmp_load.pl -h @@ -18,24 +17,8 @@ use Getopt::Long; # Nagios specific -use lib "@NAGIOS_PLUGINS@"; -use utils qw(%ERRORS $TIMEOUT); -#my $TIMEOUT = 15; -#my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4); - -# Oreon specific - - -if (eval "require centreon" ) { - use centreon qw(get_parameters create_rrd update_rrd &is_valid_serviceid); - use vars qw($VERSION %centreon); - %centreon=get_parameters(); -} else { - print "Unable to load centreon perl module\n"; - exit $ERRORS{'UNKNOWN'}; -} - -my $pathtorrdbase = $centreon{GLOBAL}{DIR_RRDTOOL}; +my $TIMEOUT = 15; +my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4); # SNMP Datas @@ -44,7 +27,7 @@ my $base_proc = "1.3.6.1.2.1.25.3.3.1"; # oid for all proc info my $proc_id = "1.3.6.1.2.1.25.3.3.1.1"; # list of processors (product ID) my $proc_load = "1.3.6.1.2.1.25.3.3.1.2"; # %time the proc was not idle over last minute -# Linux load +# Linux load my $linload_table= "1.3.6.1.4.1.2021.10.1"; # net-snmp load table my $linload_name = "1.3.6.1.4.1.2021.10.1.2"; # text 'Load-1','Load-5', 'Load-15' @@ -56,6 +39,18 @@ my $cisco_cpu_5m = "1.3.6.1.4.1.9.2.1.58.0"; # Cisco CPU load (5min %) my $cisco_cpu_1m = "1.3.6.1.4.1.9.2.1.57.0"; # Cisco CPU load (1min %) my $cisco_cpu_5s = "1.3.6.1.4.1.9.2.1.56.0"; # Cisco CPU load (5sec %) +# Cisco catalyst cpu/load + +my $ciscocata_cpu_5m = ".1.3.6.1.4.1.9.9.109.1.1.1.1.5.9"; # Cisco CPU load (5min %) +my $ciscocata_cpu_1m = ".1.3.6.1.4.1.9.9.109.1.1.1.1.3.9"; # Cisco CPU load (1min %) +my $ciscocata_cpu_5s = ".1.3.6.1.4.1.9.9.109.1.1.1.1.4.9"; # Cisco CPU load (5sec %) + +# Netscreen cpu/load + +my $nsc_cpu_5m = "1.3.6.1.4.1.3224.16.1.4.0"; # NS CPU load (5min %) +my $nsc_cpu_1m = "1.3.6.1.4.1.3224.16.1.2.0"; # NS CPU load (1min %) +my $nsc_cpu_5s = "1.3.6.1.4.1.3224.16.1.3.0"; # NS CPU load (5sec %) + # AS/400 CPU my $as400_cpu = "1.3.6.1.4.1.2.6.4.5.1.0"; # AS400 CPU load (10000=100%); @@ -75,17 +70,27 @@ my $nokia_cpu = "1.3.6.1.4.1.94.1.21.1.7.1.0"; # Nokia CPU % usage # Bluecoat Appliance my $bluecoat_cpu = "1.3.6.1.4.1.3417.2.4.1.1.1.4.1"; # Bluecoat %cpu usage. +# Fortigate CPU +my $fortigate_cpu = ".1.3.6.1.4.1.12356.1.8.0"; # Fortigate CPU % usage + # Linkproof Appliance -my $linkproof_cpu= "1.3.6.1.4.1.89.35.1.53.0"; # Ressource utilisation (%) Considers network utilization and internal CPU utilization +my $linkproof_cpu= "1.3.6.1.4.1.89.35.1.55.0"; # CPU RE (Routing Engine Tasks) +# 1.3.6.1.4.1.89.35.1.53.0 : Ressource utilisation (%) Considers network utilization and internal CPU utilization # 1.3.6.1.4.1.89.35.1.54 : CPU only (%) # 1.3.6.1.4.1.89.35.1.55 : network only (%) +# HP-UX cpu usage (thanks to krizb for the OIDs). +my $hpux_load_1_min="1.3.6.1.4.1.11.2.3.1.1.3.0"; +my $hpux_load_5_min="1.3.6.1.4.1.11.2.3.1.1.4.0"; +my $hpux_load_15_min="1.3.6.1.4.1.11.2.3.1.1.5.0"; + +# valid values +my @valid_types = ("stand","netsc","netsl","as400","cisco","cata","nsc","fg","bc","nokia","hp","lp","hpux"); # CPU OID array -my %cpu_oid = ("netsc",$ns_cpu_idle,"as400",$as400_cpu,"bc",$bluecoat_cpu,"nokia",$nokia_cpu,"hp",$procurve_cpu,"lp",$linkproof_cpu); +my %cpu_oid = ("netsc",$ns_cpu_idle,"as400",$as400_cpu,"bc",$bluecoat_cpu,"nokia",$nokia_cpu,"hp",$procurve_cpu,"lp",$linkproof_cpu,"fg",$fortigate_cpu); # Globals -my $Version='1.2'; my $o_host = undef; # hostname my $o_community = undef; # community @@ -93,38 +98,30 @@ my $o_port = 161; # port my $o_help= undef; # wan't some help ? my $o_verb= undef; # verbose mode my $o_version= undef; # print version -my $o_check_type= "stand"; # check type : stand | netsc | netsl | as400 | cisco | bc | nokia | hp | lp -# For backward compatibility -my $o_linux= undef; # Check linux load instead of CPU -my $o_linuxC= undef; # Check Net-SNMP CPU -my $o_as400= undef; # Check for AS 400 load -my $o_cisco= undef; # Check for Cisco CPU +# check type : stand | netsc | netsl | as400 | cisco | cata | nsc | fg | bc | nokia | hp | lp | hpux +my $o_check_type= "stand"; # End compatibility my $o_warn= undef; # warning level my @o_warnL= undef; # warning levels for Linux Load or Cisco CPU my $o_crit= undef; # critical level my @o_critL= undef; # critical level for Linux Load or Cisco CPU -my $o_timeout= 5; # Default 5s Timeout +my $o_timeout= undef; # Timeout (Default 5) my $o_perf= undef; # Output performance data my $o_version2= undef; # use snmp v2c # SNMPv3 specific my $o_login= undef; # Login for snmpv3 my $o_passwd= undef; # Pass for snmpv3 -# centreon specific -my $o_step= undef; -my $o_g= undef; -my $o_S= undef; -my $step= undef; -my $rrd= undef; -my $start= undef; -my $ServiceId= undef; +my $v3protocols=undef; # V3 protocol list. +my $o_authproto='md5'; # Auth protocol +my $o_privproto='des'; # Priv protocol +my $o_privpass= undef; # priv password # functions sub p_version { print "check_snmp_load version : $Version\n"; } sub print_usage { - print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd) [-p ] -w -c -T=[stand|netsl|netsc|as400|cisco|bc|nokia|hp|lp] [-f] [-t ] [-V]\n"; + print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd [-X pass -L ,]) [-p ] -w -c -T=[stand|netsl|netsc|as400|cisco|cata|nsc|fg|bc|nokia|hp|lp|hpux] [-f] [-t ] [-V]\n"; } sub isnnum { # Return true if arg is not a number @@ -135,11 +132,11 @@ sub isnnum { # Return true if arg is not a number sub help { print "\nSNMP Load & CPU Monitor for Nagios version ",$Version,"\n"; - print "(c)2004 to my cat Ratoune - Author : Patrick Proy\n\n"; + print "GPL licence, (c)2004-2007 Patrick Proy\n\n"; print_usage(); print <, + : Authentication protocol (md5|sha : default md5) + : Priv protocole (des|aes : default des) -P, --port=PORT SNMP port (Default 161) -w, --warn=INTEGER | INT,INT,INT - warning level for cpu in percent (on one minute) - if -L switch then comma separated level for load-1,load-5,load-15 - if -I switch then comma separated level for cpu 5s,cpu 1m,cpu 5m + 1 value check : warning level for cpu in percent (on one minute) + 3 value check : comma separated level for load or cpu for 1min, 5min, 15min -c, --crit=INTEGER | INT,INT,INT critical level for cpu in percent (on one minute) - if -L switch then comma separated level for load-1,load-5,load-15 - if -I switch then comma separated level for cpu 5s,cpu 1m,cpu 5m + 1 value check : critical level for cpu in percent (on one minute) + 3 value check : comma separated level for load or cpu for 1min, 5min, 15min -T, --type=stand|netsl|netsc|as400|cisco|bc|nokia|hp|lp - CPU check : - stand : standard MIBII (works with Windows), - can handle multiple CPU. - netsl : check linux load provided by Net SNMP - netsc : check cpu usage given by net-snmp (100-idle) - as400 : check as400 CPU usage - cisco : check cisco CPU usage - bc : check bluecoat CPU usage - nokia : check nokia CPU usage - hp : check HP procurve switch CPU usage - lp : Linkproof CPU usage + CPU check : + stand : standard MIBII (works with Windows), + can handle multiple CPU. + netsl : linux load provided by Net SNMP (1,5 & 15 minutes values) + netsc : cpu usage given by net-snmp (100-idle) + as400 : as400 CPU usage + cisco : Cisco CPU usage + cata : Cisco catalyst CPU usage + nsc : NetScreen CPU usage + fg : Fortigate CPU usage + bc : Bluecoat CPU usage + nokia : Nokia CPU usage + hp : HP procurve switch CPU usage + lp : Linkproof CPU usage + hpux : HP-UX load (1,5 & 15 minutes values) -f, --perfparse Perfparse compatible output -t, --timeout=INTEGER timeout for SNMP in seconds (Default: 5) -V, --version prints version number --L, --linux, -A, --as400, -I, --cisco, -N, --netsnmp - These options are for backward compatibility (version<1.2) --g (--rrdgraph) Create a rrd base if necessary and add datas into this one ---rrd_step Specifies the base interval in seconds with which data will be fed into the RRD (300 by default) --S (--ServiceId) centreon Service Id EOT } @@ -194,130 +193,146 @@ sub verb { my $t=shift; print $t,"\n" if defined($o_verb) ; } sub check_options { Getopt::Long::Configure ("bundling"); GetOptions( - 'v' => \$o_verb, 'verbose' => \$o_verb, + 'v' => \$o_verb, 'verbose' => \$o_verb, 'h' => \$o_help, 'help' => \$o_help, 'H:s' => \$o_host, 'hostname:s' => \$o_host, 'p:i' => \$o_port, 'port:i' => \$o_port, 'C:s' => \$o_community, 'community:s' => \$o_community, - 'l:s' => \$o_login, 'login:s' => \$o_login, - 'x:s' => \$o_passwd, 'passwd:s' => \$o_passwd, + 'l:s' => \$o_login, 'login:s' => \$o_login, + 'x:s' => \$o_passwd, 'passwd:s' => \$o_passwd, + 'X:s' => \$o_privpass, 'privpass:s' => \$o_privpass, + 'L:s' => \$v3protocols, 'protocols:s' => \$v3protocols, 't:i' => \$o_timeout, 'timeout:i' => \$o_timeout, - 'V' => \$o_version, 'version' => \$o_version, - - '2' => \$o_version2, 'v2c' => \$o_version2, + 'V' => \$o_version, 'version' => \$o_version, + '2' => \$o_version2, 'v2c' => \$o_version2, 'c:s' => \$o_crit, 'critical:s' => \$o_crit, 'w:s' => \$o_warn, 'warn:s' => \$o_warn, 'f' => \$o_perf, 'perfparse' => \$o_perf, - 'T:s' => \$o_check_type, 'type:s' => \$o_check_type, -# For backward compatibility - 'L' => \$o_linux, 'linux' => \$o_linux, - 'A' => \$o_as400, 'as400' => \$o_as400, - 'I' => \$o_cisco, 'cisco' => \$o_cisco, - 'N' => \$o_linuxC, 'netsnmp' => \$o_linuxC, -# For centreon rrdtool graph - "rrd_step:s" => \$o_step, - "g" => \$o_g, "rrdgraph" => \$o_g, - "S=s" => \$o_S, "ServiceId=s" => \$o_S - ); - # For backward compat - if (defined($o_linux)) { $o_check_type="netsl" } - if (defined($o_linuxC)) { $o_check_type="netsc" } - if (defined($o_as400)) { $o_check_type="as400"} - if (defined($o_cisco)) { $o_check_type="cisco"} - # TODO : check the -T option + 'T:s' => \$o_check_type, 'type:s' => \$o_check_type + ); + # check the -T option + my $T_option_valid=0; + foreach (@valid_types) { if ($_ eq $o_check_type) {$T_option_valid=1} }; + if ( $T_option_valid == 0 ) + {print "Invalid check type (-T)!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + # Basic checks + if (defined($o_timeout) && (isnnum($o_timeout) || ($o_timeout < 2) || ($o_timeout > 60))) + { print "Timeout must be >1 and <60 !\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + if (!defined($o_timeout)) {$o_timeout=5;} if (defined ($o_help) ) { help(); exit $ERRORS{"UNKNOWN"}}; if (defined($o_version)) { p_version(); exit $ERRORS{"UNKNOWN"}}; - if ( ! defined($o_host) ) # check host and filter - { print_usage(); exit $ERRORS{"UNKNOWN"}} + if ( ! defined($o_host) ) # check host and filter + { print_usage(); exit $ERRORS{"UNKNOWN"}} # check snmp information if ( !defined($o_community) && (!defined($o_login) || !defined($o_passwd)) ) - { print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + { print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + if ((defined($o_login) || defined($o_passwd)) && (defined($o_community) || defined($o_version2)) ) + { print "Can't mix snmp v1,2c,3 protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + if (defined ($v3protocols)) { + if (!defined($o_login)) { print "Put snmp V3 login info with protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + my @v3proto=split(/,/,$v3protocols); + if ((defined ($v3proto[0])) && ($v3proto[0] ne "")) {$o_authproto=$v3proto[0]; } # Auth protocol + if (defined ($v3proto[1])) {$o_privproto=$v3proto[1]; } # Priv protocol + if ((defined ($v3proto[1])) && (!defined($o_privpass))) { + print "Put snmp V3 priv login info with priv protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + } # Check warnings and critical if (!defined($o_warn) || !defined($o_crit)) - { print "put warning and critical info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + { print "put warning and critical info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} # Get rid of % sign - $o_warn =~ s/\%//g; + $o_warn =~ s/\%//g; $o_crit =~ s/\%//g; # Check for multiple warning and crit in case of -L - if (($o_warn =~ /,/) || ($o_crit =~ /,/)) { - if (($o_check_type ne "netsl") && ($o_check_type ne "cisco")) { print "Multiple warning without -L or -I switch\n";print_usage(); exit $ERRORS{"UNKNOWN"}} - @o_warnL=split(/,/ , $o_warn); - @o_critL=split(/,/ , $o_crit); - if (($#o_warnL != 2) || ($#o_critL != 2)) - { print "3 warnings and critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}} - for (my $i=0;$i<3;$i++) { - if ( isnnum($o_warnL[$i]) || isnnum($o_critL[$i])) - { print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}} - if ($o_warnL[$i] > $o_critL[$i]) - { print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}} - } - } else { - if (($o_check_type eq "netsl") || ($o_check_type eq "cisco")) { print "Multiple warn and crit levels needed with -L or -I switch\n";print_usage(); exit $ERRORS{"UNKNOWN"}} - if ( isnnum($o_warn) || isnnum($o_crit) ) - { print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}} - if ($o_warn > $o_crit) + if (($o_check_type eq "netsl") || ($o_check_type eq "cisco") || ($o_check_type eq "cata") || + ($o_check_type eq "nsc") || ($o_check_type eq "hpux")) { + @o_warnL=split(/,/ , $o_warn); + @o_critL=split(/,/ , $o_crit); + if (($#o_warnL != 2) || ($#o_critL != 2)) + { print "3 warnings and critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}} + for (my $i=0;$i<3;$i++) { + if ( isnnum($o_warnL[$i]) || isnnum($o_critL[$i])) + { print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}} + if ($o_warnL[$i] > $o_critL[$i]) + { print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}} + } + } else { + if (($o_warn =~ /,/) || ($o_crit =~ /,/)) { + { print "Multiple warning/critical levels not available for this check\n";print_usage(); exit $ERRORS{"UNKNOWN"}} + } + if ( isnnum($o_warn) || isnnum($o_crit) ) + { print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}} + if ($o_warn > $o_crit) { print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}} - } - - ###### centreon ####### - - if (!defined($o_S)) { $o_S="1_1" } - $ServiceId = is_valid_serviceid($o_S); - - if (!defined($o_step)) { $o_step="300" } - $step = $1 if ($o_step =~ /(\d+)/); - + } } ########## MAIN ####### check_options(); -$rrd = $pathtorrdbase.$ServiceId.".rrd"; -$start=time; - # Check gobal timeout if snmp screws up if (defined($TIMEOUT)) { verb("Alarm at $TIMEOUT + 5"); alarm($TIMEOUT+5); } else { - verb("no timeout defined : $o_timeout + 10"); + verb("no global timeout defined : $o_timeout + 10"); alarm ($o_timeout+10); } +$SIG{'ALRM'} = sub { + print "No answer from host\n"; + exit $ERRORS{"UNKNOWN"}; +}; + # Connect to host my ($session,$error); if ( defined($o_login) && defined($o_passwd)) { # SNMPv3 login verb("SNMPv3 login"); - ($session, $error) = Net::SNMP->session( + if (!defined ($o_privpass)) { + verb("SNMPv3 AuthNoPriv login : $o_login, $o_authproto"); + ($session, $error) = Net::SNMP->session( -hostname => $o_host, -version => '3', -username => $o_login, -authpassword => $o_passwd, - -authprotocol => 'md5', - -privpassword => $o_passwd, + -authprotocol => $o_authproto, -timeout => $o_timeout - ); -} else { - if (defined ($o_version2)) { - # SNMPv2 Login - ($session, $error) = Net::SNMP->session( - -hostname => $o_host, - -version => 2, - -community => $o_community, - -port => $o_port, - -timeout => $o_timeout - ); - } else { - # SNMPV1 login + ); + } else { + verb("SNMPv3 AuthPriv login : $o_login, $o_authproto, $o_privproto"); ($session, $error) = Net::SNMP->session( - -hostname => $o_host, - -community => $o_community, - -port => $o_port, - -timeout => $o_timeout + -hostname => $o_host, + -version => '3', + -username => $o_login, + -authpassword => $o_passwd, + -authprotocol => $o_authproto, + -privpassword => $o_privpass, + -privprotocol => $o_privproto, + -timeout => $o_timeout ); } +} else { + if (defined ($o_version2)) { + # SNMPv2 Login + verb("SNMP v2c login"); + ($session, $error) = Net::SNMP->session( + -hostname => $o_host, + -version => 2, + -community => $o_community, + -port => $o_port, + -timeout => $o_timeout + ); + } else { + # SNMPV1 login + verb("SNMP v1 login"); + ($session, $error) = Net::SNMP->session( + -hostname => $o_host, + -community => $o_community, + -port => $o_port, + -timeout => $o_timeout + ); + } } if (!defined($session)) { printf("ERROR opening session: %s.\n", $error); @@ -331,10 +346,10 @@ if ($o_check_type eq "netsl") { verb("Checking linux load"); # Get load table -my $resultat = (Net::SNMP->VERSION < 4) ? - $session->get_table($linload_table) - : $session->get_table(Baseoid => $linload_table); - +my $resultat = (Net::SNMP->VERSION < 4) ? + $session->get_table($linload_table) + : $session->get_table(Baseoid => $linload_table); + if (!defined($resultat)) { printf("ERROR: Description table : %s.\n", $session->error); $session->close; @@ -345,30 +360,24 @@ $session->close; my @load = undef; my @iload = undef; my @oid=undef; +my $exist=0; foreach my $key ( keys %$resultat) { verb("OID : $key, Desc : $$resultat{$key}"); - if ( $key =~ /$linload_name/ ) { + if ( $key =~ /$linload_name/ ) { @oid=split (/\./,$key); $iload[0]= pop(@oid) if ($$resultat{$key} eq "Load-1"); $iload[1]= pop(@oid) if ($$resultat{$key} eq "Load-5"); $iload[2]= pop(@oid) if ($$resultat{$key} eq "Load-15"); + $exist=1 } } -for (my $i=0;$i<3;$i++) { $load[$i] = $$resultat{$linload_load . "." . $iload[$i]}}; - -## -## RRD management -## - -if ($o_g) { - $start=time; - if (! -e $rrd) { - create_rrd($rrd,3,$start,$step,0,"U","GAUGE"); - } - update_rrd($rrd,$start, $load[0] ,$load[1], $load[2]); +if ($exist == 0) { + print "Can't find snmp information on load : UNKNOWN\n"; + exit $ERRORS{"UNKNOWN"}; } +for (my $i=0;$i<3;$i++) { $load[$i] = $$resultat{$linload_load . "." . $iload[$i]}}; print "Load : $load[0] $load[1] $load[2] :"; @@ -379,17 +388,17 @@ for (my $i=0;$i<3;$i++) { $exit_val=$ERRORS{"CRITICAL"}; } if ( $load[$i] > $o_warnL[$i] ) { - # output warn error only if no critical was found + # output warn error only if no critical was found if ($exit_val eq $ERRORS{"OK"}) { - print " $load[$i] > $o_warnL[$i] : WARNING"; + print " $load[$i] > $o_warnL[$i] : WARNING"; $exit_val=$ERRORS{"WARNING"}; } } } print " OK" if ($exit_val eq $ERRORS{"OK"}); -if (defined($o_perf)) { - print " | load_1_min=$load[0];$o_warnL[0];$o_critL[0],"; - print "load_5_min=$load[1];$o_warnL[1];$o_critL[1],"; +if (defined($o_perf)) { + print " | load_1_min=$load[0];$o_warnL[0];$o_critL[0] "; + print "load_5_min=$load[1];$o_warnL[1];$o_critL[1] "; print "load_15_min=$load[2];$o_warnL[2];$o_critL[2]\n"; } else { print "\n"; @@ -402,8 +411,8 @@ exit $exit_val; if ($o_check_type eq "cisco") { my @oidlists = ($cisco_cpu_5m, $cisco_cpu_1m, $cisco_cpu_5s); my $resultat = (Net::SNMP->VERSION < 4) ? - $session->get_request(@oidlists) - : $session->get_request(-varbindlist => \@oidlists); + $session->get_request(@oidlists) + : $session->get_request(-varbindlist => \@oidlists); if (!defined($resultat)) { printf("ERROR: Description table : %s.\n", $session->error); @@ -424,17 +433,60 @@ $load[0]=$$resultat{$cisco_cpu_5s}; $load[1]=$$resultat{$cisco_cpu_1m}; $load[2]=$$resultat{$cisco_cpu_5m}; -## -## RRD management -## +print "CPU : $load[0] $load[1] $load[2] :"; -if ($o_g) { - $start=time; - if (! -e $rrd) { - create_rrd($rrd,3,$start,$step,0,"U","GAUGE"); +$exit_val=$ERRORS{"OK"}; +for (my $i=0;$i<3;$i++) { + if ( $load[$i] > $o_critL[$i] ) { + print " $load[$i] > $o_critL[$i] : CRITICAL"; + $exit_val=$ERRORS{"CRITICAL"}; + } + if ( $load[$i] > $o_warnL[$i] ) { + # output warn error only if no critical was found + if ($exit_val eq $ERRORS{"OK"}) { + print " $load[$i] > $o_warnL[$i] : WARNING"; + $exit_val=$ERRORS{"WARNING"}; } - update_rrd($rrd,$start,$load[0] ,$load[1], $load[2]); + } } +print " OK" if ($exit_val eq $ERRORS{"OK"}); +if (defined($o_perf)) { + print " | load_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] "; + print "load_1_min=$load[1]%;$o_warnL[1];$o_critL[1] "; + print "load_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n"; +} else { + print "\n"; +} + +exit $exit_val; +} + +############## Cisco Catalyst CPU check ################ + +if ($o_check_type eq "cata") { +my @oidlists = ($ciscocata_cpu_5m, $ciscocata_cpu_1m, $ciscocata_cpu_5s); +my $resultat = (Net::SNMP->VERSION < 4) ? + $session->get_request(@oidlists) + : $session->get_request(-varbindlist => \@oidlists); + +if (!defined($resultat)) { + printf("ERROR: Description table : %s.\n", $session->error); + $session->close; + exit $ERRORS{"UNKNOWN"}; +} + +$session->close; + +if (!defined ($$resultat{$ciscocata_cpu_5s})) { + print "No CPU information : UNKNOWN\n"; + exit $ERRORS{"UNKNOWN"}; +} + +my @load = undef; + +$load[0]=$$resultat{$ciscocata_cpu_5s}; +$load[1]=$$resultat{$ciscocata_cpu_1m}; +$load[2]=$$resultat{$ciscocata_cpu_5m}; print "CPU : $load[0] $load[1] $load[2] :"; @@ -447,15 +499,15 @@ for (my $i=0;$i<3;$i++) { if ( $load[$i] > $o_warnL[$i] ) { # output warn error only if no critical was found if ($exit_val eq $ERRORS{"OK"}) { - print " $load[$i] > $o_warnL[$i] : WARNING"; + print " $load[$i] > $o_warnL[$i] : WARNING"; $exit_val=$ERRORS{"WARNING"}; } } } print " OK" if ($exit_val eq $ERRORS{"OK"}); if (defined($o_perf)) { - print " | load_5_sec=$load[0]%;$o_warnL[0];$o_critL[0],"; - print "load_1_min=$load[1]%;$o_warnL[1];$o_critL[1],"; + print " | load_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] "; + print "load_1_min=$load[1]%;$o_warnL[1];$o_critL[1] "; print "load_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n"; } else { print "\n"; @@ -464,15 +516,70 @@ if (defined($o_perf)) { exit $exit_val; } -################## CPU for : AS/400 , Netsnmp, HP, Bluecoat, linkproof ########### -if ( $o_check_type =~ /netsc|as400|bc|nokia|hp|lp/ ) { +############## Netscreen CPU check ################ + +if ($o_check_type eq "nsc") { +my @oidlists = ($nsc_cpu_5m, $nsc_cpu_1m, $nsc_cpu_5s); +my $resultat = (Net::SNMP->VERSION < 4) ? + $session->get_request(@oidlists) + : $session->get_request(-varbindlist => \@oidlists); + +if (!defined($resultat)) { + printf("ERROR: Description table : %s.\n", $session->error); + $session->close; + exit $ERRORS{"UNKNOWN"}; +} + +$session->close; + +if (!defined ($$resultat{$nsc_cpu_5s})) { + print "No CPU information : UNKNOWN\n"; + exit $ERRORS{"UNKNOWN"}; +} + +my @load = undef; + +$load[0]=$$resultat{$nsc_cpu_5s}; +$load[1]=$$resultat{$nsc_cpu_1m}; +$load[2]=$$resultat{$nsc_cpu_5m}; + +print "CPU : $load[0] $load[1] $load[2] :"; + +$exit_val=$ERRORS{"OK"}; +for (my $i=0;$i<3;$i++) { + if ( $load[$i] > $o_critL[$i] ) { + print " $load[$i] > $o_critL[$i] : CRITICAL"; + $exit_val=$ERRORS{"CRITICAL"}; + } + if ( $load[$i] > $o_warnL[$i] ) { + # output warn error only if no critical was found + if ($exit_val eq $ERRORS{"OK"}) { + print " $load[$i] > $o_warnL[$i] : WARNING"; + $exit_val=$ERRORS{"WARNING"}; + } + } +} +print " OK" if ($exit_val eq $ERRORS{"OK"}); +if (defined($o_perf)) { + print " | cpu_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] "; + print "cpu_1_min=$load[1]%;$o_warnL[1];$o_critL[1] "; + print "cpu_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n"; +} else { + print "\n"; +} + +exit $exit_val; +} + +################## CPU for : AS/400 , Netsnmp, HP, Bluecoat, linkproof, fortigate ########### +if ( $o_check_type =~ /netsc|as400|bc|nokia|^hp$|lp|fg/ ) { # Get load table -my @oidlist = $cpu_oid{$o_check_type}; +my @oidlist = $cpu_oid{$o_check_type}; verb("Checking OID : @oidlist"); -my $resultat = (Net::SNMP->VERSION < 4) ? - $session->get_request(@oidlist) - : $session->get_request(-varbindlist => \@oidlist); +my $resultat = (Net::SNMP->VERSION < 4) ? + $session->get_request(@oidlist) + : $session->get_request(-varbindlist => \@oidlist); if (!defined($resultat)) { printf("ERROR: Description table : %s.\n", $session->error); $session->close; @@ -490,20 +597,7 @@ verb("OID returned $load"); # for AS400, divide by 100 if ($o_check_type eq "as400") {$load /= 100; }; # for Net-snmp : oid returned idle time so load = 100-idle. -if ($o_check_type eq "netsc") {$load = 100 - $load; }; - -## -## RRD management -## - -if ($o_g) { - $start=time; - if (! -e $rrd) { - create_rrd($rrd,1,$start,$step,0,"U","GAUGE"); - } - update_rrd($rrd,$start,$load); -} - +if ($o_check_type eq "netsc") {$load = 100 - $load; }; printf("CPU used %.1f%% (",$load); @@ -525,11 +619,68 @@ exit $exit_val; } +##### Checking hpux load +if ($o_check_type eq "hpux") { + +verb("Checking hpux load"); + +my @oidlists = ($hpux_load_1_min, $hpux_load_5_min, $hpux_load_15_min); +my $resultat = (Net::SNMP->VERSION < 4) ? + $session->get_request(@oidlists) + : $session->get_request(-varbindlist => \@oidlists); + +if (!defined($resultat)) { + printf("ERROR: Load table : %s.\n", $session->error); + $session->close; + exit $ERRORS{"UNKNOWN"}; +} + +$session->close; + +if (!defined ($$resultat{$hpux_load_1_min})) { + print "No Load information : UNKNOWN\n"; + exit $ERRORS{"UNKNOWN"}; +} + +my @load = undef; + +$load[0]=$$resultat{$hpux_load_1_min}/100; +$load[1]=$$resultat{$hpux_load_5_min}/100; +$load[2]=$$resultat{$hpux_load_15_min}/100; + +print "Load : $load[0] $load[1] $load[2] :"; + +$exit_val=$ERRORS{"OK"}; +for (my $i=0;$i<3;$i++) { + if ( $load[$i] > $o_critL[$i] ) { + print " $load[$i] > $o_critL[$i] : CRITICAL"; + $exit_val=$ERRORS{"CRITICAL"}; + } + if ( $load[$i] > $o_warnL[$i] ) { + # output warn error only if no critical was found + if ($exit_val eq $ERRORS{"OK"}) { + print " $load[$i] > $o_warnL[$i] : WARNING"; + $exit_val=$ERRORS{"WARNING"}; + } + } +} +print " OK" if ($exit_val eq $ERRORS{"OK"}); +if (defined($o_perf)) { + print " | load_1_min=$load[0]%;$o_warnL[0];$o_critL[0] "; + print "load_5_min=$load[1]%;$o_warnL[1];$o_critL[1] "; + print "load_15_min=$load[2]%;$o_warnL[2];$o_critL[2]\n"; +} else { + print "\n"; +} + +exit $exit_val; +} + ########## Standard cpu usage check ############ # Get desctiption table my $resultat = (Net::SNMP->VERSION < 4) ? - $session->get_table($base_proc) - : $session->get_table(Baseoid => $base_proc); + $session->get_table($base_proc) + : $session->get_table(Baseoid => $base_proc); if (!defined($resultat)) { printf("ERROR: Description table : %s.\n", $session->error); @@ -555,32 +706,20 @@ if ($ncpu==0) { $cpu_used /= $ncpu; -## -## RRD management -## - -if ($o_g) { - $start=time; - if (! -e $rrd) { - create_rrd($rrd,1,$start,$step,0,"U","GAUGE"); - } - update_rrd($rrd,$start,$cpu_used); -} - print "$ncpu CPU, ", $ncpu==1 ? "load" : "average load"; -printf(" %.1f",$cpu_used); +printf(" %.1f%%",$cpu_used); $exit_val=$ERRORS{"OK"}; if ($cpu_used > $o_crit) { - print " > $o_crit : CRITICAL"; + print " > $o_crit% : CRITICAL"; $exit_val=$ERRORS{"CRITICAL"}; } else { if ($cpu_used > $o_warn) { - print " > $o_warn : WARNING"; + print " > $o_warn% : WARNING"; $exit_val=$ERRORS{"WARNING"}; } } -print " < $o_warn : OK" if ($exit_val eq $ERRORS{"OK"}); +print " < $o_warn% : OK" if ($exit_val eq $ERRORS{"OK"}); (defined($o_perf)) ? print " | cpu_prct_used=$cpu_used%;$o_warn;$o_crit\n" : print "\n"; diff --git a/centreon-plugins/src/check_snmp_mem.pl b/centreon-plugins/src/check_snmp_mem.pl index 9b1b8c272..4cda8d2f3 100644 --- a/centreon-plugins/src/check_snmp_mem.pl +++ b/centreon-plugins/src/check_snmp_mem.pl @@ -1,11 +1,12 @@ -#!/usr/bin/perl -w +#!/usr/bin/perl -w ############################## check_snmp_mem ############## -# Version : 0.9 -# Date : Jul 20 2005 -# Author : Patrick Proy (patrick at proy.org) +# Version : 1.1 +# Date : Jul 09 2006 +# Author : Patrick Proy (nagios at proy.org) # Help : http://www.manubulon.com/nagios/ # Licence : GPL - http://www.fsf.org/licenses/gpl.txt -# TODO : snmpv3 +# Contrib : Jan Jungmann +# TODO : ################################################################# # # Help : ./check_snmp_mem.pl -h @@ -17,41 +18,29 @@ use Getopt::Long; # Nagios specific -use lib "@NAGIOS_PLUGINS@"; +use lib "/usr/local/nagios/libexec"; use utils qw(%ERRORS $TIMEOUT); #my $TIMEOUT = 15; #my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4); -# Oreon specific - -if (eval "require centreon" ) { - use centreon qw(get_parameters create_rrd update_rrd &is_valid_serviceid); - use vars qw($VERSION %centreon); - %centreon=get_parameters(); -} else { - print "Unable to load centreon perl module\n"; - exit $ERRORS{'UNKNOWN'}; -} - -my $pathtorrdbase = $centreon{GLOBAL}{DIR_RRDTOOL}; - # SNMP Datas -# Net-snmp memory +# Net-snmp memory my $nets_ram_free = "1.3.6.1.4.1.2021.4.6.0"; # Real memory free my $nets_ram_total = "1.3.6.1.4.1.2021.4.5.0"; # Real memory total +my $nets_ram_cache = "1.3.6.1.4.1.2021.4.15.0"; # Real memory cached my $nets_swap_free = "1.3.6.1.4.1.2021.4.4.0"; # swap memory free my $nets_swap_total = "1.3.6.1.4.1.2021.4.3.0"; # Swap memory total -my @nets_oids = ($nets_ram_free,$nets_ram_total,$nets_swap_free,$nets_swap_total); +my @nets_oids = ($nets_ram_free,$nets_ram_total,$nets_swap_free,$nets_swap_total,$nets_ram_cache); -# Cisco +# Cisco my $cisco_mem_pool = "1.3.6.1.4.1.9.9.48.1.1.1"; # Cisco memory pool my $cisco_index = "1.3.6.1.4.1.9.9.48.1.1.1.2"; # memory pool name and index my $cisco_valid = "1.3.6.1.4.1.9.9.48.1.1.1.4"; # Valid memory if 1 my $cisco_used = "1.3.6.1.4.1.9.9.48.1.1.1.5"; # Used memory -my $cisco_free = "1.3.6.1.4.1.9.9.48.1.1.1.6"; # Used memory +my $cisco_free = "1.3.6.1.4.1.9.9.48.1.1.1.6"; # Free memory # .1 : type, .2 : name, .3 : alternate, .4 : valid, .5 : used, .6 : free, .7 : max free # HP Procurve @@ -62,7 +51,7 @@ my $hp_mem_total = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.5"; # Total Bytes my $hp_mem_free = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.6"; # Free Bytes my $hp_mem_free_seg = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.3"; # Free segments -# AS/400 +# AS/400 # Windows NT/2K/(XP?) @@ -71,7 +60,7 @@ my $hp_mem_free_seg = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.3"; # Free segments # Globals -my $Version='0.9'; +my $Version='1.1'; my $o_host = undef; # hostname my $o_community = undef; # community @@ -89,28 +78,23 @@ my $o_crit= undef; # Critical level option my $o_critR= undef; # critical level for Real memory my $o_critS= undef; # critical level for swap my $o_perf= undef; # Performance data option -my $o_timeout= 5; # Default 5s Timeout +my $o_cache= undef; # Include cached memory as used memory +my $o_timeout= undef; # Timeout (Default 5) my $o_version2= undef; # use snmp v2c # SNMPv3 specific my $o_login= undef; # Login for snmpv3 my $o_passwd= undef; # Pass for snmpv3 - -# Oreon specific -my $o_step= undef; -my $o_g= undef; -my $o_S= undef; -my $step= undef; -my $rrd= undef; -my $start= undef; -my $ServiceId= undef; - +my $v3protocols=undef; # V3 protocol list. +my $o_authproto='md5'; # Auth protocol +my $o_privproto='des'; # Priv protocol +my $o_privpass= undef; # priv password # functions sub p_version { print "check_snmp_mem version : $Version\n"; } sub print_usage { - print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd) [-p ] -w -c [-I|-N|-E] [-f] [-t ] [-V]\n"; + print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd [-X pass -L ,]) [-p ] -w -c [-I|-N|-E] [-f] [-m] [-t ] [-V]\n"; } sub isnnum { # Return true if arg is not a number @@ -125,7 +109,7 @@ sub round ($$) { sub help { print "\nSNMP Memory Monitor for Nagios version ",$Version,"\n"; - print "(c)2004 to my cat Ratoune - Author: Patrick Proy\n\n"; + print "(c)2004-2006 to my cat Ratoune - Author: Patrick Proy\n\n"; print_usage(); print <, + : Authentication protocol (md5|sha : default md5) + : Priv protocole (des|aes : default des) -P, --port=PORT SNMP port (Default 161) -w, --warn=INTEGER | INT,INT - warning level for memory in percent (0 for no checks) - Default (-N switch) : comma separated level for Real Memory and Swap + warning level for memory in percent (0 for no checks) + Default (-N switch) : comma separated level for Real Memory and Swap -I switch : warning level -c, --crit=INTEGER | INT,INT critical level for memory in percent (0 for no checks) - Default (-N switch) : comma separated level for Real Memory and Swap + Default (-N switch) : comma separated level for Real Memory and Swap -I switch : critical level -N, --netsnmp (default) - check linux memory & swap provided by Net SNMP + check linux memory & swap provided by Net SNMP +-m, --memcache + include cached memory in used memory (only with Net-SNMP) -I, --cisco check cisco memory (sum of all memory pools) -E, --hp @@ -164,9 +154,6 @@ sub help { timeout for SNMP in seconds (Default: 5) -V, --version prints version number --g (--rrdgraph) Create a rrd base if necessary and add datas into this one ---rrd_step Specifies the base interval in seconds with which data will be fed into the RRD (300 by default) --S (--ServiceId) Oreon Service Id EOT } @@ -181,7 +168,7 @@ $SIG{'ALRM'} = sub { sub check_options { Getopt::Long::Configure ("bundling"); - GetOptions( + GetOptions( 'v' => \$o_verb, 'verbose' => \$o_verb, 'h' => \$o_help, 'help' => \$o_help, 'H:s' => \$o_host, 'hostname:s' => \$o_host, @@ -189,7 +176,9 @@ sub check_options { 'C:s' => \$o_community, 'community:s' => \$o_community, 'l:s' => \$o_login, 'login:s' => \$o_login, 'x:s' => \$o_passwd, 'passwd:s' => \$o_passwd, - 't:i' => \$o_timeout, 'timeout:i' => \$o_timeout, + 'X:s' => \$o_privpass, 'privpass:s' => \$o_privpass, + 'L:s' => \$v3protocols, 'protocols:s' => \$v3protocols, + 't:i' => \$o_timeout, 'timeout:i' => \$o_timeout, 'V' => \$o_version, 'version' => \$o_version, 'I' => \$o_cisco, 'cisco' => \$o_cisco, 'N' => \$o_netsnmp, 'netsnmp' => \$o_netsnmp, @@ -197,40 +186,50 @@ sub check_options { '2' => \$o_version2, 'v2c' => \$o_version2, 'c:s' => \$o_crit, 'critical:s' => \$o_crit, 'w:s' => \$o_warn, 'warn:s' => \$o_warn, - 'f' => \$o_perf, 'perfdata' => \$o_perf, -# For Oreon rrdtool graph - "rrd_step:s" => \$o_step, - "g" => \$o_g, "rrdgraph" => \$o_g, - "S=s" => \$o_S, "ServiceId=s" => \$o_S + 'm' => \$o_cache, 'memcache' => \$o_cache, + 'f' => \$o_perf, 'perfdata' => \$o_perf ); if (defined ($o_help) ) { help(); exit $ERRORS{"UNKNOWN"}}; if (defined($o_version)) { p_version(); exit $ERRORS{"UNKNOWN"}}; - if ( ! defined($o_host) ) # check host and filter + if ( ! defined($o_host) ) # check host and filter { print "No host defined!\n";print_usage(); exit $ERRORS{"UNKNOWN"}} # check snmp information if ( !defined($o_community) && (!defined($o_login) || !defined($o_passwd)) ) - { print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} - #Check Warning and crit are present + { print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + if ((defined($o_login) || defined($o_passwd)) && (defined($o_community) || defined($o_version2)) ) + { print "Can't mix snmp v1,2c,3 protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + if (defined ($v3protocols)) { + if (!defined($o_login)) { print "Put snmp V3 login info with protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + my @v3proto=split(/,/,$v3protocols); + if ((defined ($v3proto[0])) && ($v3proto[0] ne "")) {$o_authproto=$v3proto[0]; } # Auth protocol + if (defined ($v3proto[1])) {$o_privproto=$v3proto[1]; } # Priv protocol + if ((defined ($v3proto[1])) && (!defined($o_privpass))) { + print "Put snmp V3 priv login info with priv protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + } + if (defined($o_timeout) && (isnnum($o_timeout) || ($o_timeout < 2) || ($o_timeout > 60))) + { print "Timeout must be >1 and <60 !\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + if (!defined($o_timeout)) {$o_timeout=5;} + #Check Warning and crit are present if ( ! defined($o_warn) || ! defined($o_crit)) { print "Put warning and critical values!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} # Get rid of % sign - $o_warn =~ s/\%//g; + $o_warn =~ s/\%//g; $o_crit =~ s/\%//g; # if -N or -E switch , undef $o_netsnmp if (defined($o_cisco) || defined($o_hp) ) { $o_netsnmp=undef; - if ( isnnum($o_warn) || isnnum($o_crit)) + if ( isnnum($o_warn) || isnnum($o_crit)) { print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"} } - if ( ($o_crit != 0) && ($o_warn > $o_crit) ) + if ( ($o_crit != 0) && ($o_warn > $o_crit) ) { print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}} } if (defined($o_netsnmp)) { my @o_warnL=split(/,/ , $o_warn); my @o_critL=split(/,/ , $o_crit); - if (($#o_warnL != 1) || ($#o_critL != 1)) + if (($#o_warnL != 1) || ($#o_critL != 1)) { print "2 warnings and critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}} for (my $i=0;$i<2;$i++) { - if ( isnnum($o_warnL[$i]) || isnnum($o_critL[$i])) + if ( isnnum($o_warnL[$i]) || isnnum($o_critL[$i])) { print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"} } if (($o_critL[$i]!= 0) && ($o_warnL[$i] > $o_critL[$i])) { print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}} @@ -240,24 +239,13 @@ sub check_options { $o_warnR=$o_warnL[0];$o_warnS=$o_warnL[1]; $o_critR=$o_critL[0];$o_critS=$o_critL[1]; } - - ###### Oreon ####### - - if (!defined($o_S)) { $o_S="1_1" } - $ServiceId = is_valid_serviceid($o_S); - - if (!defined($o_step)) { $o_step="300" } - $step = $1 if ($o_step =~ /(\d+)/); - + } ########## MAIN ####### check_options(); -$rrd = $pathtorrdbase.$ServiceId.".rrd"; -$start=time; - # Check gobal timeout if snmp screws up if (defined($TIMEOUT)) { verb("Alarm at $TIMEOUT"); @@ -271,19 +259,33 @@ if (defined($TIMEOUT)) { my ($session,$error); if ( defined($o_login) && defined($o_passwd)) { # SNMPv3 login - verb("SNMPv3 login"); - ($session, $error) = Net::SNMP->session( + if (!defined ($o_privpass)) { + verb("SNMPv3 AuthNoPriv login : $o_login, $o_authproto"); + ($session, $error) = Net::SNMP->session( -hostname => $o_host, -version => '3', -username => $o_login, -authpassword => $o_passwd, - -authprotocol => 'md5', - -privpassword => $o_passwd, + -authprotocol => $o_authproto, -timeout => $o_timeout - ); + ); + } else { + verb("SNMPv3 AuthPriv login : $o_login, $o_authproto, $o_privproto"); + ($session, $error) = Net::SNMP->session( + -hostname => $o_host, + -version => '3', + -username => $o_login, + -authpassword => $o_passwd, + -authprotocol => $o_authproto, + -privpassword => $o_privpass, + -privprotocol => $o_privproto, + -timeout => $o_timeout + ); + } } else { if (defined ($o_version2)) { # SNMPv2 Login + verb("SNMP v2c login"); ($session, $error) = Net::SNMP->session( -hostname => $o_host, -version => 2, @@ -292,8 +294,8 @@ if ( defined($o_login) && defined($o_passwd)) { -timeout => $o_timeout ); } else { - # SNMPV1 login + verb("SNMP v1 login"); ($session, $error) = Net::SNMP->session( -hostname => $o_host, -community => $o_community, @@ -317,7 +319,7 @@ if (defined ($o_cisco)) { $resultat = (Net::SNMP->VERSION < 4) ? $session->get_table($cisco_mem_pool) :$session->get_table(Baseoid => $cisco_mem_pool); - + if (!defined($resultat)) { printf("ERROR: Description table : %s.\n", $session->error); $session->close; @@ -327,55 +329,50 @@ if (defined ($o_cisco)) { my $nindex=0; foreach my $key ( keys %$resultat) { verb("OID : $key, Desc : $$resultat{$key}"); - if ( $key =~ /$cisco_index/ ) { + if ( $key =~ /$cisco_index/ ) { @oid=split (/\./,$key); $index[$nindex++] = pop(@oid); } } - + # Check if at least 1 memory pool exists - if ($nindex == 0) { + if ($nindex == 0) { printf("ERROR: No memory pools found"); $session->close; exit $ERRORS{"UNKNOWN"}; } - # Consolidate the datas - my ($used,$free)=(0,0); + # Test every memory pool my ($c_output,$prct_free)=(undef,undef); + my ($warn_s,$crit_s)=(0,0); + my ($used,$free)=(0,0); foreach (@index) { + $c_output .="," if defined ($c_output); if ( $$resultat{$cisco_valid . "." . $_} == 1 ) { - $c_output .="," if defined ($c_output); $used += $$resultat{$cisco_used . "." . $_}; $free += $$resultat{$cisco_free . "." . $_}; - $c_output .= $$resultat{$cisco_index . "." . $_} . ":" - .round($$resultat{$cisco_used . "." . $_}*100/($$resultat{$cisco_free . "." . $_}+$$resultat{$cisco_used . "." . $_}) ,0) - . "%"; + $prct_free=round($$resultat{$cisco_used . "." . $_}*100/($$resultat{$cisco_free . "." . $_}+$$resultat{$cisco_used . "." . $_}) ,0); + $c_output .= $$resultat{$cisco_index . "." . $_} . ":" . $prct_free . "%"; + if (($o_crit!=0)&&($o_crit <= $prct_free)) { + $crit_s =1; + } elsif (($o_warn!=0)&&($o_warn <= $prct_free)) { + $warn_s=1; + } + } else { + $c_output .= $$resultat{$cisco_index . "." . $_} . ": INVALID"; + $crit_s =1; } } - my $total=$used+$free; + my $total=$used+$free; $prct_free=round($used*100/($total),0); - verb("Used : $used, Free: $free, Output : $c_output"); - - ## - ## RRD management - ## - - if ($o_g) { - $start=time; - if (! -e $rrd) { - create_rrd($rrd,1,$start,$step,0,100,"GAUGE"); - } - update_rrd($rrd,$start,$prct_free); - } - + verb("Total used : $used, free: $free, output : $c_output"); my $c_status="OK"; $c_output .=" : " . $prct_free ."% : "; - if (($o_crit!=0)&&($o_crit <= $prct_free)) { + if ($crit_s == 1 ) { $c_output .= " > " . $o_crit ; $c_status="CRITICAL"; } else { - if (($o_warn!=0)&&($o_warn <= $prct_free)) { + if ($warn_s == 1 ) { $c_output.=" > " . $o_warn; $c_status="WARNING"; } @@ -383,11 +380,11 @@ if (defined ($o_cisco)) { $c_output .= " ; ".$c_status; if (defined ($o_perf)) { $c_output .= " | ram_used=" . $used.";"; - $c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";"; + $c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";"; $c_output .= ($o_crit ==0)? ";" : round($o_crit * $total/100,0).";"; $c_output .= "0;" . $total ; - } - $session->close; + } + $session->close; print "$c_output \n"; exit $ERRORS{$c_status}; } @@ -399,7 +396,7 @@ if (defined ($o_hp)) { $resultat = (Net::SNMP->VERSION < 4) ? $session->get_table($hp_mem_pool) :$session->get_table(Baseoid => $hp_mem_pool); - + if (!defined($resultat)) { printf("ERROR: Description table : %s.\n", $session->error); $session->close; @@ -409,14 +406,14 @@ if (defined ($o_hp)) { my $nindex=0; foreach my $key ( keys %$resultat) { verb("OID : $key, Desc : $$resultat{$key}"); - if ( $key =~ /$hp_mem_index/ ) { + if ( $key =~ /$hp_mem_index/ ) { @oid=split (/\./,$key); $index[$nindex++] = pop(@oid); } } - + # Check if at least 1 memory slots exists - if ($nindex == 0) { + if ($nindex == 0) { printf("ERROR: No memory slots found"); $session->close; exit $ERRORS{"UNKNOWN"}; @@ -429,28 +426,15 @@ if (defined ($o_hp)) { $c_output .="," if defined ($c_output); $total += $$resultat{$hp_mem_total . "." . $_}; $free += $$resultat{$hp_mem_free . "." . $_}; - $c_output .= "Slot " . $$resultat{$hp_mem_index . "." . $_} . ":" - .round( - 100 - ($$resultat{$hp_mem_free . "." . $_} *100 / + $c_output .= "Slot " . $$resultat{$hp_mem_index . "." . $_} . ":" + .round( + 100 - ($$resultat{$hp_mem_free . "." . $_} *100 / $$resultat{$hp_mem_total . "." . $_}) ,0) . "%"; } - my $used = $total - $free; + my $used = $total - $free; $prct_free=round($used*100/($total),0); verb("Used : $used, Free: $free, Output : $c_output"); - - ## - ## RRD management - ## - - if ($o_g) { - $start=time; - if (! -e $rrd) { - create_rrd($rrd,1,$start,$step,0,100,"GAUGE"); - } - update_rrd($rrd,$start,$prct_free); - } - my $c_status="OK"; $c_output .=" : " . $prct_free ."% : "; if (($o_crit!=0)&&($o_crit <= $prct_free)) { @@ -465,11 +449,11 @@ if (defined ($o_hp)) { $c_output .= " ; ".$c_status; if (defined ($o_perf)) { $c_output .= " | ram_used=" . $used.";"; - $c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";"; + $c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";"; $c_output .= ($o_crit ==0)? ";" : round($o_crit * $total/100,0).";"; $c_output .= "0;" . $total ; - } - $session->close; + } + $session->close; print "$c_output \n"; exit $ERRORS{$c_status}; } @@ -481,38 +465,32 @@ if (defined ($o_netsnmp)) { $resultat = (Net::SNMP->VERSION < 4) ? $session->get_request(@nets_oids) :$session->get_request(-varbindlist => \@nets_oids); - + if (!defined($resultat)) { printf("ERROR: netsnmp : %s.\n", $session->error); $session->close; exit $ERRORS{"UNKNOWN"}; } - + my ($realused,$swapused)=(undef,undef); + + $realused= defined($o_cache) ? + ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free})/$$resultat{$nets_ram_total} + : + ($$resultat{$nets_ram_total}-($$resultat{$nets_ram_free}+$$resultat{$nets_ram_cache}))/$$resultat{$nets_ram_total}; + + if($$resultat{$nets_ram_total} == 0) { $realused = 0; } - $realused= ($$resultat{$nets_ram_total} == 0) ? 0 : - ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free})/$$resultat{$nets_ram_total}; $swapused= ($$resultat{$nets_swap_total} == 0) ? 0 : - ($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free})/$$resultat{$nets_swap_total}; + ($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free})/$$resultat{$nets_swap_total}; $realused=round($realused*100,0); $swapused=round($swapused*100,0); - verb ("Ram : $$resultat{$nets_ram_free} / $$resultat{$nets_ram_total} : $realused"); + defined($o_cache) ? + verb ("Ram : $$resultat{$nets_ram_free} / $$resultat{$nets_ram_total} : $realused") + : + verb ("Ram : $$resultat{$nets_ram_free} ($$resultat{$nets_ram_cache} cached) / $$resultat{$nets_ram_total} : $realused"); verb ("Swap : $$resultat{$nets_swap_free} / $$resultat{$nets_swap_total} : $swapused"); - - ## - ## RRD management - ## - - if ($o_g) { - $start=time; - if (! -e $rrd) { - create_rrd($rrd,2,$start,$step,0,100,"GAUGE"); - } - update_rrd($rrd,$start,$realused, $swapused ); - } - - - + my $n_status="OK"; my $n_output="Ram : " . $realused . "%, Swap : " . $swapused . "% :"; if ((($o_critR!=0)&&($o_critR <= $realused)) || (($o_critS!=0)&&($o_critS <= $swapused))) { @@ -524,19 +502,24 @@ if (defined ($o_netsnmp)) { $n_status="WARNING"; } } - $n_output .= " ; ".$n_status; + $n_output .= " ; ".$n_status; if (defined ($o_perf)) { - $n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}).";"; - $n_output .= ($o_warnR ==0)? ";" : round($o_warnR * $$resultat{$nets_ram_total}/100,0).";"; - $n_output .= ($o_critR ==0)? ";" : round($o_critR * $$resultat{$nets_ram_total}/100,0).";"; + if (defined ($o_cache)) { + $n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}).";"; + } + else { + $n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}-$$resultat{$nets_ram_cache}).";"; + } + $n_output .= ($o_warnR ==0)? ";" : round($o_warnR * $$resultat{$nets_ram_total}/100,0).";"; + $n_output .= ($o_critR ==0)? ";" : round($o_critR * $$resultat{$nets_ram_total}/100,0).";"; $n_output .= "0;" . $$resultat{$nets_ram_total}. " "; $n_output .= "swap_used=" . ($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free}).";"; - $n_output .= ($o_warnS ==0)? ";" : round($o_warnS * $$resultat{$nets_swap_total}/100,0).";"; - $n_output .= ($o_critS ==0)? ";" : round($o_critS * $$resultat{$nets_swap_total}/100,0).";"; + $n_output .= ($o_warnS ==0)? ";" : round($o_warnS * $$resultat{$nets_swap_total}/100,0).";"; + $n_output .= ($o_critS ==0)? ";" : round($o_critS * $$resultat{$nets_swap_total}/100,0).";"; $n_output .= "0;" . $$resultat{$nets_swap_total}; - } + } $session->close; print "$n_output \n"; exit $ERRORS{$n_status}; -} +} diff --git a/centreon-plugins/src/check_snmp_storage.pl b/centreon-plugins/src/check_snmp_storage.pl index 861e7a1bb..dd4a469d5 100644 --- a/centreon-plugins/src/check_snmp_storage.pl +++ b/centreon-plugins/src/check_snmp_storage.pl @@ -1,662 +1,669 @@ -#!/usr/bin/perl -w -############################## check_snmp_storage ############## -# Version : 1.1.1.4 - DEV -# Date : Aug 2 2005 -# Author : Patrick Proy ( patrick at proy.org) -# Help : http://www.manubulon.com/nagios/ -# Licence : GPL - http://www.fsf.org/licenses/gpl.txt -# TODO : better options in snmpv3 -################################################################# -# -# help : ./check_snmp_storage -h - -use strict; -use Net::SNMP; -use Getopt::Long; - -# Nagios specific - -use lib "@NAGIOS_PLUGINS@"; -use utils qw(%ERRORS $TIMEOUT); -#my $TIMEOUT = 15; -#my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4); - -# Oreon specific - -#use lib "@NAGIOS_PLUGINS@"; -if (eval "require centreon" ) { - use centreon qw(get_parameters create_rrd update_rrd &is_valid_serviceid); - use vars qw($VERSION %centreon); - %centreon=get_parameters(); -} else { - print "Unable to load centreon perl module\n"; - exit $ERRORS{'UNKNOWN'}; -} - -my $pathtorrdbase = $centreon{GLOBAL}{DIR_RRDTOOL}; - -# SNMP Datas -my $storage_table= '1.3.6.1.2.1.25.2.3.1'; -my $storagetype_table = '1.3.6.1.2.1.25.2.3.1.2'; -my $index_table = '1.3.6.1.2.1.25.2.3.1.1'; -my $descr_table = '1.3.6.1.2.1.25.2.3.1.3'; -my $size_table = '1.3.6.1.2.1.25.2.3.1.5.'; -my $used_table = '1.3.6.1.2.1.25.2.3.1.6.'; -my $alloc_units = '1.3.6.1.2.1.25.2.3.1.4.'; - -#Storage types definition - from /usr/share/snmp/mibs/HOST-RESOURCES-TYPES.txt -my %hrStorage; -$hrStorage{"Other"} = '1.3.6.1.2.1.25.2.1.1'; -$hrStorage{"1.3.6.1.2.1.25.2.1.1"} = 'Other'; -$hrStorage{"Ram"} = '1.3.6.1.2.1.25.2.1.2'; -$hrStorage{"1.3.6.1.2.1.25.2.1.2"} = 'Ram'; -$hrStorage{"VirtualMemory"} = '1.3.6.1.2.1.25.2.1.3'; -$hrStorage{"1.3.6.1.2.1.25.2.1.3"} = 'VirtualMemory'; -$hrStorage{"FixedDisk"} = '1.3.6.1.2.1.25.2.1.4'; -$hrStorage{"1.3.6.1.2.1.25.2.1.4"} = 'FixedDisk'; -$hrStorage{"RemovableDisk"} = '1.3.6.1.2.1.25.2.1.5'; -$hrStorage{"1.3.6.1.2.1.25.2.1.5"} = 'RemovableDisk'; -$hrStorage{"FloppyDisk"} = '1.3.6.1.2.1.25.2.1.6'; -$hrStorage{"1.3.6.1.2.1.25.2.1.6"} = 'FloppyDisk'; -$hrStorage{"CompactDisk"} = '1.3.6.1.2.1.25.2.1.7'; -$hrStorage{"1.3.6.1.2.1.25.2.1.7"} = 'CompactDisk'; -$hrStorage{"RamDisk"} = '1.3.6.1.2.1.25.2.1.8'; -$hrStorage{"1.3.6.1.2.1.25.2.1.8"} = 'RamDisk'; -$hrStorage{"FlashMemory"} = '1.3.6.1.2.1.25.2.1.9'; -$hrStorage{"1.3.6.1.2.1.25.2.1.9"} = 'FlashMemory'; -$hrStorage{"NetworkDisk"} = '1.3.6.1.2.1.25.2.1.10'; -$hrStorage{"1.3.6.1.2.1.25.2.1.10"} = 'NetworkDisk'; - -# Globals - -my $Name='check_snmp_storage'; -my $Version='1.1.1.3'; - -my $o_host = undef; # hostname -my $o_community = undef; # community -my $o_port = 161; # port -my $o_version2 = undef; #use snmp v2c -my $o_descr = undef; # description filter -my $o_storagetype = undef; # parse storage type also -my $o_warn = undef; # warning limit -my $o_crit= undef; # critical limit -my $o_help= undef; # wan't some help ? -my $o_type= undef; # pl, pu, mbl, mbu -my @o_typeok= ("pu","pl","bu","bl"); # valid values for o_type -my $o_verb= undef; # verbose mode -my $o_version= undef; # print version -my $o_noreg= undef; # Do not use Regexp for name -my $o_sum= undef; # add all storage before testing -my $o_index= undef; # Parse index instead of description -my $o_negate= undef; # Negate the regexp if set -my $o_timeout= 5; # Default 5s Timeout -my $o_perf= undef; # Output performance data -my $o_short= undef; # Short output parameters -my @o_shortL= undef; # output type,where,cut -# SNMP V3 specific -my $o_login= undef; # snmp v3 login -my $o_passwd= undef; # snmp v3 passwd -# centreon specific -my $o_step= undef; -my $o_g= undef; -my $o_S= undef; -my $step= undef; -my $rrd= undef; -my $rrd_max= undef; -my $start= undef; -my $ServiceId= undef; -my @rrd_data= undef; - -# functions - -sub p_version { print "$Name version : $Version\n"; } - -sub print_usage { - print "Usage: $Name [-v] -H -C [-2] | (-l login -x passwd) [-p ] -m [-q storagetype] -w -c [-t ] [-T pl|pu|bl|bu ] [-r] [-s] [-i] [-e] [-S 0|1[,1,]]\n"; -} - -sub round ($$) { - sprintf "%.$_[1]f", $_[0]; -} - -sub is_pattern_valid { # Test for things like "" or "+5-i" - my $pat = shift; - if (!defined($pat)) { $pat=" ";} # Just to get rid of compilation time warnings - return eval { "" =~ /$pat/; 1 } || 0; -} - -# Get the alarm signal (just in case snmp timout screws up) -$SIG{'ALRM'} = sub { - print ("ERROR: General time-out (Alarm signal)\n"); - exit $ERRORS{"UNKNOWN"}; -}; - -sub isnnum { # Return true if arg is not a number - my $num = shift; - if ( $num =~ /^-?(\d+\.?\d*)|(^\.\d+)$/ ) { return 0 ;} - return 1; -} - -sub help { - print "\nSNMP Disk Monitor for Nagios version ",$Version,"\n"; - print "(c)2004 to my cat Ratoune - Author : Patrick Proy\n\n"; - print_usage(); - print < warn and critical if %used > crit --v, --verbose - print extra debugging information (and lists all storages) --h, --help - print this help message --H, --hostname=HOST - name or IP address of host to check --C, --community=COMMUNITY NAME - community name for the host's SNMP agent (implies SNMP v1) --2, --v2c - Use snmp v2c --l, --login=LOGIN - Login for snmpv3 authentication (implies v3 protocol with MD5) --x, --passwd=PASSWD - Password for snmpv3 authentication --p, --port=PORT - SNMP port (Default 161) --m, --name=NAME - Name in description OID (can be mounpoints '/home' or 'Swap Space'...) - This is treated as a regexp : -m /var will match /var , /var/log, /opt/var ... - Test it before, because there are known bugs (ex : trailling /) - No trailing slash for mountpoints ! --q, --storagetype=[Other|Ram|VirtualMemory|FixedDisk|RemovableDisk|FloppyDisk - CompactDisk|RamDisk|FlashMemory|NetworkDisk] - Also check the storage type in addition of the name - It is possible to use regular expressions ( "FixedDisk|FloppyDisk" ) --r, --noregexp - Do not use regexp to match NAME in description OID --s, --sum - Add all storages that match NAME (used space and total space) - THEN make the tests. --i, --index - Parse index table instead of description table to select storage --e, --exclude - Select all storages except the one(s) selected by -m - No action on storage type selection --T, --type=TYPE - pl : calculate percent left - pu : calculate percent used (Default) - bl : calculate MegaBytes left - bu : calculate MegaBytes used --w, --warn=INTEGER - percent / MB of disk used to generate WARNING state - you can add the % sign --c, --critical=INTEGER - percent / MB of disk used to generate CRITICAL state - you can add the % sign --f, --perfparse - Perfparse compatible output --S, --short=[,,] - : Make the output shorter : - 0 : only print the global result except the disk in warning or critical - ex: "< 80% : OK" - 1 : Don't print all info for every disk - ex : "/ : 66 %used (< 80) : OK" - : (optional) if = 1, put the OK/WARN/CRIT at the beginning - : take the first caracters or last if n<0 --t, --timeout=INTEGER - timeout for SNMP in seconds (Default: 5) --V, --version - prints version number --g (--rrdgraph) Create a rrd base if necessary and add datas into this one ---rrd_step Specifies the base interval in seconds with which data will be fed into the RRD (300 by default) --S (--ServiceId) centreon Service Id - -Note : - with T=pu or T=bu : OK < warn < crit - with T=pl ot T=bl : crit < warn < OK - - If multiple storage are selected, the worse condition will be returned - i.e if one disk is critical, the return is critical - - example : - Browse storage list :