diff --git a/Changelog b/Changelog new file mode 100644 index 0000000..f939bca --- /dev/null +++ b/Changelog @@ -0,0 +1,75 @@ +################################ +Release 1.1.1 / April 2007 : + +Added documentation in doc/ directory : (html format). + +Scripts, actual CVS version and changelog : +check_snmp_mem.pl : 1.3 +check_snmp_vrrp.pl : 1.3 +check_snmp_linkproof_nhr.pl : 1.1 +check_snmp_process.pl : 1.5 + Makina Corpus contribs : snmpv3 enhancements, msg size parameter (-o) +check_snmp_boostedge.pl : 1.2 (No major changes) +check_snmp_nsbox.pl : 1.2 (No major changes) +check_snmp_css_main.pl : 1.1 +check_snmp_cpfw.pl : 1.7 + Added active/backup detection with SecureXL + Added SIG{ALRM} sub and small bug +check_snmp_int.pl : 1.18 + Added bigint module to take care of 64 bits counters + check usage of snmp v2c or v3 when you use 64 bit counters (-g) + Added SIG{ALRM} sub + Added warning and critical levels in performance output + Added labels before in, out speed and errors (M. Berger contrib) + Added highperf counters option (-g) + Added SNMP packet length option (-o) + Added warning/critical levels in Mbps, MBps, Gbps, GBps options (-M, -G) + Added warning/critical levels in % of interface speed (-u) + Added performance output interface speed option (-S) + Added performance output in Bps or bps (-Y) + Added performance output in % of interface speed (-y) + Added port for snmpv3 (R. Leroy contrib) +check_snmp_storage.pl : 1.6 + Makina Corpus contribs : snmpv3 port parameter, msg size parameter (-o) +check_snmp_win.pl : 0.6 +check_snmp_css.pl : 1.3 +check_snmp_env.pl : 1.7 + Added SIG{ALRM} sub + Added voltage & temp checks on Cisco + Added Foundry checks +check_snmp_load.pl : 1.9 + Added SIG{ALRM} sub and % sign in output + Bug in performance output + +################################ +Release 1.1 : + +Added scripts : +- check_snmp_css_main : to get all services name and OID one time, then check only one OID with check_snmp_css. Reduces css cpu. + +Corrected bugs : +- install.sh (Net::snmp detection) +- corrected bugs in check_snmp_css +- Added ironport checks in check_snmp_env +- Added hpux in check_snmp_load +- Bugs in check_snmp_int (specially for Windows). + +Scripts and versions : +check_snmp_mem.pl : 1.3 +check_snmp_vrrp.pl : 1.3 +check_snmp_linkproof_nhr.pl : 1.1 +check_snmp_process.pl : 1.4 +check_snmp_boostedge.pl : 1.1 +check_snmp_nsbox.pl : 1.1 +check_snmp_css_main.pl : 1.1 +check_snmp_cpfw.pl : 1.4 +check_snmp_int.pl : 1.10 +check_snmp_storage.pl : 1.5 +check_snmp_win.pl : 0.6 +check_snmp_css.pl : 1.3 +check_snmp_env.pl : 1.4 +check_snmp_load.pl : 1.9 + +################################ +Release 1.0 : +Initial file release. diff --git a/README b/README index 7429550..48c81c8 100644 --- a/README +++ b/README @@ -1,46 +1,38 @@ -Nagios SNMP plugins 1.0 README +Nagios SNMP plugins 1.1.1 README ------------------------------ Nagios SNMP plugins is a set of Nagios plugins to check hosts/devices using snmp protocol. -http://www.manubulon.com/nagios for more details. +http://nagios.manubulon.com for more details. Requirements: ------------- -- perl +- perl in /usr/bin/perl - Net::SNMP and Getopt::Long - File utils.pm in Nagios plugin directory (default /usr/local/nagios/libexec) +- Nagios user can write files in /tmp/ directory + +Perl, default directory and temp files location can be changed using the install.sh script. Installation: ------------- -You can simply copy the files to the Nagios Plugin directory if it is in /usr/local/nagios/libexec. - -You can also use the "install.sh" script provided in this directory to install the plugins. -Type : "./install.sh" to install all the plugins or "./install.sh " for a specific one. - -The script will check for dependencies and ask for Nagios and temp directories. -It will modify the scripts dependding on these answers and install the scripts. - -By default, the scripts will consider : -- perl is in /usr/bin/perl -- Net::SNMP and Getopt::Long -- Nagios plugins (and file utils.pm) are in /usr/local/nagios/libexec -- Temp files will be written in /tmp +Read INSTALL file Help and support: ----------------- -Help files, examples and manual : http://www.manubulon.com/nagios/ -FAQ : http://www.manubulon.com/nagios/faq.html -Mailling list, forum : https://sourceforge.net/projects/nagios-snmp/ +Help files, config examples and FAQ in the doc/ directory +http://nagios.manubulon.com/ +FAQ : http://nagios.manubulon.com/faq.html +Mailling list, forum : http://sourceforge.net/projects/nagios-snmp/ Legal stuff: ------------ - Nagios SNMP plugins version 1.0, Copyright (C) 2004-2006 Patrick Proy (nagios at proy.org) + Nagios SNMP plugins version 1.1.1, Copyright (C) 2004-2007 Patrick Proy (nagios at proy.org) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as diff --git a/check_snmp_boostedge.pl b/check_snmp_boostedge.pl index 580c722..3978e1f 100755 --- a/check_snmp_boostedge.pl +++ b/check_snmp_boostedge.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w ############################## check_snmp_boostedge.pl ################# # Version : 1.0 -# Date : 27 Aug 2006 +# Date : Jan 16 2007 # Author : Patrick Proy ( patrick at proy.org) # Help : http://www.manubulon.com/nagios/ # Licence : GPL - http://www.fsf.org/licenses/gpl.txt @@ -86,15 +86,15 @@ sub set_status { # return worst status with this order : OK, unknwonw, warning, return $cur_status; } -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; +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; } sub help { print "\nSNMP Boostedge service monitor for Nagios version ",$Version,"\n"; - print "(c)2004-2006 Patrick Proy\n\n"; + print "GPL Licensen, (c)2006-2007 Patrick Proy\n\n"; print_usage(); print <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: Gloabal status table : %s.\n", $session->error); diff --git a/check_snmp_cpfw.pl b/check_snmp_cpfw.pl index afed233..bdf790a 100755 --- a/check_snmp_cpfw.pl +++ b/check_snmp_cpfw.pl @@ -1,9 +1,9 @@ #!/usr/bin/perl -w ############################## check_snmp_cpfw ############## -# Version : 1.0 -# Date : Aug 23 2006 +# Version : 1.2.1 +# Date : April 19 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 # TODO : # - check sync method @@ -41,15 +41,16 @@ my @svn_checks_oid = ($svn_status); ###### HA data my $ha_active = "1.3.6.1.4.1.2620.1.5.5.0"; # "yes" -my $ha_state = "1.3.6.1.4.1.2620.1.5.6.0"; # "active" +my $ha_state = "1.3.6.1.4.1.2620.1.5.6.0"; # "active" / "standby" my $ha_block_state = "1.3.6.1.4.1.2620.1.5.7.0"; #"OK" : ha blocking state my $ha_status = "1.3.6.1.4.1.2620.1.5.102.0"; # "OK" : ha status my %ha_checks =( $ha_active,"yes",$ha_state,"active",$ha_block_state,"OK",$ha_status,"OK"); +my %ha_checks_stand =( $ha_active,"yes",$ha_state,"standby",$ha_block_state,"OK",$ha_status,"OK"); my %ha_checks_n =( $ha_active,"HA active",$ha_state,"HA state",$ha_block_state,"HA block state",$ha_status,"ha_status"); my @ha_checks_oid =( $ha_active,$ha_state,$ha_block_state,$ha_status); -my $ha_mode = "1.3.6.1.4.1.2620.1.5.11.0"; # "Sync only" : ha Working mode +my $ha_mode = "1.3.6.1.4.1.2620.1.5.11.0"; # "Sync only"/"High Availability (Active Up)" : ha Working mode my $ha_tables = "1.3.6.1.4.1.2620.1.5.13.1"; # ha status table my $ha_tables_index = ".1"; @@ -72,7 +73,7 @@ my @mgmt_checks_oid = ($mgmt_status,$mgmt_alive); #################################### Globals ##############################"" -my $Version='1.0'; +my $Version='1.2.1'; my $o_host = undef; # hostname my $o_community = undef; # community @@ -105,7 +106,7 @@ my $o_privpass= undef; # priv password sub p_version { print "check_snmp_cpfw version : $Version\n"; } sub print_usage { - print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd [-X pass -L ,]) [-s] [-w [-p=pol_name] [-c=warn,crit]] [-m] [-a] [-f] [-p ] [-t ] [-V]\n"; + print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd [-X pass -L ,]) [-s] [-w [-p=pol_name] [-c=warn,crit]] [-m] [-a [standby] ] [-f] [-p ] [-t ] [-V]\n"; } sub isnnum { # Return true if arg is not a number @@ -116,7 +117,7 @@ sub isnnum { # Return true if arg is not a number sub help { print "\nSNMP Checkpoint FW-1 Monitor for Nagios version ",$Version,"\n"; - print "GPL Licence, (c)2004-2006 - Patrick Proy\n\n"; + print "GPL Licence, (c)2004-2007 - Patrick Proy\n\n"; print_usage(); print < \$o_version, 'version' => \$o_version, 's' => \$o_svn, 'svn' => \$o_svn, 'w' => \$o_fw, 'fw' => \$o_fw, - 'a' => \$o_ha, 'ha' => \$o_ha, + 'a:s' => \$o_ha, 'ha:s' => \$o_ha, 'm' => \$o_mgmt, 'mgmt' => \$o_mgmt, 'p:s' => \$o_policy, 'policy:s' => \$o_policy, 'c:s' => \$o_conn, 'connexions:s' => \$o_conn, @@ -226,6 +228,9 @@ sub check_options { { print "Nothing selected for perfparse !\n";print_usage(); exit $ERRORS{"UNKNOWN"}} if (!defined($o_fw) && !defined($o_ha) && !defined($o_mgmt) && !defined($o_svn)) { print "Must select a product to check !\n";print_usage(); exit $ERRORS{"UNKNOWN"}} + if (defined ($o_ha) && ($o_ha ne "") && ($o_ha ne "standby")) + { print "-a option comes with 'standby' or nothing !\n";print_usage(); exit $ERRORS{"UNKNOWN"}} + } ########## MAIN ####### @@ -241,6 +246,11 @@ if (defined($TIMEOUT)) { 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)) { @@ -252,6 +262,7 @@ if ( defined($o_login) && defined($o_passwd)) { -hostname => $o_host, -version => '3', -username => $o_login, + -port => $o_port, -authpassword => $o_passwd, -authprotocol => $o_authproto, -timeout => $o_timeout @@ -262,6 +273,7 @@ if ( defined($o_login) && defined($o_passwd)) { -hostname => $o_host, -version => '3', -username => $o_login, + -port => $o_port, -authpassword => $o_passwd, -authprotocol => $o_authproto, -privpassword => $o_privpass, @@ -389,18 +401,18 @@ if (defined ($o_fw)) { if (defined($o_policy)) { if ($$resultat{$policy_name} ne $o_policy) { - $fw_state=2; - $fw_print .= "Policy installed : $$resultat{$policy_name}"; + $fw_state=2; + $fw_print .= "Policy installed : $$resultat{$policy_name}"; } } if (defined($o_conn)) { if ($$resultat{$connections} > $o_crit) { - $fw_state=2; - $fw_print .= "Connexions : ".$$resultat{$connections}." > ".$o_crit." "; + $fw_state=2; + $fw_print .= "Connexions : ".$$resultat{$connections}." > ".$o_crit." "; } else { if ($$resultat{$connections} > $o_warn) { - $fw_state=1; + if ($fw_state!=2) {$fw_state=1;} $fw_print .= "Connexions : ".$$resultat{$connections}." > ".$o_warn." "; } } @@ -434,9 +446,16 @@ if (defined ($o_ha)) { if (defined($resultat)) { foreach $key ( keys %ha_checks) { verb("$ha_checks_n{$key} : $ha_checks{$key} / $$resultat{$key}"); - if ( $$resultat{$key} ne $ha_checks{$key} ) { - $ha_print .= $ha_checks_n{$key} . ":" . $$resultat{$key} . " "; - $ha_state_n=2; + if ( $o_ha eq "standby" ) { + if ( $$resultat{$key} ne $ha_checks_stand{$key} ) { + $ha_print .= $ha_checks_n{$key} . ":" . $$resultat{$key} . " "; + $ha_state_n=2; + } + } else { + if ( $$resultat{$key} ne $ha_checks{$key} ) { + $ha_print .= $ha_checks_n{$key} . ":" . $$resultat{$key} . " "; + $ha_state_n=2; + } } } #my $ha_mode = "1.3.6.1.4.1.2620.1.5.11.0"; # "Sync only" : ha Working mode diff --git a/check_snmp_env.pl b/check_snmp_env.pl index 8840af2..fe444da 100755 --- a/check_snmp_env.pl +++ b/check_snmp_env.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w ############################## check_snmp_env ################# -# Version : 1.1 -# Date : Jan 11 2007 +# Version : 1.2 +# Date : April 19 2007 # Author : Patrick Proy ( patrick at proy.org) # Help : http://www.manubulon.com/nagios/ # Licence : GPL - http://www.fsf.org/licenses/gpl.txt @@ -77,13 +77,13 @@ my $ciscoPSTableState = $ciscoPSTable.".3"; #Status # ciscoEnvMonSupplySource INTEGER # Nokia env mib -my $nokia_temp_tbl="1.3.6.1.4.1.94.1.21.1.1.5"; -my $nokia_temp="1.3.6.1.4.1.94.1.21.1.1.5.0"; -my $nokia_fan_table="1.3.6.1.4.1.94.1.21.1.2"; -my $nokia_fan_status="1.3.6.1.4.1.94.1.21.1.2.1.1.2"; -my $nokia_ps_table="1.3.6.1.4.1.94.1.21.1.3"; -my $nokia_ps_temp="1.3.6.1.4.1.94.1.21.1.3.1.1.2"; -my $nokia_ps_status="1.3.6.1.4.1.94.1.21.1.3.1.1.3"; +my $nokia_temp_tbl= "1.3.6.1.4.1.94.1.21.1.1.5"; +my $nokia_temp= "1.3.6.1.4.1.94.1.21.1.1.5.0"; +my $nokia_fan_table= "1.3.6.1.4.1.94.1.21.1.2"; +my $nokia_fan_status= "1.3.6.1.4.1.94.1.21.1.2.1.1.2"; +my $nokia_ps_table= "1.3.6.1.4.1.94.1.21.1.3"; +my $nokia_ps_temp= "1.3.6.1.4.1.94.1.21.1.3.1.1.2"; +my $nokia_ps_status= "1.3.6.1.4.1.94.1.21.1.3.1.1.3"; # Bluecoat env mib my @bc_SensorCode=("","ok","unknown","not-installed","voltage-low-warning","voltage-low-critical", @@ -131,9 +131,23 @@ my $iron_fan_table = "1.3.6.1.4.1.15497.1.1.1.10"; # fan table my $iron_fan_rpm = "1.3.6.1.4.1.15497.1.1.1.10.1.2"; # fan speed in RPM my $iron_fan_name = "1.3.6.1.4.1.15497.1.1.1.10.1.3"; # fan name +# Foundry BigIron Router Switch (FOUNDRY-SN-AGENT-MIB) + +my $foundry_temp = "1.3.6.1.4.1.1991.1.1.1.1.18.0"; # Chassis temperature in Deg C *2 +my $foundry_temp_warn = "1.3.6.1.4.1.1991.1.1.1.1.19.0"; # Chassis warn temperature in Deg C *2 +my $foundry_temp_crit = "1.3.6.1.4.1.1991.1.1.1.1.20.0"; # Chassis warn temperature in Deg C *2 +my $foundry_ps_table = "1.3.6.1.4.1.1991.1.1.1.2.1"; # PS table +my $foundry_ps_desc = "1.3.6.1.4.1.1991.1.1.1.2.1.1.2"; # PS desc +my $foundry_ps_status = "1.3.6.1.4.1.1991.1.1.1.2.1.1.3"; # PS status +my $foundry_fan_table = "1.3.6.1.4.1.1991.1.1.1.3.1"; # FAN table +my $foundry_fan_desc = "1.3.6.1.4.1.1991.1.1.1.3.1.1.2"; # FAN desc +my $foundry_fan_status = "1.3.6.1.4.1.1991.1.1.1.3.1.1.3"; # FAN status + +my @foundry_status = (3,0,2); # oper status : 1:other, 2: Normal, 3: Failure + # Globals -my $Version='1.1'; +my $Version='1.2'; my $o_host = undef; # hostname my $o_community = undef; # community @@ -146,7 +160,7 @@ my $o_perf= undef; # Output performance data my $o_version2= undef; # use snmp v2c # check type my $o_check_type= "cisco"; # default Cisco -my @valid_types =("cisco","nokia","bc","iron"); +my @valid_types =("cisco","nokia","bc","iron","foundry"); my $o_temp= undef; # max temp my $o_fan= undef; # min fan speed @@ -163,7 +177,7 @@ my $o_privpass= undef; # priv password sub p_version { print "check_snmp_env version : $Version\n"; } sub print_usage { - print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd [-X pass -L ,]) [-p ] -T (cisco|nokia|lp|iron) [-F ] [-c ] [-f] [-t ] [-V]\n"; + print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd [-X pass -L ,]) [-p ] -T (cisco|nokia|bc|iron|foundry) [-F ] [-c ] [-f] [-t ] [-V]\n"; } sub isnnum { # Return true if arg is not a number @@ -206,13 +220,14 @@ sub help { : Priv protocole (des|aes : default des) -P, --port=PORT SNMP port (Default 161) --T, --type=cisco|nokia|bc +-T, --type=cisco|nokia|bc|iron|foundry Environemental check : cisco : voltage,temp,fan,power supply status will try to check everything present nokia : fan and power supply bc : fans, power supply, voltage, disks iron : fans, power supply, temp + foundry : power supply, temp -F, --fan= Minimum fan rpm value -c, --celcius= @@ -291,6 +306,11 @@ if (defined($TIMEOUT)) { 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)) { @@ -394,8 +414,49 @@ if ( ($voltexist ==0) && ($tempexist ==0) && ($fanexist ==0) && ($psexist ==0) ) exit $ERRORS{"UNKNOWN"}; } +my $perf_output=""; # Get the data my ($i,$cur_status)=(undef,undef); + +my $volt_global=0; +my %volt_status; +if ($fanexist !=0) { + for ($i=0;$i < $voltexist; $i++) { + $cur_status=$$resultat{$ciscoVoltageTableState. "." . $voltindex[$i]}; + verb ($$resultat{$ciscoVoltageTableDesc .".".$voltindex[$i]}); + verb ($cur_status); + if (!defined ($cur_status)) { ### Error TODO + $volt_global=1; + } + $perf_output.=" '".$$resultat{$ciscoVoltageTableDesc .".".$voltindex[$i]}."'=" ; + $perf_output.=$$resultat{$ciscoVoltageTableValue."." . $voltindex[$i]}; + if ($Nagios_state[$CiscoEnvMonNagios{$cur_status}] ne "OK") { + $volt_global= 1; + $volt_status{$$resultat{$ciscoVoltageTableDesc .".".$voltindex[$i]}}=$cur_status; + } + } +} + + +my $temp_global=0; +my %temp_status; +if ($tempexist !=0) { + for ($i=0;$i < $tempexist; $i++) { + $cur_status=$$resultat{$ciscoTempTableState . "." . $tempindex[$i]}; + verb ($$resultat{$ciscoTempTableDesc .".".$tempindex[$i]}); + verb ($cur_status); + if (!defined ($cur_status)) { ### Error TODO + $temp_global=1; + } + $perf_output.=" '".$$resultat{$ciscoTempTableDesc .".".$tempindex[$i]}."'=" ; + $perf_output.=$$resultat{$ciscoTempTableValue."." . $tempindex[$i]}; + if ($Nagios_state[$CiscoEnvMonNagios{$cur_status}] ne "OK") { + $temp_global= 1; + $temp_status{$$resultat{$ciscoTempTableDesc .".".$tempindex[$i]}}=$cur_status; + } + } +} + my $fan_global=0; my %fan_status; @@ -407,7 +468,7 @@ if ($fanexist !=0) { if (!defined ($cur_status)) { ### Error TODO $fan_global=1; } - if ($CiscoEnvMonNagios{$cur_status} ne "OK") { + if ($Nagios_state[$CiscoEnvMonNagios{$cur_status}] ne "OK") { $fan_global= 1; $fan_status{$$resultat{$ciscoFanTableDesc .".".$fanindex[$i]}}=$cur_status; } @@ -422,7 +483,7 @@ if ($psexist !=0) { if (!defined ($cur_status)) { ### Error TODO $fan_global=1; } - if ($CiscoEnvMonNagios{$cur_status} ne "OK") { + if ($Nagios_state[$CiscoEnvMonNagios{$cur_status}] ne "OK") { $ps_global= 1; $ps_status{$$resultat{$ciscoPSTableDesc .".".$psindex[$i]}}=$cur_status; } @@ -431,9 +492,11 @@ if ($psexist !=0) { my $global_state=0; my $output=""; + if ($fanexist !=0) { if ($fan_global ==0) { $output .= $fanexist." Fan OK"; + $global_state=1 if ($global_state==0); } else { foreach (keys %fan_status) { $output .= "Fan " . $_ . ":" . $CiscoEnvMonState {$fan_status{$_}} ." "; @@ -444,10 +507,11 @@ if ($fanexist !=0) { } } -$output .= "," if ($output ne ""); if ($psexist !=0) { + $output .= ", " if ($output ne ""); if ($ps_global ==0) { $output .= $psexist." ps OK"; + $global_state=1 if ($global_state==0); } else { foreach (keys %ps_status) { $output .= "ps " . $_ . ":" . $CiscoEnvMonState {$ps_status{$_}} ." "; @@ -458,6 +522,37 @@ if ($psexist !=0) { } } +if ($voltexist !=0) { + $output .= ", " if ($output ne ""); + if ($volt_global ==0) { + $output .= $voltexist." volt OK"; + $global_state=1 if ($global_state==0); + } else { + foreach (keys %volt_status) { + $output .= "volt " . $_ . ":" . $CiscoEnvMonState {$volt_status{$_}} ." "; + if ($global_state < $CiscoEnvMonNagios{$volt_status{$_}} ) { + $global_state = $CiscoEnvMonNagios{$volt_status{$_}} ; + } + } + } +} + +if ($tempexist !=0) { + $output .= ", " if ($output ne ""); + if ($temp_global ==0) { + $output .= $tempexist." temp OK"; + $global_state=1 if ($global_state==0); + } else { + foreach (keys %temp_status) { + $output .= "temp " . $_ . ":" . $CiscoEnvMonState {$temp_status{$_}} ." "; + if ($global_state < $CiscoEnvMonNagios{$temp_status{$_}} ) { + $global_state = $CiscoEnvMonNagios{$temp_status{$_}} ; + } + } + } +} + +#print $output," : ",$Nagios_state[$global_state]," | ",$perf_output,"\n"; print $output," : ",$Nagios_state[$global_state],"\n"; $exit_val=$ERRORS{$Nagios_state[$global_state]}; @@ -814,3 +909,98 @@ if ($global_status==2) { } } + +########### Foundry env checks ############## + +if ($o_check_type eq "foundry") { + +verb("Checking foundry env"); + +my $global_status=0; # status to UNKNOWN +my $output=""; + +# Get temperature + +my @foundry_temp_oid=($foundry_temp,$foundry_temp_warn,$foundry_temp_crit); + +my $result_temp = $session->get_request( + Varbindlist => \@foundry_temp_oid +); + +my $temp_found=0; +if (defined($result_temp)) { + $temp_found=1; + #Temp found + $output = "Temp : " . $$result_temp{$foundry_temp} / 2; + if ($$result_temp{$foundry_temp} > $$result_temp{$foundry_temp_crit}) { # Temp above critical + $output.= " > ". $$result_temp{$foundry_temp_crit} / 2 . " : CRITICAL"; + $global_status=3; + } elsif ( $$result_temp{$foundry_temp} > $$result_temp{$foundry_temp_warn}) { # Temp above warning + $output.= " > ". $$result_temp{$foundry_temp_warn} / 2 . " : WARNING"; + $global_status=2; + } else { + $output.= " < ". $$result_temp{$foundry_temp_warn} / 2 . " : OK"; + $global_status=1; + } +} + +# Get PS table (TODO : Bug in FAN table, see with Foundry). + +my $result_ps = (Net::SNMP->VERSION < 4) ? + $session->get_table($foundry_ps_table) + : $session->get_table(Baseoid => $foundry_ps_table); + +my $ps_num=0; +if (defined($result_ps)) { + $output .=", " if defined($output); + foreach my $key ( keys %$result_ps) { + verb("OID : $key, Desc : $$result_ps{$key}"); + if ($$result_ps{$key} =~ /$foundry_ps_desc/) { + $ps_num++; + my @oid_list = split (/\./,$key); + my $index_ps = pop (@oid_list); + $index_ps= $foundry_ps_status . "." . $index_ps; + if (defined ($$result_ps{$index_ps})) { + if ($$result_ps{$index_ps} == 3) { + $output.="PS ".$$result_ps{$key}." : FAILURE"; + $global_status=3; + } elsif ($$result_ps{$index_ps} == 2) { + $global_status=1 if ($global_status==0); + } else { + $output.= "ps ".$$result_ps{$key}." : OTHER"; + } + } else { + $output.= "ps ".$$result_ps{$key}." : UNDEFINED STATUS"; + } + } + } +} + +$session->close; + +if (($ps_num+$temp_found) == 0) { + print "No data found : UNKNOWN\n"; + exit $ERRORS{"UNKNOWN"}; +} + +if ($global_status==1) { + print $output." : all OK\n"; + exit $ERRORS{"OK"}; +} + +if ($global_status==2) { + print $output." : WARNING\n"; + exit $ERRORS{"WARNING"}; +} + +if ($global_status==3) { + print $output." : CRITICAL\n"; + exit $ERRORS{"CRITICAL"}; +} + +print $output." : UNKNOWN\n"; +exit $ERRORS{"UNKNOWN"}; + +} + +exit (3); diff --git a/check_snmp_int.pl b/check_snmp_int.pl index be8cdb8..17ab65c 100755 --- a/check_snmp_int.pl +++ b/check_snmp_int.pl @@ -1,11 +1,11 @@ #!/usr/bin/perl -w ############################## check_snmp_int ############## -# Version : 1.4.3 -# Date : Dec 11 2006 +# Version : 1.4.6 +# Date : April 23 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 -# Contrib : J. Jungmann, S. Probst +# Contrib : J. Jungmann, S. Probst, R. Leroy, M. Berger # TODO : # Check isdn "dormant" state # Maybe put base directory for performance as an option @@ -35,10 +35,13 @@ my $index_table = '1.3.6.1.2.1.2.2.1.1'; my $descr_table = '1.3.6.1.2.1.2.2.1.2'; my $oper_table = '1.3.6.1.2.1.2.2.1.8.'; my $admin_table = '1.3.6.1.2.1.2.2.1.7.'; +my $speed_table = '1.3.6.1.2.1.2.2.1.5.'; my $in_octet_table = '1.3.6.1.2.1.2.2.1.10.'; +my $in_octet_table_64 = '1.3.6.1.2.1.31.1.1.1.6.'; my $in_error_table = '1.3.6.1.2.1.2.2.1.14.'; my $in_discard_table = '1.3.6.1.2.1.2.2.1.13.'; my $out_octet_table = '1.3.6.1.2.1.2.2.1.16.'; +my $out_octet_table_64 = '1.3.6.1.2.1.31.1.1.1.10.'; my $out_error_table = '1.3.6.1.2.1.2.2.1.20.'; my $out_discard_table = '1.3.6.1.2.1.2.2.1.19.'; @@ -46,11 +49,10 @@ my %status=(1=>'UP',2=>'DOWN',3=>'TESTING',4=>'UNKNOWN',5=>'DORMANT',6=>'NotPres # Globals -my $Version='1.4.3'; +my $Version='1.4.6'; +# Standard options my $o_host = undef; # hostname -my $o_community = undef; # community -my $o_version2 = undef; #use snmp v2c my $o_port = 161; # port my $o_descr = undef; # description filter my $o_help= undef; # wan't some help ? @@ -59,8 +61,15 @@ my $o_inverse= undef; # Critical when up my $o_verb= undef; # verbose mode my $o_version= undef; # print version my $o_noreg= undef; # Do not use Regexp for name +my $o_short= undef; # set maximum of n chars to be displayed +my $o_label= undef; # add label before speed (in, out, etc...). +# Performance data options my $o_perf= undef; # Output performance data my $o_perfe= undef; # Output discard/error also in perf data +my $o_perfs= undef; # include speed in performance output (-S) +my $o_perfp= undef; # output performance data in % of max speed (-y) +my $o_perfr= undef; # output performance data in bits/s or Bytes/s (-Y) +# Speed/error checks my $o_checkperf= undef; # checks in/out/err/disc values my $o_delta= 300; # delta of time of perfcheck (default 5min) my $o_ext_checkperf= undef; # extended perf checks (+error+discard) @@ -69,10 +78,17 @@ my $o_crit_opt= undef; # critical options my $o_kbits= undef; # Warn and critical in Kbits instead of KBytes my @o_warn= undef; # warning levels of perfcheck my @o_crit= undef; # critical levels of perfcheck -my $o_short= undef; # set maximum of n chars to be displayed +my $o_highperf= undef; # Use 64 bits counters +my $o_meg= undef; # output in MBytes or Mbits (-M) +my $o_gig= undef; # output in GBytes or Gbits (-G) +my $o_prct= undef; # output in % of max speed (-u) my $o_timeout= undef; # Timeout (Default 5) -# SNMPv3 specific +# SNMP Message size parameter (Makina Corpus contrib) +my $o_octetlength=undef; +# Login options specific +my $o_community = undef; # community +my $o_version2 = undef; #use snmp v2c my $o_login= undef; # Login for snmpv3 my $o_passwd= undef; # Pass for snmpv3 my $v3protocols=undef; # V3 protocol list. @@ -80,6 +96,10 @@ my $o_authproto='md5'; # Auth protocol my $o_privproto='des'; # Priv protocol my $o_privpass= undef; # priv password +# Readable names for counters (M. Berger contrib) +my @countername = ( "in=" , "out=" , "errors-in=" , "errors-out=" , "discard-in=" , "discard-out=" ); +my $checkperf_out_desc; + # functions sub read_file { @@ -132,7 +152,7 @@ sub write_file { sub p_version { print "check_snmp_int version : $Version\n"; } sub print_usage { - print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd [-X pass -L ,) [-p ] -n [-i] [-a] [-r] [-f[e]] [-k[qB] -w -c -d] [-t ] [-s] [-V]\n"; + print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd [-X pass -L ,) [-p ] -n [-i] [-a] [-r] [-f[eSyY]] [-k[qBMGu] -g -w -c -d] [-o ] [-t ] [-s] --label [-V]\n"; } sub isnnum { # Return true if arg is not a number @@ -143,7 +163,7 @@ sub isnnum { # Return true if arg is not a number sub help { print "\nSNMP Network Interface Monitor for Nagios version ",$Version,"\n"; - print "GPL licence, (c)2004-2006 Patrick Proy\n\n"; + print "GPL licence, (c)2004-2007 Patrick Proy\n\n"; print_usage(); print < seconds (default 300=5min) -B, --kbits - Make the warning and critical levels in KBits/s instead of KBytes/s + Make the warning and critical levels in K|M|G Bits/s instead of K|M|G Bytes/s +-G, --giga ; -M, --mega ; -u, --prct + -G : Make the warning and critical levels in Gbps (with -B) or GBps + -M : Make the warning and critical levels in Mbps (with -B) or MBps + -u : Make the warning and critical levels in % of reported interface speed. -w, --warning=input,output[,error in,error out,discard in,discard out] - warning level for input / output bandwidth in KBytes/s (0 for no warning) + warning level for input / output bandwidth (0 for no warning) + unit depends on B,M,G,u options warning for error & discard input / output in error/min (need -q) -c, --critical=input,output[,error in,error out,discard in,discard out] - critical level for input / output bandwidth in KBytes/s (0 for no critical) + critical level for input / output bandwidth (0 for no critical) + unit depends on B,M,G,u options critical for error & discard input / output in error/min (need -q) -s, --short=int Make the output shorter : only the first chars of the interface(s) @@ -234,6 +275,15 @@ sub check_options { 'c:s' => \$o_crit_opt, 'critical:s' => \$o_crit_opt, 'B' => \$o_kbits, 'kbits' => \$o_kbits, 's:i' => \$o_short, 'short:i' => \$o_short, + 'g' => \$o_highperf, '64bits' => \$o_highperf, + 'S' => \$o_perfs, 'intspeed' => \$o_perfs, + 'y' => \$o_perfp, 'perfprct' => \$o_perfp, + 'Y' => \$o_perfr, 'perfspeed' => \$o_perfr, + 'M' => \$o_meg, 'mega' => \$o_meg, + 'G' => \$o_gig, 'giga' => \$o_gig, + 'u' => \$o_prct, 'prct' => \$o_prct, + 'o:i' => \$o_octetlength, 'octetlength:i' => \$o_octetlength, + 'label' => \$o_label, 'd:i' => \$o_delta, 'delta:i' => \$o_delta ); if (defined ($o_help) ) { help(); exit $ERRORS{"UNKNOWN"}}; @@ -256,9 +306,22 @@ sub check_options { 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 snmpv2c or v3 with 64 bit counters + if ( defined ($o_highperf) && (!defined($o_version2) && defined($o_community))) + { print "Can't get 64 bit counters with snmp version 1\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + if (defined ($o_highperf)) { + if (eval "require bigint") { + use bigint; + } else { print "Need bigint module for 64 bit counters\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + } + # check if -e without -f if ( defined($o_perfe) && !defined($o_perf)) - { print "Cannot output error without -f option!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + { print "Cannot output error without -f option!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + if (defined ($o_perfr) && defined($o_perfp) ) { + print "-Y and -y options are exclusives\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} + if ((defined ($o_perfr) || defined($o_perfp) ) && !defined($o_checkperf)) { + print "Cannot put -Y or -y options without perf check option (-k) \n"; print_usage(); exit $ERRORS{"UNKNOWN"}} if (defined ($o_short)) { #TODO maybe some basic tests ? caracters return empty string } @@ -283,7 +346,14 @@ sub check_options { print "Warning must be < Critical level \n"; print_usage(); exit $ERRORS{"UNKNOWN"} } } + if ((defined ($o_meg) && defined($o_gig) ) || (defined ($o_meg) && defined($o_prct) )|| (defined ($o_gig) && defined($o_prct) )) { + print "-M -G and -u options are exclusives\n"; print_usage(); exit $ERRORS{"UNKNOWN"} + } } + #### octet length checks + if (defined ($o_octetlength) && (isnnum($o_octetlength) || $o_octetlength > 65535 || $o_octetlength < 484 )) { + print "octet lenght must be < 65535 and > 484\n";print_usage(); exit $ERRORS{"UNKNOWN"}; + } } ########## MAIN ####### @@ -299,6 +369,11 @@ if (defined($TIMEOUT)) { 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)) { @@ -308,6 +383,7 @@ if ( defined($o_login) && defined($o_passwd)) { ($session, $error) = Net::SNMP->session( -hostname => $o_host, -version => '3', + -port => $o_port, -username => $o_login, -authpassword => $o_passwd, -authprotocol => $o_authproto, @@ -319,6 +395,7 @@ if ( defined($o_login) && defined($o_passwd)) { -hostname => $o_host, -version => '3', -username => $o_login, + -port => $o_port, -authpassword => $o_passwd, -authprotocol => $o_authproto, -privpassword => $o_privpass, @@ -353,6 +430,20 @@ if (!defined($session)) { exit $ERRORS{"UNKNOWN"}; } +if (defined($o_octetlength)) { + my $oct_resultat=undef; + my $oct_test= $session->max_msg_size(); + verb(" actual max octets:: $oct_test"); + $oct_resultat = $session->max_msg_size($o_octetlength); + if (!defined($oct_resultat)) { + printf("ERROR: Session settings : %s.\n", $session->error); + $session->close; + exit $ERRORS{"UNKNOWN"}; + } + $oct_test= $session->max_msg_size(); + verb(" new max octets:: $oct_test"); +} + # Get desctiption table my $resultat = $session->get_table( Baseoid => $descr_table @@ -368,8 +459,16 @@ my @oids = undef; my @descr = undef; my (@oid_perf,@oid_perf_outoct,@oid_perf_inoct,@oid_perf_inerr,@oid_perf_outerr,@oid_perf_indisc,@oid_perf_outdisc)= (undef,undef,undef,undef,undef,undef,undef); +my @oid_speed=undef; my $num_int = 0; +# Change to 64 bit counters if option is set : +if (defined($o_highperf)) { + $out_octet_table=$out_octet_table_64; + $in_octet_table=$in_octet_table_64; +} + + # Select interface by regexp of exact match # and put the oid to query in an array @@ -395,6 +494,7 @@ foreach my $key ( keys %$resultat) { if (defined($o_perf) || defined($o_checkperf)) { $oid_perf_inoct[$num_int]= $in_octet_table . $tindex[$num_int]; $oid_perf_outoct[$num_int]= $out_octet_table . $tindex[$num_int]; + $oid_speed[$num_int]=$speed_table . $tindex[$num_int]; if (defined($o_ext_checkperf) || defined($o_perfe)) { $oid_perf_indisc[$num_int]= $in_discard_table . $tindex[$num_int]; $oid_perf_outdisc[$num_int]= $out_discard_table . $tindex[$num_int]; @@ -419,7 +519,7 @@ if (!defined($result)) { printf("ERROR: Status table : %s.\n", $session->error); } # Get the perf value if -f (performance) option defined or -k (check bandwidth) if (defined($o_perf)||defined($o_checkperf)) { - @oid_perf=(@oid_perf_outoct,@oid_perf_inoct,@oid_perf_inerr,@oid_perf_outerr,@oid_perf_indisc,@oid_perf_outdisc); + @oid_perf=(@oid_perf_outoct,@oid_perf_inoct,@oid_perf_inerr,@oid_perf_outerr,@oid_perf_indisc,@oid_perf_outdisc,@oid_speed); $resultf = $session->get_request( Varbindlist => \@oid_perf ); @@ -433,6 +533,7 @@ $session->close; my $num_ok=0; my @checkperf_out=undef; +my @checkperf_out_raw=undef; ### Bandwidth test variables my $temp_file_name; my ($return,@file_values)=(undef,undef); @@ -442,6 +543,7 @@ my $timenow=time; my $trigger=$timenow - ($o_delta - ($o_delta/10)); my $trigger_low=$timenow - 3*$o_delta; my ($old_value,$old_time)=undef; +my $speed_unit=undef; # define the OK value depending on -i option my $ok_val= defined ($o_inverse) ? 2 : 1; @@ -452,7 +554,7 @@ my ($print_out,$perf_out)=(undef,undef); for (my $i=0;$i < $num_int; $i++) { $print_out.=", " if (defined($print_out)); $perf_out .= " " if (defined ($perf_out)) ; - + my $usable_data=1; # Get the status of the current interface my $int_status= defined ($o_admin) ? $$result{$admin_table . $tindex[$i]} : $$result{ $oper_table . $tindex[$i] }; @@ -468,22 +570,59 @@ for (my $i=0;$i < $num_int; $i++) { $n_rows = shift(@ret_array); if ($n_rows != 0) { @file_values = @ret_array }; verb ("File read returns : $return with $n_rows rows"); + verb ("Interface speed : $$resultf{$oid_speed[$i]}"); #make the checks if the file is OK if ($return ==0) { my $j=$n_rows-1; @checkperf_out=undef; + @checkperf_out_raw=undef; do { if ($file_values[$j][0] < $trigger) { if ($file_values[$j][0] > $trigger_low) { - # check if the counter is back to 0 after 2^32. - my $overfl = ($$resultf{$oid_perf_inoct[$i]} >= $file_values[$j][1] ) ? 0 : 4294967296; - my $speed_metric = (defined($o_kbits))? 128 : 1024; - $checkperf_out[0] = ( ($overfl + $$resultf{$oid_perf_inoct[$i]} - $file_values[$j][1])/ - ($timenow - $file_values[$j][0] ))/$speed_metric; + # Define the speed metric ( K | M | G ) (Bits|Bytes) or % + my $speed_metric=undef; + if (defined($o_prct)) { # in % of speed + # Speed is in bits/s, calculated speed is in Bytes/s + $speed_metric=$$resultf{$oid_speed[$i]}/800; + $speed_unit="%"; + } else { + if (defined($o_kbits)) { # metric in bits + if (defined($o_meg)) { # in Mbit/s = 1000000 bit/s + $speed_metric=125000; # (1000/8) * 1000 + $speed_unit="Mbps"; + } elsif (defined($o_gig)) { # in Gbit/s = 1000000000 bit/s + $speed_metric=125000000; # (1000/8) * 1000 * 1000 + $speed_unit="Gbps"; + } else { # in Kbits + $speed_metric=125; # ( 1000/8 ) + $speed_unit="Kbps"; + } + } else { # metric in byte + if (defined($o_meg)) { # in Mbits + $speed_metric=1048576; # 1024^2 + $speed_unit="MBps"; + } elsif (defined($o_gig)) { # in Mbits + $speed_metric=1073741824; # 1024^3 + $speed_unit="GBps"; + } else { + $speed_metric=1024; # 1024^3 + $speed_unit="KBps"; + } + } + } + # check if the counter is back to 0 after 2^32 / 2^64. + # First set the modulus depending on highperf counters or not + my $overfl_mod = defined ($o_highperf) ? 18446744073709551616 : 4294967296; + # Check counter (s) + my $overfl = ($$resultf{$oid_perf_inoct[$i]} >= $file_values[$j][1] ) ? 0 : $overfl_mod; + $checkperf_out_raw[0] = ( ($overfl + $$resultf{$oid_perf_inoct[$i]} - $file_values[$j][1])/ + ($timenow - $file_values[$j][0] )); + $checkperf_out[0] = $checkperf_out_raw[0] / $speed_metric; - $overfl = ($$resultf{$oid_perf_outoct[$i]} >= $file_values[$j][2] ) ? 0 : 4294967296; - $checkperf_out[1] = ( ($overfl + $$resultf{$oid_perf_outoct[$i]} - $file_values[$j][2])/ - ($timenow - $file_values[$j][0] ))/$speed_metric; + $overfl = ($$resultf{$oid_perf_outoct[$i]} >= $file_values[$j][2] ) ? 0 : $overfl_mod; + $checkperf_out_raw[1] = ( ($overfl + $$resultf{$oid_perf_outoct[$i]} - $file_values[$j][2])/ + ($timenow - $file_values[$j][0] )); + $checkperf_out[1] = $checkperf_out_raw[1] / $speed_metric; if (defined($o_ext_checkperf)) { $checkperf_out[2] = ( ($$resultf{$oid_perf_inerr[$i]} - $file_values[$j][3])/ @@ -532,21 +671,25 @@ for (my $i=0;$i < $num_int; $i++) { # check 2 or 6 values depending on ext_check_perf my $num_checkperf=(defined($o_ext_checkperf))?6:2; for (my $l=0;$l < $num_checkperf;$l++) { + # Set labels if needed + $checkperf_out_desc= (defined($o_label)) ? $countername[$l] : ""; + verb("Interface $i, check $l : $checkperf_out[$l]"); if ($l!=0) {$print_out.="/";} if (($o_crit[$l]!=0) && ($checkperf_out[$l]>$o_crit[$l])) { $final_status=2; - $print_out.= sprintf("CRIT : %.1f",$checkperf_out[$l]); + $print_out.= sprintf("CRIT %s%.1f",$checkperf_out_desc,$checkperf_out[$l]); } elsif (($o_warn[$l]!=0) && ($checkperf_out[$l]>$o_warn[$l])) { - $final_status=($final_status==2)?2:1; - $print_out.= sprintf("WARN : %.1f",$checkperf_out[$l]); - } else { - $print_out.= sprintf("%.1f",$checkperf_out[$l]); - } - } + $final_status=($final_status==2)?2:1; + $print_out.= sprintf("WARN %s%.1f",$checkperf_out_desc,$checkperf_out[$l]); + } else { + $print_out.= sprintf("%s%.1f",$checkperf_out_desc,$checkperf_out[$l]); + } + if ( $l==0 || $l == 1) { $print_out.= $speed_unit; } + } $print_out .= ")"; } else { # Return unknown when no data $print_out.= " No usable data on file (".$n_rows." rows) "; - $final_status=3; + $final_status=3;$usable_data=0; } } else { if (defined ($o_short)) { @@ -564,14 +707,59 @@ for (my $i=0;$i < $num_int; $i++) { $num_ok++; } if (( $int_status == 1 ) && defined ($o_perf)) { - $perf_out .= "'" . $descr[$i] ."_in_octet'=". $$resultf{$oid_perf_inoct[$i]} ."c "; - $perf_out .= "'" . $descr[$i] ."_out_octet'=". $$resultf{$oid_perf_outoct[$i]} ."c"; + if (defined ($o_perfp)) { # output in % of speed + if ($usable_data==1) { + $perf_out .= "'" . $descr[$i] ."_in_prct'="; + $perf_out .= sprintf("%.0f",$checkperf_out_raw[0] * 800 / $$resultf{$oid_speed[$i]}) ."%;"; + $perf_out .= ($o_warn[0]!=0) ? $o_warn[0] . ";" : ";"; + $perf_out .= ($o_crit[0]!=0) ? $o_crit[0] . ";" : ";"; + $perf_out .= "0;100 "; + $perf_out .= "'" . $descr[$i] ."_out_prct'="; + $perf_out .= sprintf("%.0f",$checkperf_out_raw[1] * 800 / $$resultf{$oid_speed[$i]}) ."%;"; + $perf_out .= ($o_warn[1]!=0) ? $o_warn[1] . ";" : ";"; + $perf_out .= ($o_crit[1]!=0) ? $o_crit[1] . ";" : ";"; + $perf_out .= "0;100 "; + } + } elsif (defined ($o_perfr)) { # output in bites or Bytes /s + if ($usable_data==1) { + if (defined($o_kbits)) { # bps + # put warning and critical levels into bps or Bps + my $warn_factor = (defined($o_meg)) ? 1000000 : (defined($o_gig)) ? 1000000000 : 1000; + $perf_out .= "'" . $descr[$i] ."_in_bps'="; + $perf_out .= sprintf("%.0f",$checkperf_out_raw[0] * 8) .";"; + $perf_out .= ($o_warn[0]!=0) ? $o_warn[0]*$warn_factor . ";" : ";"; + $perf_out .= ($o_crit[0]!=0) ? $o_crit[0]*$warn_factor . ";" : ";"; + $perf_out .= "0;". $$resultf{$oid_speed[$i]} ." "; + $perf_out .= "'" . $descr[$i] ."_out_bps'="; + $perf_out .= sprintf("%.0f",$checkperf_out_raw[1] * 8) .";"; + $perf_out .= ($o_warn[1]!=0) ? $o_warn[1]*$warn_factor . ";" : ";"; + $perf_out .= ($o_crit[1]!=0) ? $o_crit[1]*$warn_factor . ";" : ";"; + $perf_out .= "0;". $$resultf{$oid_speed[$i]} ." "; + } else { # Bps + my $warn_factor = (defined($o_meg)) ? 1048576 : (defined($o_gig)) ? 1073741824 : 1024; + $perf_out .= "'" . $descr[$i] ."_in_Bps'=" . sprintf("%.0f",$checkperf_out_raw[0]) .";"; + $perf_out .= ($o_warn[0]!=0) ? $o_warn[0]*$warn_factor . ";" : ";"; + $perf_out .= ($o_crit[0]!=0) ? $o_crit[0]*$warn_factor . ";" : ";"; + $perf_out .= "0;". $$resultf{$oid_speed[$i]} ." "; + $perf_out .= "'" . $descr[$i] ."_out_Bps'=" . sprintf("%.0f",$checkperf_out_raw[1]) .";" ; + $perf_out .= ($o_warn[1]!=0) ? $o_warn[1]*$warn_factor . ";" : ";"; + $perf_out .= ($o_crit[1]!=0) ? $o_crit[1]*$warn_factor . ";" : ";"; + $perf_out .= "0;". $$resultf{$oid_speed[$i]} ." "; + } + } + } else { # output in octet counter + $perf_out .= "'" . $descr[$i] ."_in_octet'=". $$resultf{$oid_perf_inoct[$i]} ."c "; + $perf_out .= "'" . $descr[$i] ."_out_octet'=". $$resultf{$oid_perf_outoct[$i]} ."c"; + } if (defined ($o_perfe)) { $perf_out .= " '" . $descr[$i] ."_in_error'=". $$resultf{$oid_perf_inerr[$i]} ."c "; $perf_out .= "'" . $descr[$i] ."_in_discard'=". $$resultf{$oid_perf_indisc[$i]} ."c "; $perf_out .= "'" . $descr[$i] ."_out_error'=". $$resultf{$oid_perf_outerr[$i]} ."c "; $perf_out .= "'" . $descr[$i] ."_out_discard'=". $$resultf{$oid_perf_outdisc[$i]} ."c"; } + if (defined ($o_perfs)) { + $perf_out .= " '" . $descr[$i] ."_speed_bps'=".$$resultf{$oid_speed[$i]}; + } } } @@ -597,7 +785,7 @@ if ($num_ok == $num_int) { exit $ERRORS{"CRITICAL"}; } else { print $print_out,":(", $num_ok, " UP): UNKNOWN"; - if (defined ($o_perf)) { print " | ",$perf_out; } + if (defined ($perf_out)) { print " | ",$perf_out; } print "\n"; exit $ERRORS{"UNKNOWN"}; } @@ -606,7 +794,7 @@ if ($num_ok == $num_int) { # else print the not OK interface number and exit (return is always critical if at least one int is down). print $print_out,": ", $num_int-$num_ok, " int NOK : CRITICAL"; -if (defined ($o_perf) && defined ($perf_out)) { print " | ",$perf_out; } +if (defined ($perf_out)) { print " | ",$perf_out; } print "\n"; exit $ERRORS{"CRITICAL"}; diff --git a/check_snmp_load.pl b/check_snmp_load.pl index 83c3ce3..f9512b8 100755 --- a/check_snmp_load.pl +++ b/check_snmp_load.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w ############################## check_snmp_load ################# -# Version : 1.3.1 -# Date : 8 Sept 2006 +# Version : 1.3.2 +# Date : Jan 16 2007 # Author : Patrick Proy ( patrick at proy.org) # Help : http://www.manubulon.com/nagios/ # Licence : GPL - http://www.fsf.org/licenses/gpl.txt @@ -94,7 +94,7 @@ my %cpu_oid = ("netsc",$ns_cpu_idle,"as400",$as400_cpu,"bc",$bluecoat_cpu,"nokia # Globals -my $Version='1.3.1'; +my $Version='1.3.2'; my $o_host = undef; # hostname my $o_community = undef; # community @@ -136,7 +136,7 @@ sub isnnum { # Return true if arg is not a number sub help { print "\nSNMP Load & CPU Monitor for Nagios version ",$Version,"\n"; - print "GPL licence, (c)2004-2006 Patrick Proy\n\n"; + print "GPL licence, (c)2004-2007 Patrick Proy\n\n"; print_usage(); print < $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/check_snmp_nsbox.pl b/check_snmp_nsbox.pl index 498adb2..25eef4b 100755 --- a/check_snmp_nsbox.pl +++ b/check_snmp_nsbox.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w ############################## check_snmp_nsbox ################# # Version : 1.0 -# Date : 27 aug 2006 +# Date : Jan 16 2007 # Author : Patrick Proy ( patrick at proy.org) # Help : http://www.manubulon.com/nagios/ # Licence : GPL - http://www.fsf.org/licenses/gpl.txt @@ -88,10 +88,10 @@ sub set_status { # return worst status with this order : OK, unknwonw, warning, return $cur_status; } -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; +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; } sub help { @@ -265,9 +265,9 @@ if (!defined($session)) { ########### check global status ############## my @oidlist=($ns_service_status); -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) || ($$resultat{$ns_service_status} eq "noSuchObject")) { printf("ERROR: Global status oid not found : %s.\n", $session->error); diff --git a/check_snmp_process.pl b/check_snmp_process.pl index 5958ea3..d8fe0c6 100755 --- a/check_snmp_process.pl +++ b/check_snmp_process.pl @@ -1,10 +1,11 @@ #!/usr/bin/perl -w ############################## check_snmp_process ############## -# Version : 1.3 -# Date : Sept 4 2006 +# Version : 1.4 +# Date : March 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 +# Contrib : Makina Corpus # TODO : put $o_delta as an option # Contrib : ############################################################### @@ -38,7 +39,7 @@ my $proc_run_state = '1.3.6.1.2.1.25.4.2.1.7'; # Globals -my $Version='1.3.1'; +my $Version='1.4'; my $o_host = undef; # hostname my $o_community =undef; # community @@ -60,6 +61,12 @@ my $o_timeout= 5; # Default 5s Timeout # SNMP V3 specific my $o_login= undef; # snmp v3 login my $o_passwd= undef; # snmp v3 passwd +my $v3protocols=undef; # V3 protocol list. +my $o_authproto='md5'; # Auth protocol +my $o_privproto='des'; # Priv protocol +my $o_privpass= undef; # priv password +# SNMP Message size parameter (Makina Corpus contrib) +my $o_octetlength=undef; # Memory & CPU my $o_mem= undef; # checks memory (max) my @o_memL= undef; # warn and crit level for mem @@ -73,7 +80,7 @@ my $o_delta= $delta_of_time_to_make_average; # delta time for CPU check sub p_version { print "check_snmp_process version : $Version\n"; } sub print_usage { - print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd) [-p ] -n [-w [,] -c [,max_proc] ] [-m, -a -u, ] [-t ] [-f ] [-r] [-V] [-g]\n"; + print "Usage: $0 [-v] -H -C [-2] | (-l login -x passwd) [-p ] -n [-w [,] -c [,max_proc] ] [-m, -a -u, ] [-t ] [-o ] [-f ] [-r] [-V] [-g]\n"; } sub isnotnum { # Return true if arg is not a number @@ -148,12 +155,15 @@ sub help { name or IP address of host to check -C, --community=COMMUNITY NAME community name for the host's SNMP agent (implies SNMP v1 or v2c with option) --2, --v2c - Use snmp v2c --l, --login=LOGIN - Login for snmpv3 authentication (implies v3 protocol with MD5) --x, --passwd=PASSWD - Password for snmpv3 authentication +-l, --login=LOGIN ; -x, --passwd=PASSWD, -2, --v2c + Login and auth password for snmpv3 authentication + If no priv password exists, implies AuthNoPriv + -2 : use snmp v2c +-X, --privpass=PASSWD + Priv password for snmpv3 (AuthPriv protocol) +-L, --protocols=, + : Authentication protocol (md5|sha : default md5) + : Priv protocole (des|aes : default des) -p, --port=PORT SNMP port (Default 161) -n, --name=NAME @@ -187,6 +197,10 @@ Notes on warning and critical : In some cases, it is necessary to get all data at once because process die very frequently. This option eats bandwidth an cpu (for remote host) at breakfast. +-o, --octetlength=INTEGER + max-size of the SNMP message, usefull in case of Too Long responses. + Be carefull with network filters. Range 484 - 65535, default are + usually 1472,1452,1460 or 1440. -t, --timeout=INTEGER timeout for SNMP in seconds (Default: 5) -V, --version @@ -205,7 +219,6 @@ EOT sub verb { my $t=shift; print $t,"\n" if defined($o_verb) ; } sub check_options { - my $compat_o_cpu_sum; Getopt::Long::Configure ("bundling"); GetOptions( 'v' => \$o_verb, 'verbose' => \$o_verb, @@ -215,7 +228,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, - 'c:s' => \$o_crit, 'critical:s' => \$o_crit, + 'X:s' => \$o_privpass, 'privpass:s' => \$o_privpass, + 'L:s' => \$v3protocols, 'protocols:s' => \$v3protocols, + 'c:s' => \$o_crit, 'critical:s' => \$o_crit, 'w:s' => \$o_warn, 'warn:s' => \$o_warn, 't:i' => \$o_timeout, 'timeout:i' => \$o_timeout, 'n:s' => \$o_descr, 'name:s' => \$o_descr, @@ -225,10 +240,8 @@ sub check_options { 'a' => \$o_mem_avg, 'average' => \$o_mem_avg, 'u:s' => \$o_cpu, 'cpu' => \$o_cpu, '2' => \$o_version2, 'v2c' => \$o_version2, + 'o:i' => \$o_octetlength, 'octetlength:i' => \$o_octetlength, 'g' => \$o_get_all, 'getall' => \$o_get_all, - #### To be compatible with version 1.2, will be removed... #### - 's' => \$compat_o_cpu_sum, 'cpusum' => \$compat_o_cpu_sum, - ########## 'V' => \$o_version, 'version' => \$o_version ); if (defined ($o_help)) { help(); exit $ERRORS{"UNKNOWN"}}; @@ -236,6 +249,19 @@ sub check_options { # check snmp information if ( !defined($o_community) && (!defined($o_login) || !defined($o_passwd)) ) { 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) && (isnotnum($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 compulsory attributes if ( ! defined($o_descr) || ! defined($o_host) ) { print_usage(); exit $ERRORS{"UNKNOWN"}}; @o_warnL=split(/,/,$o_warn); @@ -277,7 +303,10 @@ sub check_options { if ($o_cpuL[0]>$o_cpuL[1]) {print "Warning must be <= Critical for cpu!\n";print_usage(); exit $ERRORS{"UNKNOWN"}}; } - + #### octet length checks + if (defined ($o_octetlength) && (isnotnum($o_octetlength) || $o_octetlength > 65535 || $o_octetlength < 484 )) { + print "octet lenght must be < 65535 and > 484\n";print_usage(); exit $ERRORS{"UNKNOWN"}; + } } ########## MAIN ####### @@ -297,16 +326,31 @@ if (defined($TIMEOUT)) { my ($session,$error); if ( defined($o_login) && defined($o_passwd)) { # SNMPv3 login - verb("SNMPv3 login"); - ($session, $error) = Net::SNMP->session( - -hostname => $o_host, - -version => '3', - -username => $o_login, - -authpassword => $o_passwd, - -authprotocol => 'md5', - -privpassword => $o_passwd, + if (!defined ($o_privpass)) { + verb("SNMPv3 AuthNoPriv login : $o_login, $o_authproto"); + ($session, $error) = Net::SNMP->session( + -hostname => $o_host, + -version => '3', + -port => $o_port, + -username => $o_login, + -authpassword => $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, + -port => $o_port, + -authpassword => $o_passwd, + -authprotocol => $o_authproto, + -privpassword => $o_privpass, + -privprotocol => $o_privproto, + -timeout => $o_timeout + ); + } } else { if (defined ($o_version2)) { # SNMPv2 Login @@ -333,6 +377,20 @@ if (!defined($session)) { exit $ERRORS{"UNKNOWN"}; } +if (defined($o_octetlength)) { + my $oct_resultat=undef; + my $oct_test= $session->max_msg_size(); + verb(" actual max octets:: $oct_test"); + $oct_resultat = $session->max_msg_size($o_octetlength); + if (!defined($oct_resultat)) { + printf("ERROR: Session settings : %s.\n", $session->error); + $session->close; + exit $ERRORS{"UNKNOWN"}; + } + $oct_test= $session->max_msg_size(); + verb(" new max octets:: $oct_test"); +} + # Look for process in name or path name table my $resultat=undef; my %result_cons=(); diff --git a/check_snmp_storage.pl b/check_snmp_storage.pl index 3299175..7d93fa3 100755 --- a/check_snmp_storage.pl +++ b/check_snmp_storage.pl @@ -1,12 +1,12 @@ #!/usr/bin/perl -w ############################## check_snmp_storage ############## -# Version : 1.3.1 -# Date : Jan 11 2007 +# Version : 1.3.2 +# Date : March 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 # TODO : -# Contribs : Dimo Velev +# Contribs : Dimo Velev, Makina Corpus ################################################################# # # help : ./check_snmp_storage -h @@ -57,7 +57,7 @@ $hrStorage{"1.3.6.1.2.1.25.2.1.10"} = 'NetworkDisk'; # Globals my $Name='check_snmp_storage'; -my $Version='1.3'; +my $Version='1.3.2'; my $o_host = undef; # hostname my $o_community = undef; # community @@ -87,13 +87,15 @@ my $v3protocols=undef; # V3 protocol list. my $o_authproto='md5'; # Auth protocol my $o_privproto='des'; # Priv protocol my $o_privpass= undef; # priv password +# SNMP Message size parameter (Makina Corpus contrib) +my $o_octetlength=undef; # functions sub p_version { print "$Name version : $Version\n"; } sub print_usage { - print "Usage: $Name [-v] -H -C [-2] | (-l login -x passwd [-X pass -L ,]) [-p ] -m [-q storagetype] -w -c [-t ] [-T pl|pu|bl|bu ] [-r] [-s] [-i] [-e] [-S 0|1[,1,]]\n"; + print "Usage: $Name [-v] -H -C [-2] | (-l login -x passwd [-X pass -L ,]) [-p ] -m [-q storagetype] -w -c [-t ] [-T pl|pu|bl|bu ] [-r] [-s] [-i] [-e] [-S 0|1[,1,]] [-o ]\n"; } sub round ($$) { @@ -187,6 +189,10 @@ warn if %used > warn and critical if %used > crit 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 +-o, --octetlength=INTEGER + max-size of the SNMP message, usefull in case of Too Long responses. + Be carefull with network filters. Range 484 - 65535, default are + usually 1472,1452,1460 or 1440. -t, --timeout=INTEGER timeout for SNMP in seconds (Default: 5) -V, --version @@ -238,6 +244,7 @@ sub check_options { 'V' => \$o_version, 'version' => \$o_version, 'q:s' => \$o_storagetype, 'storagetype:s'=> \$o_storagetype, 'S:s' => \$o_short, 'short:s' => \$o_short, + 'o:i' => \$o_octetlength, 'octetlength:i' => \$o_octetlength, 'f' => \$o_perf, 'perfparse' => \$o_perf ); if (defined($o_help) ) { help(); exit $ERRORS{"UNKNOWN"}}; @@ -295,6 +302,10 @@ sub check_options { if (defined ($o_shortL[2]) && isnnum($o_shortL[2])) {print "-S last option must be an integer\n";print_usage(); exit $ERRORS{"UNKNOWN"};} } + #### octet length checks + if (defined ($o_octetlength) && (isnnum($o_octetlength) || $o_octetlength > 65535 || $o_octetlength < 484 )) { + print "octet lenght must be < 65535 and > 484\n";print_usage(); exit $ERRORS{"UNKNOWN"}; + } } ########## MAIN ####### @@ -323,6 +334,7 @@ if ( defined($o_login) && defined($o_passwd)) { -username => $o_login, -authpassword => $o_passwd, -authprotocol => $o_authproto, + -port => $o_port, -timeout => $o_timeout ); } else { @@ -335,6 +347,7 @@ if ( defined($o_login) && defined($o_passwd)) { -authprotocol => $o_authproto, -privpassword => $o_privpass, -privprotocol => $o_privproto, + -port => $o_port, -timeout => $o_timeout ); } @@ -366,6 +379,20 @@ if (!defined($session)) { exit $ERRORS{"UNKNOWN"}; } +if (defined($o_octetlength)) { + my $oct_resultat=undef; + my $oct_test= $session->max_msg_size(); + verb(" actual max octets:: $oct_test"); + $oct_resultat = $session->max_msg_size($o_octetlength); + if (!defined($oct_resultat)) { + printf("ERROR: Session settings : %s.\n", $session->error); + $session->close; + exit $ERRORS{"UNKNOWN"}; + } + $oct_test= $session->max_msg_size(); + verb(" new max octets:: $oct_test"); +} + my $resultat=undef; my $stype=undef; # Get rid of UTF8 translation in case of accentuated caracters (thanks to Dimo Velev). diff --git a/doc/faq.html b/doc/faq.html new file mode 100755 index 0000000..69c3a97 --- /dev/null +++ b/doc/faq.html @@ -0,0 +1,245 @@ + + +Nagios plugins + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
Home

