Check Cisco Ips.pl

download Check Cisco Ips.pl

If you can't read please download the document

Transcript of Check Cisco Ips.pl

#!/usr/bin/perl -w ############################## check_snmp_load ################# my $Version='1.0'; # Date : 2009/11/23 # Author : Mathias Mahnke # Licence : GPL - http://www.fsf.org/licenses/gpl.txt # Contributors : Patrick Proy (check_snmp_cpu) ################################################################# # # Help : ./check_cisco_ips.pl -h # use strict; use Net::SNMP; use Getopt::Long; # Nagios specific my $TIMEOUT = 15; my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4); # SNMP Datas # Cisco IPS CPU my $cisco_cpu_5m = "1.3.6.1.4.1.9.9.109.1.1.1.1.8.1"; # Cisco CPU load (5min %) my $cisco_cpu_1m = "1.3.6.1.4.1.9.9.109.1.1.1.1.7.1"; # Cisco CPU load (1min %) my $cisco_cpu_5s = "1.3.6.1.4.1.9.9.109.1.1.1.1.6.1"; # Cisco CPU load (5sec %) # Cisco IPS Memory my $cisco_mem_used = "1.3.6.1.4.1.9.9.221.1.1.1.1.7.1.1"; # Cisco Mem Used my $cisco_mem_free = "1.3.6.1.4.1.9.9.221.1.1.1.1.8.1.1"; # Cisco Mem Free # Cisco IPS Health my my my al my $cisco_hea_loss = "1.3.6.1.4.1.9.9.383.1.4.1.0"; # HealthPacketLoss $cisco_hea_rate = "1.3.6.1.4.1.9.9.383.1.4.2.0"; # HealthPacketDenialRate $cisco_hea_mem = "1.3.6.1.4.1.9.9.383.1.4.14.0"; # HealthIsSensorMemoryCritic $cisco_hea_act = "1.3.6.1.4.1.9.9.383.1.4.15.0"; # HealthIsSensorActive

# valid values my @valid_types = ("cpu","mem","health"); # Globals my $o_host = undef; my $o_community = undef; my $o_port = 161; my $o_help= undef; my $o_verb= undef; my $o_version= undef; # check type : cpu | mem my $o_check_type= "cpu"; # End compatibility my $o_warn= undef; my @o_warnL= undef; my $o_crit= undef; my @o_critL= undef; my $o_timeout= undef; # # # # # # hostname community port wan't some help ? verbose mode print version

# # # # #

warning level warning levels for Linux Load or Cisco CPU critical level critical level for Linux Load or Cisco CPU Timeout (Default 5)