+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
FAQ
+ +

 

+ +

Last update : Jan 11 2007

+ +
+ +

 

+

FIRST, look at the web page associated + with every script.

+

Running the scripts :

+

- The scripts outputs "Can't + locate Net/SNMP.pm in @INC....."

+

- How do I install Net::SNMP + perl module

+

- What are the supported platforms + to run the scripts on ?

+

- How do I get help on the + options ?

+

- Return code of X is out of + bounds

+

- Are these plugins compatible + with Nagios 2.0 ?

+

- ERROR: XXXXXX : Expected + OBJECT IDENTIFIER in dotted notation.

+

- "No Output" using + Nagios 2

+

- Getting : "ERROR: Size + table :Message size exceeded buffer maxMsgSize"

+

Misc
+

+

- Are these scripts secure + ?

+

- How can I get help ? Is + there a mailling list ? a forum ?

+

- Can I donate to help this + project ?

+
+

The scripts outputs "Can't + locate Net/SNMP.pm in @INC....."

+

You don't have Net::SNMP installed, see below

+

How do I install Net::SNMP + perl module ?

+

There are 2 ways of doing this

+

1) By CPAN (best)

+

on command line, as root :
+
+ [your_host]# perl -MCPAN -e shell
+ cpan shell -- CPAN exploration and modules installation (v1.76)
+ ReadLine support enabled
+ cpan> install Net::SNMP
+

+

If it's the first time you run CPAN, it will + probably ask you some (simple) questions.

+

CPAN will also ask you to satisfy some dependencies + (Crypt::DES, Digest::MD5, etc..).

+

2) "By hand"
+

+

Get the folowings modules (tar.gz format) on + www.cpan.org

+

- Crypt::DES
+ - Digest::MD5
+ - Digest::SHA1
+ - Digest::HMAC
+ - Net::SNMP
+
+ for each one (you must install Net::SNMP at the end) :
+ tar zxf <module>.tar.gz
+ cd <module>
+ perl Makefile.pl
+ make test
+ make install

+

What are the supported + platforms to run the scripts on ?

+

Most Linux, maybe some unixes and maybe Cygwin.
+ Actually anything you can run perl on.
+ If you can install the latest Net::SNMP module, then the perl version + should be OK.

+

How do I get help on the + options ?

+

Just run <script> -h on the command + line.
+
+

+

Return code of X is out + of bounds

+

Have a look at : http://www.nagios.org/faqs/viewfaq.php?faq_id=17

+

In case of return code 127, try putting perl + in the command line definition :

+

define command{
+ command_name check_disk
+ command_line /usr/bin/perl $USER1$/check_snmp_storage.pl + -C $ARG1$ [........]
+ }
+