my $o_perf= undef; # Output performance data my $o_version2= undef; # use snmp v2c # SNMPv3 specific my $o_login= undef; # Login for snmpv3 my $o_passwd= undef; # Pass for snmpv3 my $v3protocols=undef; # V3 protocol list. my $o_authproto='md5'; # Auth protocol my $o_privproto='des'; # Priv protocol my $o_privpass= undef; # priv password # functions sub p_version { print "check_cisco_ips version : $Version\n"; } sub print_usage { print "Usage: $0 [-v] -H -C [-2] | (-l login -x pass wd [-X pass -L ,]) [-p ] -w -c -T [cpu|mem|health] [-f] [-t ] [-V]\n"; } sub isnnum { # Return true if arg is not a number my $num = shift; if ( $num =~ /^(\d+\.?\d*)|(^\.\d+)$/ ) { return 0 ;} return 1; } sub help { print "\nSNMP Cisco IPS Monitor for Nagios version ",$Version,"\n"; print "GPL licence, 2009 Mathias Mahnke\n\n"; print_usage(); print $o_critL[$i] : CRITICAL"; $exit_val=$ERRORS{"CRITICAL"}; } if ( $load[$i] > $o_warnL[$i] ) { # output warn error only if no critical was found if ($exit_val eq $ERRORS{"OK"}) { print " $load[$i] > $o_warnL[$i] : WARNING"; $exit_val=$ERRORS{"WARNING"}; }

} } print " OK" if ($exit_val eq $ERRORS{"OK"}); if (defined($o_perf)) { print " | load_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] "; print "load_1_min=$load[1]%;$o_warnL[1];$o_critL[1] "; print "load_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n"; } else { print "\n"; } exit $exit_val; } ############## Cisco IPS memory check ################ if ($o_check_type eq "mem") { my @oidlists = ($cisco_mem_used, $cisco_mem_free); my $resultat = (Net::SNMP->VERSION < 4) ? $session->get_request(@oidlists) : $session->get_request(-varbindlist => \@oidlists); if (!defined($resultat)) { printf("ERROR: Description table : %s.\n", $session->error); $session->close; exit $ERRORS{"UNKNOWN"}; } $session->close; if (!defined ($$resultat{$cisco_mem_used})) { print "No Memory information : UNKNOWN\n"; exit $ERRORS{"UNKNOWN"}; } my @load = undef; $load[0]=int($$resultat{$cisco_mem_used}/1024/1024); $load[1]=int($$resultat{$cisco_mem_free}/1024/1024); $load[2]=int($load[0]/($load[0]+$load[1])*100); print "Cisco IPS Memory : used = $load[0] MB, free = $load[1] MB, utilization = $load[2] % :"; $exit_val=$ERRORS{"OK"}; if ( $load[2] > $o_crit ) { print " $load[2] > $o_crit : CRITICAL"; $exit_val=$ERRORS{"CRITICAL"}; } if ( $load[2] > $o_warn ) { # output warn error only if no critical was found if ($exit_val eq $ERRORS{"OK"}) { print " $load[2] > $o_warn : WARNING"; $exit_val=$ERRORS{"WARNING"}; } } print " OK" if ($exit_val eq $ERRORS{"OK"}); if (defined($o_perf)) { print " | utilization=$load[2]%;$o_warnL[0];$o_crit "; } else {

print "\n"; } exit $exit_val; } ############## Cisco IPS health check ################ if ($o_check_type eq "health") { my @oidlists = ($cisco_hea_loss, $cisco_hea_rate, $cisco_hea_mem, $cisco_hea_act ); my $resultat = (Net::SNMP->VERSION < 4) ? $session->get_request(@oidlists) : $session->get_request(-varbindlist => \@oidlists); if (!defined($resultat)) { printf("ERROR: Description table : %s.\n", $session->error); $session->close; exit $ERRORS{"UNKNOWN"}; } $session->close; if (!defined ($$resultat{$cisco_hea_act})) { print "No health information : UNKNOWN\n"; exit $ERRORS{"UNKNOWN"}; } my @load = undef; $load[0]=1-$$resultat{$cisco_hea_act}; $load[1]=$$resultat{$cisco_hea_mem}; $load[2]=$$resultat{$cisco_hea_loss}; $load[3]=$$resultat{$cisco_hea_rate}; print "Cisco IPS Health : inactive = $load[0], memory critical = $load[1], packe t loss = $load[2] %, packet deny rate = $load[3] % :"; $exit_val=$ERRORS{"OK"}; for (my $i=0;$i $o_critL[$i] ) { print " $load[$i] > $o_critL[$i] : CRITICAL"; $exit_val=$ERRORS{"CRITICAL"}; } if ( $load[$i] > $o_warnL[$i] ) { # output warn error only if no critical was found if ($exit_val eq $ERRORS{"OK"}) { print " $load[$i] > $o_warnL[$i] : WARNING"; $exit_val=$ERRORS{"WARNING"}; } } } print " OK" if ($exit_val eq $ERRORS{"OK"}); if (defined($o_perf)) { print " | load_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] "; print "load_1_min=$load[1]%;$o_warnL[1];$o_critL[1] "; print "load_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n"; } else { print "\n"; }

exit $exit_val; }