+

Are these plugins compatible + with Nagios 2.0 ?

+

Yes.

+

ERROR: XXXXXX : Expected OBJECT IDENTIFIER in dotted notation. +

+

Upgrade your Net::SNMP module version (5 is good, 4 maybe OK, 3 gives this error)
+ This happens with Debian Woody (Net::SNMP version 3.6).
+ I have special patches if you can't upgrade : contact me.

+

"No Output" using + Nagios 2

+

It's a "bug" of embeded perl. It + has been corrected in latest Nagios releases.

+

You can :
+

+

- Add a patch if your nagios release is old. + Here is a patch made by Gavin Carr for the p1.pl file to correct + this (it should be in nagios CVS shortly). http://nagios.manubulon.com/p1-print.pl.patch +

+

- Upgrade Nagios.
+
+ - add "/usr/bin/perl" before the script command so Nagios + won't use embeded perl.

+

Getting : "ERROR: + Size table :Message size exceeded buffer maxMsgSize"

+

Your snmp table is too big.

+

Some of my scripts (check_snmp_storage and + check_snmp_process) now have an option (-o) to set this directly + on command line (thx to Makina Corpus for the patch).

+

In other scripts, try adding :

+

$session->max_msg_size(5000);
+

+

After the session has been initialized.

+


+ Are these scripts secure ?

+

Not at all ! You must secure the Nagios server.
+ Nobody else than the nagios user should be allowed to even think + about running these scripts.
+

+

How can I get help ? Is + there a mailling list ? a forum ?

+

Go to the sourceforge project page for all this : Nagios-snmp +

Can + I donate to help this project ?

+

Of course you can, I just haven't got any idea + of how, so just send a postcard to my son (Jolan) with a nice drawing (or buy a cookie to your son/daughter/nephew/grand-ma...).
+ You can get my postal address on my resume (www.manubulon.com/cvpproy.htm).
+ He will answer you when he knows how to write (in several years).

+
+

This project is also hosted by :
+ + SourceForge.net Logo +

+ +
+ +

 

+ + + + + diff --git a/doc/index.html b/doc/index.html new file mode 100755 index 0000000..e58666b --- /dev/null +++ b/doc/index.html @@ -0,0 +1,338 @@ + + +Nagios plugins + + + + + + + + +
+ + + + + + + + + + + + + + + + +
SNMP plugins for Nagios
+

Last update : April 19 2007

+

About

+

The general idea of these scripts is to check + as many things as possible with snmp (how do you install NRPE on + Cisco or AS/400 ?) : disks, memory, load, interface, running procsses, + etc...
+

+

The other idea is to select disks, interfaces, + process using regular expressions
+
+ - it is possible to test more than one disk/int/process in one Nagios + check (ex : eth* instead of eth0,eth1,eth2,...)
+
+ - you only have to provide a unique part of the name to select a + disk/int/process (ex : "C:" instead of "C:\ Label: + Serial Number xxxxxxx" makes it easy to use on multiple Windows + hosts).

+

Most of these scripts can make performance + outputs.

+

Enjoy and give me feedback !
+
+ All code here is under GPL licence.
+

+

If you want to be informed when I release + new versions,
+ or if you have some advices, feedback, questions, go to the project's + sourceforge page : nagios-snmp

+

Please send me your feedback :
+ - Test with embeded Perl
+ - Test on various systems
+ - Bugs, advices, comments, RFE, etc...
+ Thank you !

+

Run the scripts with '-h' to get help.

+
+

 

+

Requirements

+

- Perl in /usr/bin/perl - if not run 'perl + script' or change the path in the scripts first line
+ - Net::SNMP
+ - file 'utils.pm' in diretory /usr/local/nagios/libexec or change + the line "use libs /usr/local/nagios/libexec/" in the scripts
+

+

Configurations + examples

+

Plugins
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

check_snmp_storage
+
+

 

+
+

This scripts checks by snmp (1,2c,3) disks, memory, swap, + everthing in hrStorage table.
+ Disk selection can be done by perl regexp on description, + index or type to select one or multiple storages.
+
+ Vérifie par snmp v1 ou v3 (merci à V. Carpentier) + l'occupation des disques, mais aussi de la swap, de la mémoire, + etc.. tout ce qui est disponible en snmp par la table hrStorage.
+ Les disques sont sélectionnables par expression régulière + compatible Perl

+

Details

+
+

check_snmp_int
+
+

+
+

Checks by snmp (1,2c,3) interface state and usage. Interfaces + can be selected by regexp.
+ It is possible to check the input/output bandwidth and error + rate of the interface.
+
+ Vérifie par snmp v1 ou v3 l'état des interfaces + d'un hôte.
+ Ce script permet d'utiliser des expressions régulières + pour sélectionner les interfaces : ex 'eth' va vérifier + eth0, eth1, ...
+ Il permet également de lister toutes les interfaces + disponibles sur la machine cible (option -v).

+

Details

+
+

check_snmp_process

+


+

+

 

+
+

Checks by snmp (1,2c,3) the number (can be 1) of processes + matching a perl regexp.
+ The script can also check memory and cpu usage of processes.

+

Vérifie par snmp v1 ou v3 (idem) le nombre de process + sur un hôte.
+ Ce script permet d'utiliser des expressions régulières + pour sélectionner les process.
+ Il est également possible de vérifier l'utilisation + mémoire et CPU de la machine.
+ Il permet également de lister touts les process disponibles + sur la machine cible (option -v).

+

Details

+
+

check_snmp_load

+

 

+
+

Checks by snmp (1,2c,3) cpu or average load.
+ Works on Linux, Windows, Cisco, AS400, HP Procurve, LinkProof, + Blucoat, Nokia, Fortinet, Netscreen,HP-UX.

+

Vérifie par snmp (1,2c,3) la charge ou l'ocupation + CPU.
+

+

Details.

+
+

check_snmp_mem

+

 

+
+

Checks by snmp (1,2c,3) :
+ - Memory and swap usage on Linux/Net-snmp
+ - Memory usage on cisco routers or Pix
+ - Memory usage on HP Procurve switchs
+ For memory check on other OS (Windows, AS400) see the description + page

+

Vérifcation de
+ - l'utilisation mémoire et swap sur Linux/Net-snmp
+ - l'utilisation mémoire sur Cisco (routeurs et Pix).
+ - l'utilisation mémoire sur Switch Hp Procurve.
+ Pour d'autres SE (Windows, AS400), aller à la page + de description.

+

Détail

+
+

check_snmp_vrrp

+

 

+
+

Checks the vrrp state of all the interface of a host. You + can specify if they must be master or backup.
+ Supported platforms : Nokia IP (vrrp & clustering), Linkproof, + Alteon.

+

Verifie l'état vrrp des interfaces d'un host.

+
+

check_snmp_cpfw

+

 

+
+

Checks the state of Checkpoint Firewall-1 modules (SVN, HA, + FW, MGMT) and active connexions (tested on NG).
+ Snmp extensions must be activated

+

Vérifie l'état des modules Checkpoint Fw-1 + (HA, SVN, MGMT, FW) et les connexions actives. Testé + sur NG-AI R55.
+ L'extension SNMP doit être activée sur les modules.

+

Détail

+
+

check_snmp_win

+

 

+
+

Checks windows services state with snmp.

+

Véifie l'état de services Windows par snmp.

+

Détail

+
+

check_snmp_css

+

 

+
Checks css services state
+

check_snmp_env

+

 

+
Checks environemental status (fan, temp, + power supply) on Cisco, Nokia, Bluecoat, IronPort, Foundry.
+
+

Compatibility matrix :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Systemcheck_snmp_storagecheck_snmp_intcheck_snmp_processcheck_snmp_memcheck_snmp_load
Linux +

OK :
+ - '/home', '/var'
+ - 'Swap', 'Real Memory'
+

+
OK :
+ - 'eth'
+ - 'ppp'
OKOK (mem & swap) +

OK

+
Windows +

OK :
+ - '^[CDE]:'

+
OKOK +

NO
+ See check_snmp_storage for virtual mem

+
OK
Cisco/HP switchN/AOK :
+ - 'Giga' : all gigabits
+ - 'Fast.*0.1[1234]' : checks FastEternet0/11 to 0/14.
N/AOKOK
AS400OK :
+ - '-m RAM -s' to get all RAM
+ - 'System ASP' : Disk
+
OK OK +

NO
+ See check_snmp_storage

+
OK
LinkProofN/AOKN/AN/AOK
+
+
+

This project is hosted on :
+ SourceForge.net Logo +

+

Nagios and the Nagios logo are registered + trademarks of Ethan Galstad.

+
+
+ + diff --git a/doc/index_commands.html b/doc/index_commands.html new file mode 100755 index 0000000..66bac6c --- /dev/null +++ b/doc/index_commands.html @@ -0,0 +1,2038 @@ + + +Nagios plugins + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
This site :
Home
Nagios plugins
Info on snmp
Nagios config
FAQ
+ Project page on SourceForge
-----------
Links :
Nagios + + Home
Nagios + + Plugins
Oreon project
NagiosExchange
Opsyx + + forum
Forum 2037
-----------
SourceForge.net Logo + +
+ + + +
+ + + + + + + + + + + + + + + + + +
My plugins for Nagios + +
+ +

Last update : Jan 15 2006

+ +

Commands

+ +

Here are commands example to use my scripts + + with nagios.
+ + It's only the basic things you can do, check the help of every + + script if you need more advanced features especially if you need + + performance outputs.
+ + The command definitions are complete, but not the service definitions + + : you must add host name, contact groups, etc....

+ +

All these commands use $USER<n>$ macros + + to put snmp login. The reason for this is that the ressources.cfg + + file cannot be read by the CGI, preventing your "passwords" + + to be seen with the config.
+ + You must set the $USER7$ or $USER8$ to make these examples work. + +
+ + The $USER<n>$ macro are defined in the resources.cfg file

+ +

SNMP login with $USER<n>$
+ + About regular expressions

+ +

Configuration examples + + of
+ +
+ + check_snmp_boostedge.pl
+ +
check_snmp_cpfw.pl
+ +
check_snmp_css.pl + + & check_snmp_css_main.pl
+ +
check_snmp_env.pl
+ +
check_snmp_linkproof_nhr.pl
+ + check_snmp_load.pl
+ + check_snmp_interface.pl
+ + check_snmp_mem.pl
+ +
check_snmp_nsbox.pl + +
+ + check_snmp_process.pl
+ + check_snmp_storage.pl
+ + check_snmp_vrrp.pl
+ +
check_snmp_win.pl

+ +

Checks you can make by + host type

+ +

SNMP + + login
+ +

+ +
For more information, you can have a look at information + + on snmp login

+ +

If you are using snmp v1 :
+ + $USER7$=-C <community>

+ +

If you are using snmp v2c :
+ + $USER7$=-C <community> -2

+ +

or you can use $USER9$ if you need both v1 and v2c.

+ +

Examples of snmp v3 login :
+ + AuthNoPriv (md5) :
+ + $USER8$=-l <login> -x <pass>

+ +

AuthPriv (md5,aes) :
+ +
$USER8$=-l <login> -x <pass> -X <pass> + + -L md5,aes
+ +

+ +

+ +

About + + regular expressions

+ +

With all these scripts, when you select an + + interface, a service or process name etc... you use by default regular + + expresions :
+ + Note : you can disable this by using "-r"

+ +

Examples : Don't forget it is perl regular + + expressions.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RegexpWill match
etheth0, eth1, eth2 but also Fastethernet0/0 + + ....
eth[1-9]eth1, eth2, ... eth9 but also eth10, eth11
eth[1-2]$eth1, eth2 only (not eth11 for ex).
dhcpdhcpc, dhpcd
+ +

 

+ +

check_snmp_boostedge.pl + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_snmp_boostedge
Nagios cmddefine command{
+ + command_name check_snmp_boostedge_v1
+ + command_line $USER1$/check_snmp_boostedge.pl -H $HOSTADDRESS$ + + $USER7$ -s $ARG1$ -n $ARG2$ $ARG3$
+ + }
ArgumentsARG1 : Service name (regexp)
+ + ARG2 : Number of services selected by regexp which must be in + + running & enabled state
+ + ARG3 : additional arguments if needed.
Service + +

boostedge_services : checks is there is 3 active + + & enabled service matching "test" with + + snmp v2c

+ +
Nagios servicedefine service {
+ +    name boostedge_services
+ +    check_command check_snmp_boostedge_v1!test!3!-2
+ + }
+ +

check_snmp_cpfw.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_cpfw1_v3
Nagios cmddefine command{
+ +   command_name check_cpfw1_v3
+ +   command_line $USER1$/check_snmp_cpfw.pl -H $HOSTADDRESS$ + + $USER8$ $ARG1$
+ + }
ArgumentsARG1 : all arguments.
Service + +

checkpoint_verification : checks high availability + + cluster, with policy "CP_Policy" installed, and + + warning at 100000 connexions, critical at 200000
+ + CP_Management : checks management station

+ +
Nagios servicedefine service {
+ +    name checkpoint_verification
+ +    check_command check_cpfw1_v3!-swa -p CP_Policy + + -c 100000,200000 -f
+ + }
Nagios service + +

define service {
+ +    name CP_Management
+ +    service_description CPFW1 management
+ +    check_command check_cpfw1_v3!-sm
+ + }

+ +
+ +

check_snmp_css.pl + + & check_snmp_css_main.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Command + +

check_snmp_css_main : get index from the host, services + + are then checked using check_snmp_css_indexed (snmpv2)
+ + check_snmp_css_indexed : check services indexed by + + check_snmp_css_main (snmpv2)
+ + check_snmp_css : directly read index & data from + + the host (snmpv2)

+ +
Nagios cmddefine command{
+ +   command_name check_snmp_css_main
+ +   command_line $USER1$/check_snmp_css_main.pl -H $HOSTADDRESS$ + + $USER7$ -2
+ + }
Nagios cmddefine command{
+ +   command_name check_snmp_css_indexed
+ +   command_line $USER1$/check_snmp_css.pl -H $HOSTADDRESS$ + + $USER7$ -2 -d -n $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
+ + }
Nagios cmddefine command{
+ +   command_name check_snmp_css
+ +   command_line $USER1$/check_snmp_css.pl -H $HOSTADDRESS$ + + $USER7$ -2 -n $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
+ + }
Arguments + +

ARG1 : regexp of service(s) to check
+ + ARG2 : warning level for : minimum number of active & + + alive service , average response time, number of connexions
+ + ARG3 : critical level for : minimum number of active & + + alive service , average response time, number of connexions + +
+ + ARG4 : additional arguments if needed.

+ +
Service + +

css_index_file_create : This is a "fake" + + service, which only creates index file in /tmp. It normally + + returns the number of services it indexes, or an error if + + he can't.
+ + css_verif_TEST : checks at least 2 services + + mathnig TEST are up. Warning if 1, critical if 0. This service + + uses the index file created by css_index_file_create, and + + returns UNKNOWN if it can't find it.
+ + css_verif_TEST2 : checks at least 2 services + + mathnig TEST2 are up. Warning if 1, critical if 0. This service + + doesn't use an index file.

+ +
Nagios servicedefine service {
+ +    name css_index_file_create
+ +    check_command check_snmp_css_main
+ + }
Nagios service + +

define service {
+ +    name css_verif_TEST
+ +    check_command check_snmp_css_indexed!"TEST"!1!0 + +
+ + }

+ +
Nagios service + +

define service {
+ +    name css_verif_TEST2
+ +    check_command check_snmp_css!"TEST2"!1!0 + +
+ + }

+ +
+ +

 

+ +

check_snmp_env.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_snmp_env (snmpv1)
+ + check_snmp_env_v3 (snmpv3)
Nagios cmddefine command{
+ +   command_name check_snmp_env
+ +   command_line $USER1$/check_snmp_env.pl -H $HOSTADDRESS$ + + $USER7$ -T $ARG1$ $ARG2$
+ + }
Nagios cmddefine command{
+ +   command_name check_snmp_env_v3
+ +   command_line $USER1$/check_snmp_env.pl -H $HOSTADDRESS$ + + $USER8$ -T $ARG1$ $ARG2$
+ + }
ArgumentsARG1 : type (cisco|nokia|bc|iron)
+ + ARG2 : additional arguments if needed.
Service + +

ironport_env : checks ironport fans RPM > 1500 + + and temp < 70 deg celcius
+ + nokia_env : checks nokia IP fans and power supply status
+ + cisco_env : checks cisco fans and power supply status + +

+ +
Nagios servicedefine service {
+ +    name ironport_env
+ +    check_command check_snmp_env!iron!-F + + 1500 -c 70
+ + }
Nagios service + +

define service {
+ +   name nokia_env
+ +   check_command check_snmp_env_v3!nokia
+ + }

+ +
Nagios service + +

define service {
+ +   name cisco_env
+ +   check_command check_snmp_env_v3!cisco
+ + }

+ +
+ +

check_snmp_linkproof_nhr.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_snmp_lp_nhr_v3 (snmpv3 and performance output)
Nagios cmddefine command{
+ +   command_name check_snmp_lp_nhr_v3
+ +   command_line $USER1$/check_snmp_linkproof_nhr.pl + + -H $HOSTADDRESS$ $USER8$ -f
+ + }
ArgumentsNone
Service + +

linkproof_nhr : returns
+ + WARNING if one nhr at least is in "no new session" + + or "inactive" mode.
+ + CRITICAL if all nhr are inactive.

+ +
Nagios servicedefine service {
+ +    name linkproof_nhr
+ +    check_command check_snmp_lp_nhr_v3
+ + }
+ +

check_snmp_load.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_snmp_load_v1 : using snmpv1 (or v2 depending + + on $USER7$ value)
+ + check_snmp_load_v3 : using snmpv3
Commanddefine command{
+ +    command_name check_snmp_load_v1
+ +    command_line $USER1$/check_snmp_load.pl -H $HOSTADDRESS$ + + $USER7$ -T $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
+ + }
Commanddefine command{
+ +    command_name check_snmp_load_v3
+ +    command_line $USER1$/check_snmp_load.pl -H $HOSTADDRESS$ + + $USER8$ -T $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
+ + }
Arguments + +

ARG1 : host type (stand,netsc,netsl,as400,cisco,cata,nsc,fg,bc,nokia,hp,lp,hpux)
+ + ARG2 : warning level
+ + ARG3 : critical level
+ + ARG4 : additional arguments if needed.

+ +
Servicebluecoat_load : Bluecoat cpu usage
+ + Linux_load : Linux load (1min, 5 min, 15 min)
+ + Cisco_load : Cisco cpu usage
+ + lp_load : Radware Linkproff cpu usage
Servicedefine service {
+ +    name bluecoat_load
+ +    check_command check_snmp_load_v1!bc!95!99
+ + }
Service + +

define service {
+ +    name Linux_load
+ +    check_command check_snmp_load_v1!netsl!4,3,3!8,5,5
+ + }

+ +
Service + +

define service {
+ +    name Cisco_load
+ +    check_command check_snmp_load_v1!cisco!90,80,60!100,100,100
+ + }

+ +
Servicedefine service {
+ +    name lp_load
+ +    check_command check_snmp_load_v1!lp!90!99
+ + }
+ +

check_snmp_interface.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Command +

check_snmp_int_v1 : using snmpv1
+ check_snmp_int_v3 : using snmpv3

+
Commanddefine command{
+ +   command_name check_snmp_int_v1
+ +   command_line $USER1$/check_snmp_int.pl -H $HOSTADDRESS$ + + $USER7$ -n $ARG1$ $ARG2$
+ + }
Commanddefine command{
+ +   command_name check_snmp_int_v3
+ +   command_line $USER1$/check_snmp_int.pl -H $HOSTADDRESS$ + + $USER8$ -n $ARG1$ $ARG2$
+ + }
Arguments + +

ARG1 : regexp of interface
+ + ARG2 : additional arguments if needed.

+ +
Servicecheck_int_1_6: Checks FastEthernet 1 to 6 are up (snmpv1)
+ + check_int_eth0_bdw : Checks input bandwith on eth1 is + + < 100 KBytes/s and output is < 50 Kbytes/s (critical at + + 0,0 means no critical levels). (snmpv3)
Service + +

define service {
+ +   name check_int_1_6
+ +   check_command check_snmp_int_v1!"FastEthernet-[1-6]"
+ + }

+ +
Servicedefine service {
+ +   name check_int_eth0_bdw
+ +   check_command check_snmp_int_v3!eth0!-k + + -w 100,50 -c 0,0
+ + }
+ +

check_snmp_mem.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_snmp_mem
Commanddefine command{
+ +   command_name check_snmp_mem_v1
+ +   command_line $USER1$/check_snmp_mem.pl -H $HOSTADDRESS$ + + $USER7$ $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
+ + }
Commanddefine command{
+ +   command_name check_snmp_mem_v3
+ +   command_line $USER1$/check_snmp_mem.pl -H $HOSTADDRESS$ + + $USER8$ $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
+ + }
Arguments + +

ARG1 : Host type (-N, -I, -E)
+ + ARG2 : warning level(s)
+ + ARG3 : critical level(s)
+ + ARG4 : additional arguments if needed.

+ +
ServiceLinux_memory : warning at 95% memory used and 60% swap + + used, critical at 99% mem and 90% swap
+ + Cisco_mem : warning at 80% used, critical at 99% used.
Servicedefine service {
+ +   name Linux_memory
+ +   check_command check_snmp_mem_v1!-N!95,60!99,90
+ + }
Service + +

define service {
+ +   name Cisco_mem
+ +   check_command check_snmp_mem_v1!-I!80!99 + +
+ + }

+ +
+ +

check_snmp_nsbox.pl + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_snmp_nsbox (snmpv1 or v2c)
Nagios cmddefine command{
+ + command_name check_snmp_nsbox
+ + command_line $USER1$/check_snmp_nsbox.pl -H $HOSTADDRESS$ $USER7$ + + -d $ARG1$ -s $ARG2$ -n $ARG3$ $ARG4$
+ + }
Arguments + +

ARG1 : Diode name (regexp)
+ + ARG2 : Vhost name (regexp)
+ + ARG3 : Number of diodes and vhost that must be up
+ + ARG4 : additional arguments if needed.

+ +
Service + +

check_service_nsbox : checks using snmpv2
+ + - 6 diodes matching "diode_name" are up
+ + - 3 vhosts matching "vhost_name" are up

+ +
Nagios servicedefine service {
+ +     name check_service_nsbox
+ +     check_command check_snmp_nsbox_v1!diode_name!vhost_name!6,3!-2
+ + }
+ +

check_snmp_process.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_snmp_process
Commanddefine command{
+ +   command_name check_snmp_process_v1
+ +   command_line $USER1$/check_snmp_process.pl -H $HOSTADDRESS$ + + $USER7$ -n $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
+ + }
Arguments + +

ARG1 : regexp of process name
+ + ARG2 : warning level(s)
+ + ARG3 : critical level(s)
+ + ARG4 : additional arguments if needed.

+ +
Servicesproxy_checks : checks with snmpv2 (-2 option) that + + there is more than 21 process matching "proxy", but + + no more than 1999 (critical at 20 & 2000)
+ + Check_httpd_all : Checks that process matching + + "httpd"
+ + - Process number is > 5 and < 100 (or returns warning)
+ + - Process number is > 0 (or returns critical)
+ + - Memory used (by httpd process using the max memory) is < + + 20 Mbytes or < 30 Mbytes
+ + - Cpu used (by all process together) is < 90% or 99%.
+ + check_crontab : checks crontab is running (critical if + + not, no warnings).
Servicedefine command {
+ +   name proxy_checks
+ +   check_command check_snmp_process_v1!proxy!21,1999!20,2000!-2 + +
+ + }
Servicedefine command {
+ +   name Check_httpd_all
+ +   check_command check_snmp_process_v1!httpd!5,100!0!-2 + + -m 20,30 -u 90,99
+ + }
Service + +

define service {
+ +   name check_crontab
+ +   check_command check_snmp_process!crond!0!0
+ + }

+ +
+ +

check_snmp_storage.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_snmp_storage
Commanddefine command{
+ +   command_name check_snmp_storage_v1
+ +   command_line $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ + + $USER7$ -m $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
+ + }
Commanddefine command{
+ +   command_name check_snmp_storage_v3
+ +   command_line $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ + + $USER8$ -m $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
+ + }
Arguments + +

ARG1 : regexp of storage name
+ + ARG2 : warning level
+ + ARG3 : critical level
+ + ARG4 : additional arguments if needed.

+ +
ServiceCheck_LinDisk_home : Checks "/home" mountpoint + + (and only this one because of -r) usage < 90 and 97 %
  + +

define service {
+ +   name Check_LinDisk_home
+ +   service_description Verification /home
+ +   check_command check_snmp_storage_v3!/home!90!97!-r + +
+ + }

+ +
ServiceWin_check_swap : Checks virtual (ram+swap) mem on windows + + < 60% or 90%
  + +

define command {
+ +   name Win_check_swap
+ +   service_description Verification swap Windows
+ +   check_command check_snmp_storage_v3!Virtual!60!90
+ + }

+ +
Servicecheck_linux_swap : checks Linux swap < 60 and 90%
  define command {
+ +   name check_linux_swap
+ +   service_description Verfication swap linux
+ +   check_command check_snmp_storage_v1!Swap!60!90!
+ + }
Servicecheck_disk_all : Checks that "/", "/opt" + + , "/var", "/config" mountpoints usage is + + < 80 and 90%
  define command {
+ +   name check_disk_all
+ +   service_description Verification / /opt /var /config
+ +   check_command check_snmp_storage_v1!"^/$|opt|config|var"!80!90!
+ + }
+ +

check_snmp_vrrp.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_snmp_vrrp
Commanddefine command{
+ +   command_name check_snmp_vrrp_v1
+ +   command_line $USER1$/check_snmp_vrrp.pl -H $HOSTADDRESS$ + + $USER7$ -T $ARG1$ -s $ARG2$
+ + }
Commanddefine command{
+ +   command_name check_snmp_vrrp_v3
+ +   command_line $USER1$/check_snmp_vrrp.pl -H $HOSTADDRESS$ + + $USER8$ -T $ARG1$ -s $ARG2$
+ + }
Arguments + +

ARG1 : Host type (nokia, alteon, lp, nsc, ipso)
+ + ARG2 : state (master or backup) or number of members, max + + % assigned to nodes (for ipso).

+ +
ServiceLinkproof_check_vrrp_master : Checks that all interface + + are in master state
Service + +

define service {
+ +   name Linkproof_check_vrrp_master
+ +   check_command check_snmp_vrrp_v3!lp!master
+ + }

+ +
ServiceNokia_check_vrrp_backup : Checks that all interface + + are in backup state
Servicedefine service {
+ +   name Linkproof_check_vrrp_backup
+ +   check_command check_snmp_vrrp_v3!lp!backup
+ + }
ServiceNokia_clustering : checks that nokia cluster has 2 + + members and that the load assigned to each member < 98%
Servicedefine service {
+ +   name Nokia_clustering
+ +   check_command check_snmp_vrrp_v3!ipso!2,98%
+ + }
+ +

check_snmp_win.pl

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandcheck_snmp_win
Nagiosdefine command {
+ +   command_name check_win
+ +   command_line $USER1$/check_snmp_win.pl -H $HOSTADDRESS$ + + $USER7$ -n $ARG2$
+ +   # comment community service(s) name
+ + }
Servicecheck_win_dhcp : Checks dhcp service is running
Nagios + +

define service {
+ +   name check_win_dhcp
+ +   service_description Checks dhcp service is running
+ +   check_command check_win!dhcp
+ + }

+ +
Servicecheck_win_reg_spool: Checks registery access & + + print spool is active (French windows !!)
Nagios + +

define service {
+ +   name check_win_reg_spool
+ +   service_description Checks registery access & + + print spool is active
+ +   check_command check_win!"au registre",spouleur
+ + }

+ +
+ +

Checks you can + make by host type

+

N/A : nothing of this type to check
+ SNMP : yes with simple snmp query
+ ?? : not tested because useless most of the time.

+

Specific : name of the script to look + at for platform specific checks.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Host typeInterfacestorageload/cpumemprocessenvspecific
LinuxYesYesYesYesYesNo 
WindowsYesYesYesYesYesNocheck_snmp_win.pl
Cisco router/switchYesN/AYesYesN/AYes 
HP router/switchYesN/AYesYesN/ANo 
Bluecoat proxyYessnmpYessnmpNoYes 
CheckPoint on SPLATYesYesYesYesYesNocheck_snmp_cpfw.pl
CheckPoint on Nokia IPYesYesYesNo??Nocheck_snmp_vrrp.pl
BoostedgeYesYesYesYes??Nocheck_snmp_boostedge.pl
AS400YesYesYesYesNoNo 
NetsecureOne NetboxYesYesYes??YesNo 
Radware LinkproofYesN/AsnmpsnmpNoNo +

check_snmp_linkproof_nhr
+ check_snmp_vrrp.pl

+
IronPortYessnmpsnmpsnmpNoYes 
Cisco CSSYes??YesYesNo??check_snmp_css.pl
+

 

+ +
+ +

This project is hosted on :
+ + SourceForge.net Logo + +

+ +

Nagios and the Nagios logo are registered trademarks + + of Ethan Galstad.

+ +
+ +
+ + + + + diff --git a/doc/snmp_cpfw.html b/doc/snmp_cpfw.html new file mode 100755 index 0000000..ac84d46 --- /dev/null +++ b/doc/snmp_cpfw.html @@ -0,0 +1,471 @@ + + + + + + +Nagios plugins + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home

+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Snmp Checkpoint FW-1 check
+ +

Script : check_snmp_cpfw.pl

+ +

Last update : April 19 2007

+ +
+ +

Description :

+ +

Checks by snmp v1, v2c or v3 some modules of + Checkpoint FW-1 filtering or management module :

+ +

You can choose to check 1, 2, 3 or all 4 modules. + + Each module will be checked independently and critical state will + + be returned if one of them is not OK.

+ +

- Firewall (on filtering firewall) :

+ +

Checks policy state : must be installed
+ + Can check installed policy name : you mut provide the exact name + + of the policy (-p = <policy name>)
+ + Can check connections : warning and maximum levels must be provided + + ( -c=<warn>,<crit>)

+ +

- SVN

+ +

Checks the svan status code (must be "OK") + + of SVN

+ +

- Management

+ +

Checks the management state ("active") + + and if management is alive.

+ +

- High availability

+ +

Checks the HA state :
+ - "active" on IPSO & master on SPLAT (default)
+ - "standby" on SPLAT
+ Use check_snmp_vrrp.pl for checks on active/standby or IPSO clusters + on IPSO
+ Check the blocking state ("OK")
+ Checks the state of all HA softs, usually : Synchronization,Filter, + cphad and fwd.

+

SNMP Login
+

+

See snmp info page

+ +

Requirements :

+ +

- On the Checkpoint Firewall : SNMP extentions + + must be active

+ +

- Perl in /usr/bin/perl - or just run 'perl + + script'
+ + - Net::SNMP
+ + - file 'utils.pm' in plugin diretory (/usr/local/nagios/libexec)

+ +

Configurations + + examples
+ +

+ +

Dowload + lastest version : 1.2.1

+ +

Changelog + : On CVS repository on sourceforge : http://nagios-snmp.cvs.sourceforge.net/nagios-snmp/plugins/.

+ +

Examples :

+ +


+ + All examples below are considering the script is local directory. + + Host to be checked is 127.0.0.1 with snmp community "public".

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Get help + +

+ +

./check_snmp_cpfw.pl -h

+ +
snmpv3 login./check_snmp_cpfw.pl -H 127.0.0.1 + + -l login -x passwd .....
+ +

Check firewall / HA / SVN - for a HA filtering module - + +

+ +

./check_snmp_cpfw.pl -H 127.0.0.1 -C public -swa

+ +
+ +

Result example : + +

+ +

FW : OK / SVN : OK / HA : OK / CPFW Status : OK

+ +
+ +

Check SVN/Mgmt - for a management - + +

+ +

./check_snmp_cpfw.pl -H 127.0.0.1 -C public -sm

+ +
+ +
Result example :
+ +
SVN : OK / MGMT : OK / CPFW + + Status : OK
Check policy + + name ./check_snmp_cpfw.pl -H 127.0.0.1 + + -C public -w -p prod
+ +

Result example :

+ +
FW : OK / CPFW Status : OK
+ +
Same with another policy installed :
+ +
FW : Policy installed : Standard + + / CPFW Status : CRITICAL
Check number + + of active connection with performance data output./check_snmp_cpfw.pl -H 127.0.0.1 + + -C public -w -c 1000,5000 -f
+ +
Result example :
+ +
FW : OK / CPFW Status : OK + + | fw_connexions=340
+ +

 

+ +

Output of check_snmp_cpfw.pl -h

+ + + + + + + + + +
+

SNMP Checkpoint FW-1 Monitor for Nagios + version 1.2.1
+ GPL Licence, (c)2004-2007 - Patrick Proy +

Usage: ./check_snmp_cpfw.pl [-v] -H <host> -C <snmp_community> + [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>]) + [-s] [-w [-p=pol_name] [-c=warn,crit]] [-m] [-a [standby] + ] [-f] [-p <port>] [-t <timeout>] [-V]
+ -v, --verbose
+ print extra debugging information (including interface list + on the system)
+ -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 v1 protocol)
+ 2, --v2c
+ Use snmp v2c
+ -l, --login=LOGIN ; -x, --passwd=PASSWD
+ Login and auth password for snmpv3 authentication
+ If no priv password exists, implies AuthNoPriv
+ -X, --privpass=PASSWD
+ Priv password for snmpv3 (AuthPriv protocol)
+ -L, --protocols=<authproto>,<privproto>
+ <authproto> : Authentication protocol (md5|sha : default + md5)
+ <privproto> : Priv protocole (des|aes : default des) +
+ -s, --svn
+ check for svn status
+ -w, --fw
+ check for fw status
+ -a, --ha[=standby]
+ check for ha status and node in "active" state
+ If using SecurePlatform and monitoring a standby unit, put + "standby" too
+ -m, --mgmt
+ check for management status
+ -p, --policy=POLICY_NAME
+ check if installed policy is POLICY_NAME (must have -w)
+ -c, --connexions=WARN,CRIT
+ check warn and critical number of connexions (must have -w)
+ -f, --perfparse
+ perfparse output (only works with -c)
+ -P, --port=PORT
+ SNMP port (Default 161)
+ -t, --timeout=INTEGER
+ timeout for SNMP (Default: Nagios default)
+ -V, --version
+ prints version number
+

+
+ +
+ +

This project is hosted on :
+ + SourceForge.net Logo + +

+ +

Nagios and the Nagios logo are registered + + trademarks of Ethan Galstad.

+ +
+ +
+ + + + + + + + + + + diff --git a/doc/snmp_css.html b/doc/snmp_css.html new file mode 100755 index 0000000..84fe3f4 --- /dev/null +++ b/doc/snmp_css.html @@ -0,0 +1,381 @@ + + + + +Nagios plugins + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home

+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Snmp CSS check
+ +

Script : check_snmp_css.pl / check_snmp_css_main.pl

+ +

Last update : Jan 22 2007

+ +
+ +

Description :

+ +

Checks by snmp v1, v2c or v3 CSS services state

+

SNMP Login
+ +

+ +

See snmp info page

+ +

Requirements :

+ +

- Perl in /usr/bin/perl - or just run 'perl + script'
+ - Net::SNMP
+ - file 'utils.pm' in plugin diretory (/usr/local/nagios/libexec)
+

+

Checks

+

This scripts checks status of the CSS services.

+

Select service(s)
+ You select services you wan't to check with -n using regular expressions

+

Put thresholds
+ You select the warning and critical levels for : <num>,<resp>,<conn> +
+ num : minimum number of active & alive service
+ resp : average response time in ms
+ conn : number of connexions

+

You can choose not to put 1, 2 or 3 numbers. +
+ If you set "-w 3" only the number of active services will + be checked.
+ If you set "-w 3,200" only the number of active services + and response time will be checked.
+
+ For no warnings, put -1 (ex : -w5,-1,3).
+ When using negative numbers, dont put space after "-w" + : "-w -1,100,6" will not work, "-w-1,100,6" + will work.

+

-d option and check_snmp_css_main.pl

+

This option is set to make the script read + the index from a file instead of on the CSS.

+

The reason of this option is :
+ - when you have a lot (> 50) services on the CSS
+ - you want to check 10 service group consisting of 5 services every + 2 minutes.

+

If you use check_snmp_css, then it will read + the index (50 oids) + checks 5 oids = 55 OID every 12 seconds in + average. This will heavily load the CSS.
+ This is why I wrote check_snmp_css_main.pl. This script will get + the index of the CSS every 10 minutes for example (could be more) + as the index won't change often.
+ Then the check_snmp_css will only have to check for the 5 oids every + 12 seconds, which will reduce by about 10 the amount of snmp queries + !

+

How to use it :

+

Create a service with long inter-delay check + executing :

+

check_snmp_css_main.pl -H <host> <snmp + logins> -2 -d /var/tmp
+ -2 if for using snmpv2c (better to get a lot of data)
+ -d /var/tmp is to put the temp file to a special directory + (default is /tmp).

+

A file named : Nagios_CSS_<IP Address> + will be created

+

Then you can use your check_snmp_css.pl script + just as before but adding the '-d' option with the temp directory + if not /tmp.

+

If the Nagios_CSS_<IP> file is not created + when the check_snmp_css script runs, it will then return unknown + status.
+ If the check_snmp_css_main.pl cannot read index, a warning will + be returned but the old index file will remain.

+

A lockfile is created bye check_snmp_css_main.pl + when it writes it's file. The check_snmp_css script will wait until + the lock file is removed to read the index file.
+ The lock file is named : Nagios_CSS_<IP Address>.lock
+
The lock file format is simple: every line is in format +
+ <OID>:<Service name>

+

 

+

Dowload + lastest version of check_snmp_css.pl : 1.0

+

Dowload + lastest version of check_snmp_css_main.pl : 1.0

+ +

Configurations + + examples

+ +

Changelog + : On CVS repository on sourceforge : http://nagios-snmp.cvs.sourceforge.net/nagios-snmp/plugins/.

+ +

Examples :

+ +


+ + All examples below are considering the script is local directory. + + Host to be checked is 127.0.0.1 with snmp community "public".

+ + + + + + + + + + + + + + +
+

Get help +

+

./check_snmp_css.pl -h

+
Verbose output./check_snmp_css.pl -H <IP> + -C <com> -v
snmpv3 login./check_snmp_css.pl -H 127.0.0.1 + -l login -x passwd
+ +

Output of check_snmp_css.pl -h

+ + + + + + + + +
+
+ SNMP Cisco CSS monitor for Nagios version 1.0
+(c)2004-2006 Patrick Proy
+
+Usage: ./check_snmp_css.pl [-v] -H <host> -C <snmp_community> [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>]) 
+       -n <name> [-d directory] [-w <num>,<resp>,<conn> -c <num>,<resp>,<conn>]  [-p <port>] [-f] [-t <timeout>] [-V]
+-v, --verbose
+   print extra debugging information 
+-h, --help
+   print this help message
+-H, --hostname=HOST
+   name or IP address of host to check
+-n, --name=<name> 
+   regexp to select service
+-w, --warning=<num>,<resp>,<conn> 
+   Optional. Warning level for
+   - minimum number of active & alive service 
+   - average response time
+   - number of connexions
+   For no warnings, put -1 (ex : -w5,-1,3).
+   When using negative numbers, dont put space after "-w"
+-d, --dir=<directory to put file> 
+   Directory where the temp file with index, created by check_snmp_css_main.pl, can be found
+   If no directory is set, /tmp will be used
+-c, --critical=<num>,resp>,<conn>
+   Optional. Critical levels (-1 for no critical levels)
+   See warning levels.
+-C, --community=COMMUNITY NAME
+   community name for the host's SNMP agent (implies v1 protocol)
+-2, --v2c
+   Use snmp v2c
+-l, --login=LOGIN ; -x, --passwd=PASSWD
+   Login and auth password for snmpv3 authentication 
+   If no priv password exists, implies AuthNoPriv 
+-X, --privpass=PASSWD
+   Priv password for snmpv3 (AuthPriv protocol)
+-L, --protocols=<authproto>,<privproto>
+   <authproto> : Authentication protocol (md5|sha : default md5)
+   <privproto> : Priv protocole (des|aes : default des) 
+-P, --port=PORT
+   SNMP port (Default 161)
+-f, --perfparse
+   Perfparse compatible output
+-t, --timeout=INTEGER
+   timeout for SNMP in seconds (Default: 5)
+-V, --version
+   prints version number
+
+
+ +
+

Output of check_snmp_css_main.pl -h

+ + + + +
+
+ SNMP Cisco CSS monitor MAIN script for Nagios version 1.0
+GPL Licence, (c)2004-2006 Patrick Proy
+
+Usage: ./check_snmp_css_main.pl [-v] -H <host> -C <snmp_community> [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>]) 
+       [-d directory] [-p <port>] [-t <timeout>] [-V]
+-v, --verbose
+   print extra debugging information 
+-h, --help
+   print this help message
+-H, --hostname=HOST
+   name or IP address of host to check
+-d, --dir=<directory to put file> 
+   Directory where temp file with index is written
+-C, --community=COMMUNITY NAME
+   community name for the host's SNMP agent (implies v1 protocol)
+-2, --v2c
+   Use snmp v2c
+-l, --login=LOGIN ; -x, --passwd=PASSWD
+   Login and auth password for snmpv3 authentication 
+   If no priv password exists, implies AuthNoPriv 
+-X, --privpass=PASSWD
+   Priv password for snmpv3 (AuthPriv protocol)
+-L, --protocols=<authproto>,<privproto>
+   <authproto> : Authentication protocol (md5|sha : default md5)
+   <privproto> : Priv protocole (des|aes : default des) 
+-P, --port=PORT
+   SNMP port (Default 161)
+-t, --timeout=INTEGER
+   timeout for SNMP in seconds (Default: 5)
+-V, --version
+   prints version number
+
+
+
+ +

This project is hosted on :
+ + SourceForge.net Logo + +

+ +

Nagios and the Nagios logo are registered + + trademarks of Ethan Galstad.

+ +
+ +
+ + + + + + + diff --git a/doc/snmp_env.html b/doc/snmp_env.html new file mode 100755 index 0000000..f847bd9 --- /dev/null +++ b/doc/snmp_env.html @@ -0,0 +1,370 @@ + + + + +Nagios plugins + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home

+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Snmp env check
+ +

Script : check_snmp_env.pl

+ +

Last update : April 19 2007

+ +
+ +

Description :

+ +

Checks by snmp v1, v2c or v3 environemental + parameters such as fan, power supply, temperature

+

SNMP Login
+ +

+ +

See snmp info page

+ +

Requirements :

+ +

- Perl in /usr/bin/perl - or just run 'perl + script'
+ - Net::SNMP
+ - file 'utils.pm' in plugin diretory (/usr/local/nagios/libexec)
+

+

Checks

+

The script will make the following checks depending + on host type.
+ Either the threshold is directly set by the hardware manufacturer, + or you must set them with an option.

+

This table shows what the script CAN check, + depending on hardware version the sensors might not be there.
+ The script will return "UNKNOWN" if no sensors can be + found.

+

If no option is specified in this table, it + means the script uses the threshold of the snmp table.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Host typeOptionPower supplyFanVoltageTemperatureDisks
CiscociscoYesYesNo (working on it)No (working on it)No
Nokia IpsonokiaYesYesNo.YesNo
BluecoatbcYesYesYesYesYes
IronPortironYesYes, option '-F' in RPMNoYes, option '-c' in CelciusNo
FoundryFoundryYesNo (bug in snmp agent)NoYesNo
+

Note : Bluecoat provides an "other" + sensor which is tested also. But I never saw a Bluecoat reporting + it.

+

 

+ +

Dowload + lastest version : 1.2

+ +

Configurations + + examples

+ +

Changelog + : On CVS repository on sourceforge : http://nagios-snmp.cvs.sourceforge.net/nagios-snmp/plugins/.

+ +

Examples :

+ +


+ + All examples below are considering the script is local directory. + + Host to be checked is 127.0.0.1 with snmp community "public".

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Get help +

+

./check_snmp_env.pl -h

+
Verbose output./check_snmp_env.pl -H <IP> + -C <com> -v
snmpv3 login./check_snmp_env.pl -H 127.0.0.1 + -l login -x passwd
+

Check Cisco for all sensors +

+

./check_snmp_env.pl -H 127.0.0.1 -C public + -T cisco

+
Check Nokia + for all sensors./check_snmp_env.pl -H 127.0.0.1 + -C public -T nokia
checks ironport + fans RPM > 1500 and temp < 70 deg celcius./check_snmp_env.pl -H 127.0.0.1 + -C public -T iron -F 1500 -c 70
+ +

Output of check_snmp_env.pl -h

+ + + + + + + + + +
+


+ SNMP environmental Monitor for Nagios version 1.2
+ GPL Licence, (c)2006-2007 Patrick Proy +

Usage: ./check_snmp_env.pl [-v] -H <host> -C <snmp_community> + [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>]) + [-p <port>] -T (cisco|nokia|bc|iron|foundry) [-F <rpm>] + [-c <celcius>] [-f] [-t <timeout>] [-V]
+ -v, --verbose
+ print extra debugging information
+ -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 v1 protocol)
+ -2, --v2c
+ Use snmp v2c
+ -l, --login=LOGIN ; -x, --passwd=PASSWD
+ Login and auth password for snmpv3 authentication
+ If no priv password exists, implies AuthNoPriv
+ -X, --privpass=PASSWD
+ Priv password for snmpv3 (AuthPriv protocol)
+ -L, --protocols=<authproto>,<privproto>
+ <authproto> : Authentication protocol (md5|sha : default + md5)
+ <privproto> : Priv protocole (des|aes : default des) +
+ -P, --port=PORT
+ SNMP port (Default 161)
+ -T, --type=cisco|nokia|bc|iron|foundry
+ Environemental check :
+ cisco : voltage,temp,fan,power supply status
+ will try to check everything present
+ nokia : fan and power supply
+ bc : fans, power supply, voltage, disks
+ iron : fans, power supply, temp
+ foundry : power supply, temp
+ -F, --fan=<rpm>
+ Minimum fan rpm value
+ -c, --celcius=<celcius>
+ Maximum temp in degree celcius
+ -f, --perfparse
+ Perfparse compatible output
+ -t, --timeout=INTEGER
+ timeout for SNMP in seconds (Default: 5)
+ -V, --version
+ prints version number
+

+
+ +
+ +

This project is hosted on :
+ + SourceForge.net Logo + +

+ +

Nagios and the Nagios logo are registered + + trademarks of Ethan Galstad.

+ +
+ +
+ + + + + + + diff --git a/doc/snmp_int.html b/doc/snmp_int.html new file mode 100755 index 0000000..aac15fc --- /dev/null +++ b/doc/snmp_int.html @@ -0,0 +1,690 @@ + + + + +Nagios plugins + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home

+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Snmp interface check
+ +

Script : check_snmp_int.pl

+ +

Last update : March 17 2007

+ +
+ +

Description :

+ +

Checks by snmp (v1, v2c or v3) host interface + + state and usage.
+ +
+ + Interfaces can be selected by regexp ( 'eth' will check eth0, eth1, + + eth2, ...).
+ + If multiple interfaces are selected, all must be up to get an OK + + result
+ +
+ +
Vérifie par snmp v1, v2c ou v3 l'état des interfaces + + d'un hôte, leur utilisation (bande passante, erreurs, pertes) + + et sortir des informations de performances.
+ + Ce script permet d'utiliser des expressions régulières + + pour sélectionner les interfaces : ex 'eth' va vérifier + + eth0, eth1, ...
+ + Il permet également de lister toutes les interfaces disponibles + + sur la machine cible (option -v) pour voir leur nom en SNMP.
+ + Pour les francophones, je ferais un manuel en Français + + quand j'aurais le temps... (et toute aide est bienvenue).
+ +

+ + Standard checks
+ +

+ +

The script will check interface operationnal + + status using the MIB-II table. The interface is (are) selected by + + the -n option.
+ + This option will be treated as a regular expression (eth will match + + eth0, eth1, eth2...). You can disable this with the -r option + + : the interface will be selected if it's description exactly matches + + the name given by -n

+ +

The interfaces are selected by their description + + in the MIB-II table.
+ To see how interface looks like by snmp, you can list all of + them with the '-v' switch.
+ +

+ +

The script will return OK if ALL interfaces + + selected are UP, or CRITICAL if at least one interface is down.
+ +
+ + You can make the script return a OK value when all interfaces are + + down (and CRITICAL when at least one is up) with the -i option.

+ +

You can make the same tests on administrative + + status instead with the -a option.

+ +

To make output shorter, specially when you + + have multiple interface, you can put the -s option.
+ + It will get only the first <n> caracters of the interface + + descrition. If the number is negative then get the last <n> + + caracters.

+ +

Ex : EL20005 3Com Gigabit NIC (3C2000 Family)
+ + -s 4 will output : "EL20".
+ + -s -4 will output : "ily)".

+ +

Performance output

+ +

-f option : activate performance output + (default the In/out octet as a counter).
+ -e option : in/out errors and discarded packets. -f must + also be set.
+ -S option : Include speed in performance output in bits/s + as '<interface_name>_speed_bps'
+ -y option : output performance data in % of interface speed
+ -Y
option : output performance data in bits/s or Bytes/s (depending + on -B)

+

Note : -y and -Y options need the usage + check to ba active (-k)

+

Warning : the counters needed by -e + + are not always available on all machines (ex Nokia IP)
+ +

+ +

Usage check (-k) +
+
+
+ A temporary file will be created in "/tmp" by default + : this can be changed at the beginning of the script.
+ The file name will be : tmp_Nagios_int.<host IP>.<Interface + name>. One file will be created by interface.
+
+ The status UNKNOWN is returned when the script doesn't have enough + information (see -d option).
+
+ You will have to tell the warning and critical levels, separated + with "," and you can use decimal (ex : 10.3).
+ For standard checks (no "-q" option) :
+ -w <In warn>,<Out warn> -c <In warn>,<Out + warn>
+
In warn : warning level for incomming traffic
+ Out warn : warning level for outgoing traffic
+ In crit : critical level for incomming traffic
+ Out crit : critical level for outgoing traffic
+

+

The unit for the check depends on the -B, -M + and -G option :

+ + + + + + + + + + + + + + + + + + + + + +
  -B set-B not set
-M & -G not set +
Kbps
+
+
KBps
+
-M set +
Mbps
+
+
MBps
+
-G set +
Gbps
+
+
GBps
+
+

It is possible to put warning and critical + + levels with -b option.
+ + 0 means no warning or critical level checks

+ +

When the extended checks are activated (-q + option), the warning levels are
+ -w <In bytes>,<Out bytes>,<In error>,<Out + error>,<In disc>,<Out disc> -c + <In warn>,<Out warn>, .....
+ In error : warn/crit level in inboud error/minute
+
Out error : warn/crit level in outbound error/minute
+ In disc : warn/crit level in inboud discarded packets/minute
+
Out disc : warn/crit level in outbound discarded packets/minute +
+

+

-k : activates the standard usage feature
+ -q : activates the extended usage
+ -d : delta in seconds (default is 300s)
+ -w : warning levels
+ -c : critical levels
+

+

-d: delta time
+ + You can put the delta time as an option : the "delta" + + is the prefered time between two values that the script will use + + to calculate the average Kbytes/s or error/min. The delta time should + + (not must) be bigger than the check interval.
+ + Here is an example : Check interval of 2 minutes and delta of 4min

+ +

T0 : value 1 : can't calculate usage
+ + T0+2 : value 2 : can't calculate usage
+ + T0+4 : value 3 : usage=(value3-value1)/((T0+4)-T0)
+ + T0+6 : value 4 : usage=(value4-value2)/((T0+6)-T0+2)
+ + (Yes I know TO+4-T0=4, it's just to explain..)
+ + .........

+ +

The script will allow 10% less of the delta + + and 300% more than delta as a correct interval.
+ + For example, with a delta of 5 minutes, the acceptable interval + + will be between 4'30" and 15 minutes.

+ +

Msg size option (-o option)

+

In case you get a "ERROR: running table + : Message size exceeded maxMsgSize" error, you may need to + adjust the maxMsgSize, i.e. the maximum size of snmp message with + the -o option. Try a value with the -o AND the -v option : the script + will output the actual value so you can add some octets to it with + the -o option.

+

--label option

+

This option just put label before the speed + output :
+ Without : eth1:UP (10.3Kbps/4.4Kbps), eth0:UP (10.9Kbps/16.4Kbps):2 + UP: OK
+ With : eth1:UP (in=14.4Kbps/out=6.2Kbps), eth0:UP (in=15.3Kbps/out=22.9Kbps):2 + UP: OK
+

+

SNMP Login
+ +

+ +

See snmp info page

+ +

Requirements :

+ +

- Perl in /usr/bin/perl - or just run 'perl + + script'
+ + - Net::SNMP
+ + - file 'utils.pm' in plugin diretory (/usr/local/nagios/libexec)
+ +

+ +

Dowload + latest version : 1.4.5

+ +

Configuration + + examples

+ +

Examples :

+ +


+ + All examples below are considering the script is local directory. + + Host to be checked is 127.0.0.1 with snmp community "public".

+ +

If multiple interfaces are selected, all must + + be up to get an OK result

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Get help + +

+ +

./check_snmp_int.pl -h

+ +
List all interfaces./check_snmp_int.pl -H 127.0.0.1 + + -C public -n zzzz -v
snmpv3 login./check_snmp_int.pl -H 127.0.0.1 + + -l login -w passwd
+ +

Check eth0 interface is up + +

+ +

./check_snmp_int.pl -H 127.0.0.1 -C public -n eth0 -r

+ +
+ +

Check that all eth interface are up + +

+ +

./check_snmp_int.pl -H 127.0.0.1 -C public -n eth

+ +
+ +

Check that all ppp interface are down + +

+ +

./check_snmp_int.pl -H 127.0.0.1 -C public -n ppp -i

+ +
+ +

Check that all eth interface are administratively up + +

+ +

./check_snmp_int.pl -H 127.0.0.1 -C public -n eth -a

+ +
+ +

Check that FastEternet0/11 to 0/14 are up (Cisco) + +

+ +

./check_snmp_int.pl -H 127.0.0.1 -C public -n "Fast.*0.1[1234]"

+ +
Check the eth0 + + usage
+ + Note : no critical inbound (0)
./check_snmp_int.pl -H 127.0.0.1 + + -C public -n eth0 -k -w 200,400 -c 0,600
+ +

Changelog + : On CVS repository on sourceforge : http://nagios-snmp.cvs.sourceforge.net/nagios-snmp/plugins/.

+ +

Output of check_snmp_int.pl -h

+ + + + + + + + + +
+

SNMP Network Interface Monitor for Nagios + version 1.4.5
+ GPL licence, (c)2004-2007 Patrick Proy +

Usage: ./check_snmp_int.pl [-v] -H <host> -C <snmp_community> + [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>) + [-p <port>] -n <name in desc_oid> [-i] [-a] [-r] + [-f[eSyY]] [-k[qBMGu] -g -w<warn levels> -c<crit + levels> -d<delta>] [-o <octet_length>] [-t + <timeout>] [-s] [-V]
+ -v, --verbose
+ print extra debugging information (including interface list + on the system)
+ -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 v1 protocol)
+ -l, --login=LOGIN ; -x, --passwd=PASSWD, -2, --v2c
+ Login and auth password for snmpv3 authentication
+ If no priv password exists, implies AuthNoPriv
+ -2 : use snmp v2c
+ -X, --privpass=PASSWD
+ Priv password for snmpv3 (AuthPriv protocol)
+ -L, --protocols=<authproto>,<privproto>
+ <authproto> : Authentication protocol (md5|sha : default + md5)
+ <privproto> : Priv protocole (des|aes : default des) +
+ -P, --port=PORT
+ SNMP port (Default 161)
+ -n, --name=NAME
+ Name in description OID (eth0, ppp0 ...).
+ This is treated as a regexp : -n eth will match eth0,eth1,...
+ Test it before, because there are known bugs (ex : trailling + /)
+ -r, --noregexp
+ Do not use regexp to match NAME in description OID
+ -i, --inverse
+ Make critical when up
+ -a, --admin
+ Use administrative status instead of operational
+ -o, --octetlength=INTEGER
+ max-size of the SNMP message, usefull in case of Too Long + responses.
+ Be carefull with network filters. Range 484 - 65535, default + are
+ usually 1472,1452,1460 or 1440.
+ -f, --perfparse
+ Perfparse compatible output (no output when interface is down).
+ -e, --error
+ Add error & discard to Perfparse output
+ -S, --intspeed
+ Include speed in performance output in bits/s
+ -y, --perfprct ; -Y, --perfspeed
+ -y : output performance data in % of max speed
+ -Y : output performance data in bits/s or Bytes/s (depending + on -B)
+ -k, --perfcheck ; -q, --extperfcheck
+ -k check the input/ouput bandwidth of the interface
+ -q also check the error and discard input/output
+ -g, --64bits
+ Use 64 bits counters instead of the standard counters
+ when checking bandwidth & performance data.
+ -d, --delta=seconds
+ make an average of <delta> seconds (default 300=5min)
+ -B, --kbits
+ Make the warning and critical levels in K|M|G Bits/s instead + of K|M|G Bytes/s
+ -G, --giga ; -M, --mega ; -u, --prct
+ -G : Make the warning and critical levels in Gbps (with -B) + or GBps
+ -M : Make the warning and critical levels in Mbps (with -B) + or MBps
+ -u : Make the warning and critical levels in % of reported + interface speed.
+ -w, --warning=input,output[,error in,error out,discard in,discard + out]
+ warning level for input / output bandwidth (0 for no warning)
+ unit depends on B,M,G,u options
+ warning for error & discard input / output in error/min + (need -q)
+ -c, --critical=input,output[,error in,error out,discard in,discard + out]
+ critical level for input / output bandwidth (0 for no critical)
+ unit depends on B,M,G,u options
+ critical for error & discard input / output in error/min + (need -q)
+ -s, --short=int
+ Make the output shorter : only the first <n> chars of + the interface(s)
+ If the number is negative, then get the <n> LAST caracters.
+ -t, --timeout=INTEGER
+ timeout for SNMP in seconds (Default: 5)
+ -V, --version
+ prints version number
+ Note : when multiple interface are selected with regexp,
+ all be must be up (or down with -i) to get an OK result.

+
+ +
+ +

This project is hosted on :
+ + SourceForge.net Logo + +

+ +

Nagios and the Nagios logo are registered + + trademarks of Ethan Galstad.

+ +
+ +
+ +

 

+ + + + + + + diff --git a/doc/snmp_load.html b/doc/snmp_load.html new file mode 100755 index 0000000..0c48eb8 --- /dev/null +++ b/doc/snmp_load.html @@ -0,0 +1,409 @@ + + + + +Nagios plugins + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home

+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Snmp load check
+ +

Script : check_snmp_load.pl

+ +

Last update : Sept 5 2006

+ +
+ +

Description :

+ +

Checks by snmp v1, v2c or v3 cpu or average + + load.
+ + Works on Windows, Linux/Unix, AS400, Cisco, Cisco catalyst, HP Procurve, LinkProof, + + Blucoat, Nokia, Fortinet, Netscreen.

+ +

Check types are selected by the -T option : + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
-T value
+
+
System
+
+
-w & -c values
+
netslLinux : load provided by Net SNMP3 values : load average on 1 min, 5 min, + 15 min (absolute)
netscLinux : CPU usage given by net-snmp1 value in %
as400as400 CPU usage1 value in %
ciscocisco CPU usage3 values : CPU average on 5sec, 1 min + & 5 min (%)
catacisco catalyst CPU usage3 values : CPU average on 5sec, 1 min + & 5 min (%)
nscNetscreen CPU usage3 values : CPU average on 5sec, 1 min + & 5 min (%)
fgFortigate CPU usage1 value in %
bcbluecoat CPU usage1 value in %
nokianokia CPU usage1 value in %
hpHP procurve switch CPU usage1 value in %
lpLinkproof CPU usage1 value in %
hpuxHP-UX load3 values : load average on 1 min, 5 min, + 15 min
+ +

Vérifie par snmp v1,v2c ou v3 la charge + + ou l'ocupation CPU.

+ +

SNMP Login
+ +

+ +

See snmp info page

+ +

Requirements :

+ +

- Perl in /usr/bin/perl - or just run 'perl + + script'
+ + - Net::SNMP
+ + - file 'utils.pm' in plugin diretory
+ +

+ +

Dowload + lastest version : 1.3.1

+ +

Configurations + + examples

+ +

Changelog + : On CVS repository on sourceforge : http://nagios-snmp.cvs.sourceforge.net/nagios-snmp/plugins/.

+

Examples :

+ +


+ + All examples below are considering the script is local directory. + + Host to be checked is 127.0.0.1 with snmp community "public".

+ +

If multiple interfaces are selected, all must + + be up to get an OK result

+ + + + + + + + + + + + + + + + + + +
+

Get help +

+

./check_snmp_load.pl -h

+
+

Check loads on linux with Net-SNMP : checks the 1, 5 and + 15 minutes load average. +

+

./check_snmp_load.pl -H 127.0.0.1 -C public -w 3,3,2 -c + 4,4,3 -T netsl

+
+

Check cpu load (generic) : checks the %used CPU for the last + minute +

+

./check_snmp_load.pl -H 127.0.0.1 -C public -w 98% -c + 99%

+
+

Check cpu load on AS/400 +

+

./check_snmp_load.pl -H 127.0.0.1 -C public -w 98% -c + 99% -T as400

+
+ +

Output of check_snmp_load.pl -h

+ + + + + + + + + +
+SNMP Load & CPU Monitor for Nagios version 1.3
+ (c)2004-2006 Patrick Proy +

Usage: ./check_snmp_load.pl [-v] -H <host> -C <snmp_community> + [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>]) + [-p <port>] -w <warn level> -c <crit level> + -T=[stand|netsl|netsc|as400|cisco|cata|nsc|fg|bc|nokia|hp|lp] + [-f] [-t <timeout>] [-V]
+ -v, --verbose
+ print extra debugging information
+ -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 v1 protocol)
+ -2, --v2c
+ Use snmp v2c
+ -l, --login=LOGIN ; -x, --passwd=PASSWD
+ Login and auth password for snmpv3 authentication
+ If no priv password exists, implies AuthNoPriv
+ -X, --privpass=PASSWD
+ Priv password for snmpv3 (AuthPriv protocol)
+ -L, --protocols=<authproto>,<privproto>
+ <authproto> : Authentication protocol (md5|sha : default + md5)
+ <privproto> : Priv protocole (des|aes : default des) +
+ -P, --port=PORT
+ SNMP port (Default 161)
+ -w, --warn=INTEGER | INT,INT,INT
+ 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)
+ 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 : linux load provided by Net SNMP
+ 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
+ -f, --perfparse
+ Perfparse compatible output
+ -t, --timeout=INTEGER
+ timeout for SNMP in seconds (Default: 5)
+ -V, --version
+ prints version number

+
+ +
+ +

This project is hosted on :
+ + SourceForge.net Logo + +

+ +

Nagios and the Nagios logo are registered + + trademarks of Ethan Galstad.

+ +
+ +
+ +

 

+ + + + + + + diff --git a/doc/snmp_mem.html b/doc/snmp_mem.html new file mode 100755 index 0000000..1a51886 --- /dev/null +++ b/doc/snmp_mem.html @@ -0,0 +1,485 @@ + + + + +Nagios plugins + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home

+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Snmp memory check
+ +

Script : check_snmp_mem.pl

+ +

Last update : Sept 4 2006

+ +
+ +

Description :

+ +

Checks by snmp v1, v2c or v3 :

+ +

- Memory and swap usage on Linux given by Net-snmp. + +
+ + It checks memory and swap usage independantly : one warning and + + critical level for each of them.
+ +

+ +

- Memory usage on cisco routers or Pix : the + + plugin will add all of the memory pool and then checks the warning + + and critical levels.
+ + On cisco routeurs, it will add 'IO' and 'Processor' memory
+ + On Pix, it will check the memory used (one memory pool only on Pix).
+ +

+ +

- Memory usage on HP Procurve switch.
+ + Memory segments will be added then the free memory will be checked.
+ +

+ +

Vérification de :
+ + - l'utilisation mémoire et swap sur Linux/Net-snmp
+ + - l'utilisation mémoire sur Cisco (routeurs et Pix).
+ + Pour d'autres SE (Windows, AS400), lire la suite.

+ +

Checking memory for other os :

+ +

AS/400 : use the check_snmp_storage + + command to check the RAM

+ +

./check_snmp_storage.pl -H <IP> + + -C <community> -m RAM -s -w <warn%> -c + + <crit%>

+ +

Windows : use the check_snmp_storage + + command to check the virtual memory (RAM+Swap)

+ +

./check_snmp_storage.pl -H <IP> + + -C <community> -m "^Virtual Memory$" -w <warn%> + + -c <crit%>

+ +

SNMP Login
+ +

+ +

See snmp info page

+ +

Requirements :

+ +

- Perl in /usr/bin/perl - or just run 'perl + + script'
+ + - Net::SNMP
+ + - file 'utils.pm' in plugin diretory (/usr/local/nagios/libexec)
+ +

+ +

Dowload + + lastest version : 1.1

+ +

Configurations + + examples

+ +

Changelog + : On CVS repository on sourceforge : http://nagios-snmp.cvs.sourceforge.net/nagios-snmp/plugins/.

+ +

Examples :

+ +


+ + All examples below are considering the script is local directory. + + Host to be checked is 127.0.0.1 with snmp community "public".

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Get help + +

+ +

./check_snmp_mem.pl -h

+ +
Verbose output./check_snmp_mem.pl -H <IP> + + -C <com> -w 80 -c 81 -v
snmpv3 login./check_snmp_mem.pl -H 127.0.0.1 + + -l login -x passwd
+ +

  + +

+ +

Unix/Linux

+ +
+ +

%used of
+ + - RAM < 99% and 100%
+ + - Swap : < 20% and 30% + +

+ +

./check_snmp_mem.pl -H <IP> -C <com> -w 99,20 + + -c 100,30

+ +
+ +

Same with no warning levels for memory + +

+ +

./check_snmp_mem.pl -H <IP> -C <com> -w 0,20 + + -c 100,30

+ +
+ +

Check memory on Cisco + +

+ +

./check_snmp_mem.pl -H <IP> -C <com> -I -w + + 90% -c 98%

+ +
+ +

Output of check_snmp_mem.pl -h <

+ + + + + + + + + +
+ +

+ +

+
+SNMP Memory Monitor for Nagios version 1.1
+
+(c)2004-2006 - Patrick Proy
+
+
+
+Usage: ./check_snmp_mem.pl [-v] -H <host> -C <snmp_community> [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>])  [-p <port>] -w <warn level> -c <crit level> [-I|-N|-E] [-f] [-m] [-t <timeout>] [-V]
+
+-v, --verbose
+
+   print extra debugging information (including interface list on the system)
+
+-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 or v2c with option)
+
+-2, --v2c
+
+   Use snmp v2c
+
+-l, --login=LOGIN ; -x, --passwd=PASSWD
+
+   Login and auth password for snmpv3 authentication 
+
+   If no priv password exists, implies AuthNoPriv 
+
+-X, --privpass=PASSWD
+
+   Priv password for snmpv3 (AuthPriv protocol)
+
+-L, --protocols=<authproto>,<privproto>
+
+   <authproto> : Authentication protocol (md5|sha : default md5)
+
+   <privproto> : 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 
+
+     -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 
+
+     -I switch : critical level
+
+-N, --netsnmp (default)
+
+   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
+
+   check HP proccurve memory
+
+-f, --perfdata
+
+   Performance data output
+
+-t, --timeout=INTEGER
+
+   timeout for SNMP in seconds (Default: 5)
+
+-V, --version
+
+   prints version number
+
+
+ +
+ +
+ +

This project is hosted on :
+ + SourceForge.net Logo + +

+ +

Nagios and the Nagios logo are registered + + trademarks of Ethan Galstad.

+ +
+ +
+ + + + + + + diff --git a/doc/snmp_process.html b/doc/snmp_process.html new file mode 100755 index 0000000..50c3735 --- /dev/null +++ b/doc/snmp_process.html @@ -0,0 +1,354 @@ + + +Nagios plugins + + + + + + + + + +
+ + + + + + + + + + + + + + +
Home

+
+ +
+ + + + + + + + + + + + + +
Snmp process check
+

Script : check_snmp_process.pl

+

Last update : March 12 2007

+
+

Description :

+

Checks by snmp v1 or v3 if a process is running + and how many instances are running (minimum & maximum).
+ It is also possible to check memory and cpu used by one or a group + of process
+
+ Works on Windows, Linux/Unix, AS400.

+

Vérifie par snmp v1 ou v3 si un process tourne + et combien d'instances de ce process tournent (minimum et maximum).
+ Il est également possible de vérifier la mémoire + et le cpu utilisé.
+
+ Standard checks
+

+

The plugin checks if there is at least one + process matching the filter (-n option) when no warning or + critical levels are set.
+ The filter is treated as a regular expression by default, but you + can deactivate this (-r)

+

You can use -w and -c options to set the warning + and critical levels :
+ -w <minW>,<maxW> : with minW and maxW the minimum + and maximum number of processes.
+
+ -c <minC>,<maxC> : same thing
+ Of course : minC <= minW < maxW <=maxC
+
+ You can omit <maxW> and <maxC>

+
+ Saying N is the current number of processes
+ - N < minC : critical
+ - minC < N <=minW : warning
+ - minW< N <= maxW : OK
+ - maxW< N <= maxC : warning
+ - maxC < N : critical
+

+

Memory checks

+

The -m option can check the memory used + by the selected processes.
+ By default, this will select the process wich use the maximum memory. + The -a switch will make an average
+
+ Ex : -m 7,20 will send a warning if a process uses more than + 7 Mb, and critical for more than 20Mb.

+

CPU checks

+

When you use the -u option, a temporary + file will be created in "/tmp" by default : this can be + changed at the beginning of the script.
+ The file name will be : tmp_Nagios_proc.<host IP>.<process + filter>.

+

The -u option will add all the cpu used by + all selected process and the make the check
+

+

-u 91,95 : will send a warning if more + than 91% of cpu is used, and critical if more than 95% is used.

+

On multiprocessor hosts, the % of cpu use can + be > 100% : on a 4 CPU host, cpu usage can go up to 400% (the + script doesn't check if a host is multiprocessor or not).

+

The script curently wants a minimum of 5 minutes + between values taken from host (can be changed at the beginning + of the scripts). You can check more than once every 5 minutes but + don't put check-interval to more than 15 minutes.
+ When the script doesn't have enough data to compute the CPU use + (for example, the first time it is run), then it will return a UNKNOWN + status.

+

Msg size option (-o option)

+

In case you get a "ERROR: running table + : Message size exceeded maxMsgSize" error, you may need to + adjust the maxMsgSize, i.e. the maximum size of snmp message with + the -o option. Try a value with the -o AND the -v option : the script + will output the actual value so you can add some octets to it with + the -o option.

+

SNMP Login
+

+

See snmp info page

+

Requirements :

+

- Perl in /usr/bin/perl - or just run 'perl + script'
+ - Net::SNMP
+ - file 'utils.pm' in plugin diretory
+

+

Dowload + latest version : 1.4

+

Configurations + examples

+

Changelog + : On CVS repository on sourceforge : http://nagios-snmp.cvs.sourceforge.net/nagios-snmp/plugins/.

+

Examples :

+


+ All examples below are considering the script is local directory. + Host to be checked is 127.0.0.1 with snmp community "public".

+

If multiple interfaces are selected, all must + be up to get an OK result

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Get help +

+

./check_snmp_process.pl -h

+
snmpv3 login./check_snmp_process.pl -H + 127.0.0.1 -l login -x passwd
+

Check if at least one process matching http is running +

+

./check_snmp_process.pl -H 127.0.0.1 -C public -n http

+
+

Result example : +

+

3 process matching http : > 0 : OK

+
+

Check if at least 3 process matching http are running +

+

./check_snmp_process.pl -H 127.0.0.1 -C public -n http + -w 2 -c 0

+
+
Result example :
+ (<=2 will return warning, 0 critical)
+
3 process matching httpd : + > 2 : OK
Check if at + least one process named "httpd" exists (no regexp)./check_snmp_process.pl -H + 127.0.0.1 -C public -n http -r
+

Result example :

+
3 process named httpd + : > 0 : OK
Check process + by their full path : check process of /opt/soft/bin/ (at least + one) ./check_snmp_process.pl -H + 127.0.0.1 -C public -n /opt/soft/bin/ -f
Check that at + least 3 process but not more than 8 are running./check_snmp_process.pl -H + 127.0.0.1 -C public -n http -w 3,8 -c 0,15
Same checks + + checks maximum memory used by process (in Mb) : warning and + critical levels./check_snmp_process.pl -H + 127.0.0.1 -C public -n http -w 3,8 -c 0,15 -m 9,25
Same check but + sum all CPU used by all selected process./check_snmp_process.pl -H + 127.0.0.1 -C public -n http -w 3,8 -c 0,15 -m 9,25 -u 70,99
+

Output of check_snmp_process.pl -h

+ + + + +
+

SNMP Process Monitor for Nagios version 1.4
+ GPL licence, (c)2004-2006 Patrick Proy

+

Usage: ./check_snmp_process.pl [-v] -H <host> -C <snmp_community> + [-2] | (-l login -x passwd) [-p <port>] -n <name> + [-w <min_proc>[,<max_proc>] -c <min_proc>[,max_proc] + ] [-m<warn Mb>,<crit Mb> -a -u<warn %>,<crit%> + ] [-t <timeout>] [-o <octet_length>] [-f ] [-r] + [-V] [-g]
+ -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 + or v2c with option)
+ -l, --login=LOGIN ; -x, --passwd=PASSWD, -2, --v2c
+ Login and auth password for snmpv3 authentication
+ If no priv password exists, implies AuthNoPriv
+ -2 : use snmp v2c
+ -X, --privpass=PASSWD
+ Priv password for snmpv3 (AuthPriv protocol)
+ -L, --protocols=<authproto>,<privproto>
+ <authproto> : Authentication protocol (md5|sha : default + md5)
+ <privproto> : Priv protocole (des|aes : default des) +
+ -p, --port=PORT
+ SNMP port (Default 161)
+ -n, --name=NAME
+ Name of the process (regexp)
+ No trailing slash !
+ -r, --noregexp
+ Do not use regexp to match NAME in description OID
+ -f, --fullpath
+ Use full path name instead of process name
+ (Windows doesn't provide full path name)
+ -w, --warn=MIN[,MAX]
+ Number of process that will cause a warning
+ -1 for no warning, MAX must be >0. Ex : -w-1,50
+ -c, --critical=MIN[,MAX]
+ number of process that will cause an error (
+ -1 for no critical, MAX must be >0. Ex : -c-1,50
+ Notes on warning and critical :
+ with the following options : -w m1,x1 -c m2,x2
+ you must have : m2 <= m1 < x1 <= x2
+ you can omit x1 or x2 or both
+ -m, --memory=WARN,CRIT
+ checks memory usage (default max of all process)
+ values are warning and critical values in Mb
+ -a, --average
+ makes an average of memory used by process instead of max
+ -u, --cpu=WARN,CRIT
+ checks cpu usage of all process
+ values are warning and critical values in % of CPU usage
+ if more than one CPU, value can be > 100% : 100%=1 CPU
+ -g, --getall
+ In some cases, it is necessary to get all data at once because
+ process die very frequently.
+ This option eats bandwidth an cpu (for remote host) at breakfast.
+ -o, --octetlength=INTEGER
+ max-size of the SNMP message, usefull in case of Too Long + responses.
+ Be carefull with network filters. Range 484 - 65535, default + are
+ usually 1472,1452,1460 or 1440.
+ -t, --timeout=INTEGER
+ timeout for SNMP in seconds (Default: 5)
+ -V, --version
+ prints version number
+ Note :
+ CPU usage is in % of one cpu, so maximum can be 100% * number + of CPU
+ example :
+ Browse process list : <script> -C <community> + -H <host> -n <anything> -v
+ the -n option allows regexp in perl format :
+ All process of /opt/soft/bin : -n /opt/soft/bin/ -f
+ All 'named' process : -n named
+

+
+
+

This project is hosted on :
+ SourceForge.net Logo +

+

Nagios and the Nagios logo are registered + trademarks of Ethan Galstad.

+
+
+

 

+ + + + + + + + + diff --git a/doc/snmp_storage.html b/doc/snmp_storage.html new file mode 100755 index 0000000..98bc5e1 --- /dev/null +++ b/doc/snmp_storage.html @@ -0,0 +1,1343 @@ + + + + + + + + +Nagios plugins + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home

+ + + +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Snmp storage check
+ + + +

Script : check_snmp_storage.pl

+ + + +

Last update : March 12 2007

+ + + +
+ + + +

Description :

+ + + +

This scripts checks by snmp (V1 and v3) disks, + + memory, swap, everthing in hrStorage table.
+ + Storages selection can be done :
+ + - by perl regexp on description or index (-m)
+ + - and (optional) by storage type (-q) : Other, Ram, VirtualMemory, + + FixedDisk, RemovableDisk, FloppyDisk, CompactDisk, RamDisk, FlashMemory, + + NetworkDisk
+ +
+ + One or multiple storages can be selected.
+ + It is also possible to sum all selected storages (-s)
+ +
+ + Warning and critical levels can be checked based on :
+ + - Percent of disk used
+ + - Percent of disk left
+ + - MB left
+ + - MB used

+ +

Output options (-S):

+ +

-S can have 3 options : <type>[,<where>,<cut>]
+ + <type> : Make the output shorter :
+ + 0 : only print the global result except the disk in warning or critical
+ + 1 : Don't print all info for every disk
+ + <where> : (optional) if = 1, put the OK/WARN/CRIT at + + the beginning
+ + <cut> : take the <n> first caracters or <n> + + last if n<0

+ +

With the following disks : /home : 51% used + + and / : 90% used

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Option usedWarningOutput
 99%/home: 51%used(1012MB/1969MB) + + /: 90%used(5781MB/6390MB) (<99%) : OK
 90%/home: 51%used(1012MB/1969MB) + + /: 90%used(5781MB/6390MB) (>90%) : WARNING
-S090%All selected storages (<99%) + + : OK
-S099%/: 90%used(5781MB/6390MB) + + (>90%) : WARNING
-S190%/home: 51% /: 90% (<99%) + + : OK
-S199%/home: 51% /: 90%used(5781MB/6390MB) + + (>90%) : WARNING
-S0,190%OK : (<99%) All + + selected storages
-S0,190%WARNING : (>90%) + + /: 90%used(5781MB/6390MB)
-S1,,299%/h: 51% /: 90% (<99%) + + : OK
-S1,,-299%me: 51% /: 90% (<99%) + + : OK
-S0,1,-230%WARNING : (>30%) me: 51%used(1012MB/1969MB) + + /: 90%used(5781MB/6390MB)
+ +

Performance output (-f + option)

+

The performance will remove any weird caracters + ( `~!$%^&*'"<>|?,(= ) ) from the drive name.

+

Msg size option (-o option)

+

In case you get a "ERROR: running table + : Message size exceeded maxMsgSize" error, you may need to + adjust the maxMsgSize, i.e. the maximum size of snmp message with + the -o option. Try a value with the -o AND the -v option : the script + will output the actual value so you can add some octets to it with + the -o option.

+

SNMP Login
+

+

See snmp info page

+ +

---
+ Vérifie par snmp v1 ou v3 l'occupation des disques, mais aussi de + la swap, de la mémoire, etc.. tout ce qui est disponible en snmp + par la table hrStorage.
+ + Les disques sont sélectionnables par expression régulière + + compatible Perl
+ +

+ +

Requirements :

+ + + +

- Perl in /usr/bin/perl - or just run 'perl + + + + script'
+ + + + - Net::SNMP
+ + + + - file 'utils.pm' in plugin diretory (/usr/local/nagios/libexec)
+ + + +

+ + + +

Dowload + lastest version : 1.3.2

+ + + +

Configurations + + + + examples

+ + + +

Changelog + : On CVS repository on sourceforge : http://nagios-snmp.cvs.sourceforge.net/nagios-snmp/plugins/.
+

+ + + +

Examples :

+ + + +


+ + + + All examples below are considering the script is local directory. + + + + Host to be checked is 127.0.0.1 with snmp community "public".

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +

Get help + + + +

+ + + +

./check_snmp_storage.pl -h

+ + + +
List all storage./check_snmp_storage.pl -H + + + + 127.0.0.1 -C public -m zzzz -w 80 -c 81 -v
snmpv3 login./check_snmp_storage.pl -H + + + + 127.0.0.1 -l login -x passwd
+ + + +

  + + + +

+ + + +

Unix/Linux

+ + + +
+ + + +

%used of /home is less than 80% and 90% + + + +

+ + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m /home + + + + -w 80% -c 90%

+ + + +
+ + + +

%free of /home is above 10% and 5% + + + +

+ + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m /home -w + + + + 10% -c 5% -T pl

+ + + +
+ + + +

Mb used of /home is less than 800 Mb and 900 Mb + + + +

+ + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m /home + + + + -w 800 -c 900 -T bu

+ + + +
+ + + +

Mb free of /home is above 100Mb and 30Mb + + + +

+ + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m /home + + + + -w 100 -c 30 -T bl

+ + + +
+ + + +

All mountpoints have %used less than 80% and 90% + + + +

+ + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m / -w + + + + 80% -c 90%

+ + + +
%used of / + + + + mountpoint only is less than 80% and 90% + + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m / -r + + + + -w 80% -c 90%

+ + + +
%used of mountpoint + + + + index 1 only is less than 80% and 90% + + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m 1 -p + + + + -w 80% -c 90%

+ + + +
Swap %used + + + + is less than 80% and 90% + + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m Swap + + + + -w 80% -c 90%

+ + + +
Memory %used + + + + is less than 80% and 90% + + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m "Real + + + + Memory" -w 80% -c 90%

+ + + +
  + + + +

Windows

+ + + +
%used of C + + + + is less than 80% and 90% + + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m ^C: + + + + -w 80% -c 90%

+ + + +
%used of C, + + + + D and E is less than 80% and 90% + + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m ^[CDE]: + + + + -w 80% -c 90%

+ + + +
%used of C+D+E + + + + is less than 80% and 90% + + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m ^[CDE]: + + + + -s -w 80% -c 90%

+ + + +
  + + + +

AS/400 specific

+ + + +
Sum of all + + + + memory storages is less than 90% and 95% + + + +

./check_snmp_storage.pl -H 127.0.0.1 -C public -m RAM + + + + -s -w 80% -c 90%

+ + + +
+ + + +

Output of check_snmp_storage.pl -h

+ + + + + + + + + + + + + + + + + +
+

SNMP Disk Monitor for Nagios version + 1.3.2
+ (c)2004-2006 Patrick Proy +

Usage: check_snmp_storage [-v] -H <host> -C <snmp_community> + [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>]) + [-p <port>] -m <name in desc_oid> [-q storagetype] + -w <warn_level> -c <crit_level> [-t <timeout>] + [-T pl|pu|bl|bu ] [-r] [-s] [-i] [-e] [-S 0|1[,1,<car>]] + [-o <octet_length>]
+ By default, plugin will monitor %used on drives :
+ warn if %used > 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 ; -x, --passwd=PASSWD
+ Login and auth password for snmpv3 authentication
+ If no priv password exists, implies AuthNoPriv
+ -X, --privpass=PASSWD
+ Priv password for snmpv3 (AuthPriv protocol)
+ -L, --protocols=<authproto>,<privproto>
+ <authproto> : Authentication protocol (md5|sha : default + md5)
+ <privproto> : Priv protocole (des|aes : default des) +
+ -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=<type>[,<where>,<cut>]
+ <type>: 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"
+ <where>: (optional) if = 1, put the OK/WARN/CRIT at + the beginning
+ <cut>: take the <n> first caracters or <n> + last if n<0
+ -o, --octetlength=INTEGER
+ max-size of the SNMP message, usefull in case of Too Long + responses.
+ Be carefull with network filters. Range 484 - 65535, default + are
+ usually 1472,1452,1460 or 1440.
+ -t, --timeout=INTEGER
+ timeout for SNMP in seconds (Default: 5)
+ -V, --version
+ prints version number
+ 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 : <script> -C <community> + -H <host> -m <anything> -w 1 -c 2 -v
+ the -m option allows regexp in perl format :
+ Test drive C,F,G,H,I on Windows : -m ^[CFGHI]:
+ Test all mounts containing /var : -m /var
+ Test all mounts under /var : -m ^/var
+ Test only /var : -m /var -r
+ Test all swap spaces : -m ^Swap
+ Test all but swap spaces : -m ^Swap -e
+

+
+ + + +
+ + + +

This project is hosted on :
+ + + + SourceForge.net Logo + + + +

+ + + +

Nagios and the Nagios logo are registered + + + + trademarks of Ethan Galstad.

+ + + +
+ + + +
+ + + +

 

+ + + + + + + + + + + + + + + diff --git a/doc/snmp_vrrp.html b/doc/snmp_vrrp.html new file mode 100755 index 0000000..66e37be --- /dev/null +++ b/doc/snmp_vrrp.html @@ -0,0 +1,358 @@ + + + + +Nagios plugins + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home

+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Snmp vrrp check
+ +

Script : check_snmp_vrrp.pl

+ +

Last update : Sept 4 2006

+ +
+ +

Description :

+ +

Checks by snmp v1, v2c or v3 the vrrp status + of all vrrp enabled interfaces.
+ Works on
+ - Nokia IP with ipso 3.X , 4.X in VRRP mode.
+ - Nokia IP with ipso 3.X , 4.X in clustering mode.
+ - Radware Linkproof
+ - Alteon AD4 Loadbalancers

+

Depending on the state you put as option ("master" + or "backup") the script will get all the vrrp enables + interface and check they are in this state.
+ If not, it will retrun a critical status
+ By default, it will check Nokia IP platforms using vrrp, you can + test other platforms with the '-T' option :
+
+ - Alteon
+ - Linkproof (VRRP)
+ - Nokia clustering.

+

Nokia clustering check

+

Nokia clustering check does not have a master + & backup state. Instead, the plugin will check :

+

- The number of cluster member
+ - The % load on each cluster.

+

For example -s 2,90 will issue
+ - A critical level if there is not 2 members.
+ - A warning level if more than 90% is assigned to one cluster member.

+

To have a long output, put the '-g' option.

+ +

SNMP Login
+

+

See snmp info page

+

French : + Vérifie par snmp v1 ou v3 l'état des interfaces vrrp : Nokia, + Linkproof, Altéon ou l'état d'un cluster Nokia.

+ +

Requirements :

+ +

- Perl in /usr/bin/perl - or just run 'perl + + script'
+ + - Net::SNMP
+ + - file 'utils.pm' in plugin diretory
+ +

+ +

Dowload + lastest version : 1.3

+ +

Configurations + + examples

+ +

Examples :

+ +


+ + All examples below are considering the script is local directory. + + Host to be checked is 127.0.0.1 with snmp community "public".

+ +

If multiple interfaces are selected, all must + + be up to get an OK result

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Get help +

+

./check_snmp_vrrp.pl -h

+
snmpv3 login./check_snmp_vrrp.pl -H 127.0.0.1 + -l login -x passwd
+

Check vrrp state of a node to be master. +

+

./check_snmp_vrrp.pl -H 127.0.0.1 -C public -s master

+
+
+

Output example :
+ The ouput is : <vrid>(<state>,<status>,<priority>) +

+
+
Vrid : 10(master/up/100), + 1(master/up/100), 3(master/up/100), 2(master/up/100), : All + master :OK
Check vrrp state + of a node to be backup. ./check_snmp_vrrp.pl -H 127.0.0.1 + -C public -s backup
+

Output example : +

+

Vrid : 1(backup/up/95), 3(backup/up/95), 10(backup/up/95), + 2(backup/up/95), : All backup :OK

+
Test a Linkproof./check_snmp_vrrp.pl -H 127.0.0.1 + -C public -s master -T lp
Test a Nokia + cluster : 2 cluster members and max 90% load assigned to one + cluster. ./check_snmp_vrrp.pl -H 127.0.0.1 + -C public -s 2,90%-T ipso
+ +

Changelog + : On CVS repository on sourceforge : http://nagios-snmp.cvs.sourceforge.net/nagios-snmp/plugins/.

+ +

Output of check_snmp_vrrp.pl -h

+ + + + + + + + + +
+

SNMP VRRP Monitor for Nagios version + 1.3
+ (c)2004-2006 to my cat Ratoune - Author : Patrick Proy +

Usage: ./check_snmp_vrrp.pl [-v] -H <host> -C <snmp_community> + [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>]) + -s <master|backup|num,%> [-T <nokia|alteon|lp|nsc|ipsocluster>] + [-p <port>] [-t <timeout>] [-V]
+ -v, --verbose
+ print extra debugging information (including interface list + on the system)
+ -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 v1 protocol)
+ -2, --v2c
+ Use snmp v2c
+ -l, --login=LOGIN ; -x, --passwd=PASSWD
+ Login and auth password for snmpv3 authentication
+ If no priv password exists, implies AuthNoPriv
+ -X, --privpass=PASSWD
+ Priv password for snmpv3 (AuthPriv protocol)
+ -L, --protocols=<authproto>,<privproto>
+ <authproto> : Authentication protocol (md5|sha : default + md5)
+ <privproto> : Priv protocole (des|aes : default des) +
+ -P, --port=PORT
+ SNMP port (Default 161)
+ -T, --type=<nokia|alteon|lp|nsc|ipso>
+ Type of vrrp router to check
+ nokia (default) : Nokai vrrp. Should be working for most vrrp + routers
+ alteon : for Alteon AD4 Loadbalancers
+ lp : Radware Linkproof
+ nsc : Nescreen (ScreenOS 5.x NSRP)
+ ipso : Nokia IPSO clustering
+ -s, --state=master|backup|num,%
+ Nokia ipso clustering : number of members, max % assigned + to nodes.
+ Other : check vrrp interface to be master or backup
+ -g, --long
+ Make output long even is all is OK
+ -t, --timeout=INTEGER
+ timeout for SNMP in seconds (Default: 5)
+ -V, --version
+ prints version number

+
+ +
+ +

This project is hosted on :
+ + SourceForge.net Logo + +

+ +

Nagios and the Nagios logo are registered + + trademarks of Ethan Galstad.

+ +
+ +
+ +

 

+ + + + + + + + + + + diff --git a/doc/snmp_windows.html b/doc/snmp_windows.html new file mode 100755 index 0000000..4a8f513 --- /dev/null +++ b/doc/snmp_windows.html @@ -0,0 +1,261 @@ + + +Nagios plugins + + + + + + + + + +
+ + + + + + + + + + + + + + +
Home

+
+ +
+ + + + + + + + + + + + + +
Snmp windows check
+

Script : check_snmp_win.pl

+

Last update : Jan 11 2007

+
+

Description :

+

Checks by snmp v1 or v3 windows specific health + monitoring (service state for now).
+
+ Works on Windows server (2000, 2003) maybe XP and NT.

+

Vérifie par snmp v1 ou v3 si un(des) service + Windows tournent.
+
+ Service checks
+

+

The plugin checks if there if the Windows service(s) + he gets as input are running.
+ You can provide multiple services, comma separated :
+ -n <service1>,<service2>

+

The script will return :
+ OK : if <service1> is found (and active) and <service2> + is found (and active).
+ WARNING : if <service1> and <service2> match more + than 2 active services.
+ CRITICAL : if <service1> OR <service2> don't match any + active service.

+

-N <number> : will return OK if + <number> of active services matches the filter

+

-s : will show all active services instead + of the non active ones only

+

Requirements :

+

- Perl in /usr/bin/perl - or just run 'perl + script'
+ - Net::SNMP
+ - file 'utils.pm' in plugin diretory
+

+

Dowload + latest version : 0.6

+

Configurations + examples

+

Examples :

+


+ All examples below are considering the script is local directory. + Host to be checked is 127.0.0.1 with snmp community "public".

+

If multiple interfaces are selected, all must + be up to get an OK result

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Get help +

+

./check_snmp_win.pl -h

+
snmpv3 login./check_snmp_win.pl -H 127.0.0.1 + -l login -x passwd
+

Check if at least one process matching dns is running +

+

./check_snmp_win.pl -H 127.0.0.1 -C public -n dns

+
+

Result example : +

+

1 services active (matching "dns") : OK

+
+

Check if at least 3 process matching dns are running +

+

./check_snmp_win.pl -H 127.0.0.1 -C public -n http -N + 2

+
+
Result example :
+ (<=2 will return warning, 0 critical)
+
1 services active (matching + "dns") : CRITICAL
Check if dns + and ssh services are running./check_snmp_win.pl -H 127.0.0.1 + -C public -n dns,ssh
+

Result example :

+
"dns" active, "ssh" + active : OK
Check if dns + and toto services are running./check_snmp_win.pl -H 127.0.0.1 + -C public -n dns,toto
+
Result example :
+
"toto" not active + : CRITICAL
+

 

+

Changelog + : On CVS repository on sourceforge : http://nagios-snmp.cvs.sourceforge.net/nagios-snmp/plugins/.
+

+

Output of check_snmp_win.pl -h

+ + + + +
+

SNMP Windows Monitor for Nagios version 0.6
+ GPL licence, (c)2004-2005 Patrick Proy

+

Usage: check_snmp_win [-v] -H <host> -C <snmp_community> + [-2] | (-l login -x passwd) [-p <port>] -n <name>[,<name2] + [-T=service] [-r] [-s] [-N=<n>] [-t <timeout>] + [-V]
+ -v, --verbose
+ print extra debugging information (and lists all services)
+ -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 + or v2c with option)
+ -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)
+ -T, --type=service
+ Check type :
+ - service (default) checks service
+ -n, --name=NAME[,NAME2...]
+ Comma separated names of services (perl regular expressions + can be used for every one).
+ By default, it is not case sensitive.
+ -N, --number=<n>
+ Compare matching services with <n> instead of the number + of names provided.
+ -s, --showall
+ Show all services in the output, instead of only the non-active + ones.
+ -r, --noregexp
+ Do not use regexp to match NAME in service description.
+ -t, --timeout=INTEGER
+ timeout for SNMP in seconds (Default: 5)
+ -V, --version
+ prints version number
+ Note :
+ The script will return
+ OK if ALL services are in active state,
+ WARNING if there is more than specified (ex 2 service specified, + 3 active services matching),
+ CRITICAL if at least one of them is non active.
+ The -n option will allows regexp in perl format
+ -n "service" will match 'service WINS' 'sevice DNS' + etc...
+ It is not case sensitive by default : WINS = wins

+
+
+

This project is hosted on :
+ SourceForge.net Logo +

+

Nagios and the Nagios logo are registered + trademarks of Ethan Galstad.

+
+
+

 

+ + + + + diff --git a/install.sh b/install.sh index d9de79c..b4d9691 100755 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/bin/bash -############################## check_snmp_storage ############## -# Version : 1.2 -# Date : Jan 11 2007 +############################## install.sh ##################### +# Version : 1.4 +# Date : Jan 13 2007 # Author : Patrick Proy ( nagios at proy.org) # Help : http://www.manubulon.com/nagios/ # Licence : GPL - http://www.fsf.org/licenses/gpl.txt @@ -9,7 +9,7 @@ # Contribs : ################################################################# # -# USAGE : ./install [] +# USAGE : ./install [ | AUTO [] ] # USAGE : by default all scripts will be installed # # REQUIREMENTS : /bin/bash and sed @@ -21,191 +21,250 @@ # - Check Net::SNMP version # - Install plugins in the plugins directory and modify paths if necessary. -############################ get script to install +############################ script list +PLUGINS="check_snmp_boostedge.pl check_snmp_css.pl check_snmp_linkproof_nhr.pl check_snmp_nsbox.pl check_snmp_vrrp.pl check_snmp_cpfw.pl check_snmp_env.pl check_snmp_load.pl check_snmp_process.pl check_snmp_win.pl check_snmp_css_main.pl check_snmp_int.pl check_snmp_mem.pl check_snmp_storage.pl" +############################ get script to install or install type if [ $# -gt 0 ] ; then INSTSCRIPT=$1 ; else INSTSCRIPT="all" ; fi -echo -echo "###### Nagios snmp scripts installer ######" -echo -echo "Will install $INSTSCRIPT script(s)" -echo -############################ default values - -SRCDIR=$PWD -PERLHOME=`which perl 2>&1` -if [ $? -ne 0 ]; then PERLHOME="" ; fi - -PLUGHOME=/usr/local/nagios/libexec -TMPDATA=/tmp -PLUGINS="check_snmp_boostedge.pl check_snmp_css.pl check_snmp_linkproof_nhr.pl check_snmp_nsbox.pl check_snmp_vrrp.pl check_snmp_cpfw.pl check_snmp_env.pl check_snmp_load.pl check_snmp_process.pl check_snmp_win.pl check_snmp_css_main.pl check_snmp_int.pl check_snmp_mem.pl check_snmp_storage.pl" - -############################ Checking Perl - -echo -n "What is your perl location ? [$PERLHOME] " -read USERPERL -if [ "ZZ$USERPERL" != "ZZ" ]; then PERLHOME=$USERPERL ; fi - -if [ "z$PERLHOME" == "z" ]; then - echo "Can't find perl binary... exiting" - echo "######### ERROR ########" - exit 1 -fi - -NETSNMP=`$PERLHOME -e 'if (eval "require Net::SNMP") { print "Yes" ;}'` -if [ $? -ne 0 ] ; then - echo "Error while checking Net::SNMP module" - echo "######### ERROR ########" - exit 1; -fi - -if [ "zz$NETSNMP" != "zzYes" ]; then - echo "Module Net::SNMP not found!" - echo "Install it with CPAN or manually : http://www.manubulon.com/nagios/faq.html#FAQ2" - echo "######### ERROR ########" - exit 1; -fi - -SNMPVER=`$PERLHOME -e 'require Net::SNMP;print Net::SNMP->VERSION'` -echo "Net::SNMP module version is $SNMPVER [OK]" - -GETOPT=`$PERLHOME -e 'if (eval "require Getopt::Long") { print "Yes" ;}'` -if [ "zz$GETOPT" != "zzYes" ]; then - echo "Module Getopt::Long not found!" - echo "Install it with CPAN or manually" - echo "######### ERROR ########" - exit 1; -fi -echo "Module Getopt::Long found [OK]" - -############################ Check nagios plugin directory and utils.pm - -echo -echo "What is your nagios plugin location ? " -echo -n "Note : file utils.pm must be present in it [$PLUGHOME] " -read USERPLUG - -if [ "z$USERPLUG" != "z" ]; then PLUGHOME=$USERPLUG ; fi -if [ ! -d $PLUGHOME ] ; then - echo "Directory $PLUGHOME does not exist !" - echo "######### ERROR ########" - exit 1 -fi -if [ ! -f $PLUGHOME/utils.pm ] ; then - echo "File $PLUGHOME/utils.pm does not exist !" - echo "Install it from nagios plugins" - echo "######### ERROR ########" - exit 1 -fi - -############################ Asking for temp directory - -echo -echo "Where do you want the plugins to put temporary data (only used by some plugins) ? " -echo -n "Nagios user must be able to write files in it [$TMPDATA] " -read USERTMP - -if [ "z$USERTMP" != "z" ]; then TMPDATA=$USERTMP ; fi - -if [ ! -d $TMPDATA ] ; then - echo "Directory $TMPDATA does not exist !" - echo "######### ERROR ########" - exit 1 -fi - -############################ Looks OK, copying with changes if necessary - -TRANS="" -# Change '#!/usr/bin/perl -w' -if [ $PERLHOME != "/usr/bin/perl" ] ; then - TRANS="-r -e s#/usr/bin/perl#$PERLHOME#" -fi - -# Change 'use lib "/usr/local/nagios/libexec";' -if [ $PLUGHOME != "/usr/local/nagios/libexec" ] ; then - if [ "z$TRANS" == "z" ]; then TRANS="-r -e s#/usr/local/nagios/libexec#$PLUGHOME#" - else TRANS="$TRANS -e s#/usr/local/nagios/libexec#$PLUGHOME#";fi -fi - -# Change 'my $o_base_dir="/tmp/tmp_Nagios_' -if [ $TMPDATA != "/tmp" ] ; then - if [ "z$TRANS" == "z" ]; then TRANS="-r -e s#/tmp/tmp_Nagios#$TMPDATA/tmp_Nagios#" - else TRANS="$TRANS -e s#/tmp/tmp_Nagios#$TMPDATA/tmp_Nagios#";fi -fi - -######################### script install - -echo -echo "Will now install $INSTSCRIPT script(s) : " -echo "in directory : $PLUGHOME" -echo "perl : $PERLHOME" -echo "temp directory : $TMPDATA" -echo -echo -n "OK ? [Y/n]" -read INSTOK - -if [ "$INSTOK" == "n" ]; then - echo "Aborting....." - echo "######### ERROR ########" - exit 1 -fi - -ERROR=0 - -if [ $INSTSCRIPT == "all" ] ; then - for i in $PLUGINS ; do +if [ $INSTSCRIPT != "AUTO" ] ; then + ############################ Manual installation echo - if [ ! -f $i ] ; then - echo "Can't find source file $i : ##### ERROR #####" - else - echo -n "Installing $i : " - if [ "z$TRANS" == "z" ] ; then - cp $i $PLUGHOME/$i 2>&1 - else - sed $TRANS $i > $PLUGHOME/$i 2>&1 - fi - if [ $? -ne 0 ] ; then - echo "##### ERROR #####"; - rm -f $PLUGHOME/$i - ERROR=1 - else - echo "OK" - chmod 755 $PLUGHOME/$i 2>&1 - fi - fi - done -else + echo "###### Nagios snmp scripts installer ######" + echo + echo "Will install $INSTSCRIPT script(s)" echo - if [ ! -f $INSTSCRIPT ] ; then - echo "Can't find source file $INSTSCRIPT : ##### ERROR #####" - else - echo -n "Installing $INSTSCRIPT : " - if [ "z$TRANS" == "z" ] ; then - cp $INSTSCRIPT > $PLUGHOME/$INSTSCRIPT - else - sed $TRANS $INSTSCRIPT > $PLUGHOME/$INSTSCRIPT 2>&1 - fi - if [ $? -ne 0 ] ; then - echo "##### ERROR #####"; - rm -f $PLUGHOME/$INSTSCRIPT - ERROR=1 - exit 1; - else - echo "OK" - chmod 755 $PLUGHOME/$INSTSCRIPT 2>&1 - fi - fi + + ############################ default values + + SRCDIR=$PWD + PERLHOME=`which perl 2>&1` + if [ $? -ne 0 ]; then PERLHOME="" ; fi + + PLUGHOME=/usr/local/nagios/libexec + TMPDATA=/tmp + ############################ Checking Perl + + echo -n "What is your perl location ? [$PERLHOME] " + read USERPERL + if [ "ZZ$USERPERL" != "ZZ" ]; then PERLHOME=$USERPERL ; fi + + if [ "z$PERLHOME" == "z" ]; then + echo "Can't find perl binary... exiting" + echo "######### ERROR ########" + exit 1 + fi + + NETSNMP=`$PERLHOME -e 'if (eval "require Net::SNMP") { print "Yes" ;}'` + if [ $? -ne 0 ] ; then + echo "Error while checking Net::SNMP module" + echo "######### ERROR ########" + exit 1; + fi + + if [ "zz$NETSNMP" != "zzYes" ]; then + echo "Module Net::SNMP not found!" + echo "Install it with CPAN or manually : http://www.manubulon.com/nagios/faq.html#FAQ2" + echo "######### ERROR ########" + exit 1; + fi + + SNMPVER=`$PERLHOME -e 'require Net::SNMP;print Net::SNMP->VERSION'` + echo "Net::SNMP module version is $SNMPVER [OK]" + + GETOPT=`$PERLHOME -e 'if (eval "require Getopt::Long") { print "Yes" ;}'` + if [ "zz$GETOPT" != "zzYes" ]; then + echo "Module Getopt::Long not found!" + echo "Install it with CPAN or manually" + echo "######### ERROR ########" + exit 1; + fi + echo "Module Getopt::Long found [OK]" + + ############################ Check nagios plugin directory and utils.pm + + echo + echo "What is your nagios plugin location ? " + echo -n "Note : file utils.pm must be present in it [$PLUGHOME] " + read USERPLUG + + if [ "z$USERPLUG" != "z" ]; then PLUGHOME=$USERPLUG ; fi + if [ ! -d $PLUGHOME ] ; then + echo "Directory $PLUGHOME does not exist !" + echo "######### ERROR ########" + exit 1 + fi + if [ ! -f $PLUGHOME/utils.pm ] ; then + echo "File $PLUGHOME/utils.pm does not exist !" + echo "Install it from nagios plugins" + echo "######### ERROR ########" + exit 1 + fi + + ############################ Asking for temp directory + + echo + echo "Where do you want the plugins to put temporary data (only used by some plugins) ? " + echo -n "Nagios user must be able to write files in it [$TMPDATA] " + read USERTMP + + if [ "z$USERTMP" != "z" ]; then TMPDATA=$USERTMP ; fi + + if [ ! -d $TMPDATA ] ; then + echo "Directory $TMPDATA does not exist !" + echo "######### ERROR ########" + exit 1 + fi + + ############################ Looks OK, copying with changes if necessary + + TRANS="" + # Change '#!/usr/bin/perl -w' + if [ $PERLHOME != "/usr/bin/perl" ] ; then + TRANS="-r -e s#/usr/bin/perl#$PERLHOME#" + fi + + # Change 'use lib "/usr/local/nagios/libexec";' + if [ $PLUGHOME != "/usr/local/nagios/libexec" ] ; then + if [ "z$TRANS" == "z" ]; then TRANS="-r -e s#/usr/local/nagios/libexec#$PLUGHOME#" + else TRANS="$TRANS -e s#/usr/local/nagios/libexec#$PLUGHOME#";fi + fi + + # Change 'my $o_base_dir="/tmp/tmp_Nagios_' + if [ $TMPDATA != "/tmp" ] ; then + if [ "z$TRANS" == "z" ]; then TRANS="-r -e s#/tmp/tmp_Nagios#$TMPDATA/tmp_Nagios#" + else TRANS="$TRANS -e s#/tmp/tmp_Nagios#$TMPDATA/tmp_Nagios#";fi + fi + + ######################### script install + + echo + echo "Will now install $INSTSCRIPT script(s) : " + echo "in directory : $PLUGHOME" + echo "perl : $PERLHOME" + echo "temp directory : $TMPDATA" + echo + echo -n "OK ? [Y/n]" + read INSTOK + + if [ "$INSTOK" == "n" ]; then + echo "Aborting....." + echo "######### ERROR ########" + exit 1 + fi + + ERROR=0 + + if [ $INSTSCRIPT == "all" ] ; then + for i in $PLUGINS ; do + echo + if [ ! -f $i ] ; then + echo "Can't find source file $i : ##### ERROR #####" + else + echo -n "Installing $i : " + if [ "z$TRANS" == "z" ] ; then + cp $i $PLUGHOME/$i 2>&1 + else + sed $TRANS $i > $PLUGHOME/$i 2>&1 + fi + if [ $? -ne 0 ] ; then + echo "##### ERROR #####"; + rm -f $PLUGHOME/$i + ERROR=1 + else + echo "OK" + chmod 755 $PLUGHOME/$i 2>&1 + fi + fi + done + else + echo + if [ ! -f $INSTSCRIPT ] ; then + echo "Can't find source file $INSTSCRIPT : ##### ERROR #####" + else + echo -n "Installing $INSTSCRIPT : " + if [ "z$TRANS" == "z" ] ; then + cp $INSTSCRIPT > $PLUGHOME/$INSTSCRIPT + else + sed $TRANS $INSTSCRIPT > $PLUGHOME/$INSTSCRIPT 2>&1 + fi + if [ $? -ne 0 ] ; then + echo "##### ERROR #####"; + rm -f $PLUGHOME/$INSTSCRIPT + ERROR=1 + exit 1; + else + echo "OK" + chmod 755 $PLUGHOME/$INSTSCRIPT 2>&1 + fi + fi + fi + + echo + if [ $ERROR -eq 1 ] ; then + echo "Installation ended with errors. Check output above" + exit 1; + fi + + echo "Installation completed OK" + echo "You can delete all the source files and directory" + echo "Remember to look for informtation at http://www.manubulon.com/nagios/" + exit 0; + +else +####################### Silent install with parameters ############ +# PARAM AUTO [] + if [ $# -ne 4 ] && [ $# -ne 5 ] ; then exit 1; fi + + SRCDIR=$PWD + PERLHOME=$4 + PLUGHOME=$2 + TMPDATA=$3 + INSTALLDIR=$5 + + TRANS="" + # Change '#!/usr/bin/perl -w' + if [ $PERLHOME != "/usr/bin/perl" ] ; then + TRANS="-r -e s#/usr/bin/perl#$PERLHOME#" + fi + + # Change 'use lib "/usr/local/nagios/libexec";' + if [ $PLUGHOME != "/usr/local/nagios/libexec" ] ; then + if [ "z$TRANS" == "z" ]; then TRANS="-r -e s#/usr/local/nagios/libexec#$PLUGHOME#" + else TRANS="$TRANS -e s#/usr/local/nagios/libexec#$PLUGHOME#";fi + fi + + # Change 'my $o_base_dir="/tmp/tmp_Nagios_' + if [ $TMPDATA != "/tmp" ] ; then + if [ "z$TRANS" == "z" ]; then TRANS="-r -e s#/tmp/tmp_Nagios#$TMPDATA/tmp_Nagios#" + else TRANS="$TRANS -e s#/tmp/tmp_Nagios#$TMPDATA/tmp_Nagios#";fi + fi + + ######################### script install + ERROR=0 + if [ "z$INSTALLDIR" != "z" ] ; then + PLUGHOME=$INSTALLDIR + fi + for i in $PLUGINS ; do + if [ ! -f $i ] ; then + ERROR=1 + else + if [ "z$TRANS" == "z" ] ; then + cp $i $PLUGHOME/$i 2>&1 + else + sed $TRANS $i > $PLUGHOME/$i 2>&1 + fi + if [ $? -ne 0 ] ; then + rm -f $PLUGHOME/$i + ERROR=1 + else + chmod 755 $PLUGHOME/$i 2>&1 + fi + fi + done + if [ $ERROR -eq 1 ] ; then + exit 1; + fi + exit 0; fi -echo -if [ $ERROR -eq 1 ] ; then - echo "Installation ended with errors. Check output above" - exit 1; -fi - -echo "Installation completed OK" -echo "You can delete all the source files and directory" -echo "Remember to look for informtation at http://www.manubulon.com/nagios/" -exit 0; - -