Build precise queries to find exactly what you need
Press ESC to close
@Steentje1986
Favorites0
Views
Projects0
#!/usr/bin/perl -w use strict; use lib; use utils qw($TIMEOUT %ERRORS); use Net::SNMP; use Getopt::Long; Getopt::Long::Configure('bundling'); my $stat = $ERRORS{'OK'}; my $msg; my $perf; my $script_name = "check_pineapp.pl"; ### SNMP OIDs ############### # CPULOAD my $snmp_pineapp_cpuload = '.1.3.6.1.4.1.19801.1.1.3'; my $snmp_pineapp_cpuload_1min = "$snmp_pineapp_cpuload.1.0"; my $snmp_pineapp_cpuload_5min = "$snmp_pineapp_cpuload.2.0"; my $snmp_pineapp_cpuload_15min = "$snmp_pineapp_cpuload.3.0"; # Services my $snmp_pineapp_services = '.1.3.6.1.4.1.19801.2.1'; my $snmp_pineapp_services_smtp = "$snmp_pineapp_services.1.0"; my $snmp_pineapp_services_pop3 = "$snmp_pineapp_services.2.0"; my $snmp_pineapp_services_imap4 = "$snmp_pineapp_services.3.0"; my $snmp_pineapp_services_av = '.1.3.6.1.4.1.19801.2.5.1.0'; # Queue my $snmp_pineapp_queues = "$snmp_pineapp_services.10"; my $snmp_pineapp_queues_in = "$snmp_pineapp_queues.1.0"; my $snmp_pineapp_queues_out = "$snmp_pineapp_queues.2.0"; my $snmp_pineapp_queues_high = "$snmp_pineapp_queues.3.1.0"; my $snmp_pineapp_queues_normal = "$snmp_pineapp_queues.3.2.0"; my $snmp_pineapp_queues_low = "$snmp_pineapp_queues.3.3.0"; my $snmp_pineapp_queues_total = "$snmp_pineapp_queues.3.4.0"; my $snmp_pineapp_averageProcessingTimePerMsg = ".1.3.6.1.4.1.19801.2.2.1.4.0"; # Misc my $snmp_pineapp_storage = '.1.3.6.1.4.1.19801.1.4.0'; ### Functions ############### sub _create_session(@) { my ($server, $comm) = @_; my $version = 1; my ($sess, $err) = Net::SNMP->session( -hostname => $server, -version => $version, -community => $comm); if (!defined($sess)) { print "Can't create SNMP session to $servern"; exit(1); } return $sess; } sub FSyntaxError($) { my $err = shift; print [$local_oid]); return($r_return->{$local_oid}); } sub _clac_err_stat(@) { my $value = shift; my $value_type = shift; my $tmp_warn = shift; my $tmp_crit = shift; my $unit = shift; my $r_msg; my $r_stat; if($value $tmp_warn and $value = $tmp_crit) { $r_stat = $ERRORS{'CRITICAL'}; $r_msg = "CRIT: $value_type $value$unit"; } return($r_msg,$r_stat); } ### Gather input from user ############################# my %opt; $opt{'crit'} = 500; $opt{'warn'} = 500; my $result = GetOptions(%opt, 'host|H=s', 'community|C=s', 'check_type|T=s', 'warn|w=f', 'crit|c=f', ); FSyntaxError("Missing -H") unless defined $opt{'host'}; FSyntaxError("Missing -C") unless defined $opt{'community'}; FSyntaxError("Missing -T") unless defined $opt{'check_type'}; if($opt{'warn'} > $opt{'crit'}) { FSyntaxError("Warning can't be larger then Critical: $opt{'warn'} > $opt{'crit'}"); } # Starting Alarm alarm($TIMEOUT); # Establish SNMP Session our $snmp_session = _create_session($opt{'host'},$opt{'community'}); # Start Check ! ### CPULOAD ### if("$opt{'check_type'}" eq "CPULOAD") { my $check = $snmp_session->get_table($snmp_pineapp_cpuload); ($msg,$stat) = _clac_err_stat($$check{$snmp_pineapp_cpuload_1min},$opt{'check_type'},$opt{'warn'},$opt{'crit'}); $perf = "load1=$$check{$snmp_pineapp_cpuload_1min} load5=$$check{$snmp_pineapp_cpuload_5min} load15=$$check{$snmp_pineapp_cpuload_15min}"; ### SERVICES ### } elsif("$opt{'check_type'}" eq "SERVICES") { my %check = ( 'smtp' => _get_oid_value($snmp_session,$snmp_pineapp_services_smtp), 'pop3' => _get_oid_value($snmp_session,$snmp_pineapp_services_pop3), 'imap4' => _get_oid_value($snmp_session,$snmp_pineapp_services_imap4), 'av' => _get_oid_value($snmp_session,$snmp_pineapp_services_av) ); my $count = 0; foreach my $srv ( keys %check) { if($check{$srv} == 0 ){ $msg = "$msg, $srv is down"; $stat = $ERRORS{'CRITICAL'}; $count++; } } if($count == 0) { $msg = "OK: All Services Ok !"; } else { $msg = "CRIT: $msg"; } $perf = "down_srv=$count"; ### DISK ### } elsif("$opt{'check_type'}" eq "DISK") { my $check = _get_oid_value($snmp_session,$snmp_pineapp_storage); if($check eq "OK") { $stat = $ERRORS{'OK'}; $msg = "OK: $opt{'check_type'} $check"; $perf = "disk_err=0"; } else { $stat = $ERRORS{'CRITICAL'}; $msg = "CRIT: $opt{'check_type'} $check"; $perf = "disk_err=1"; } ### MSGPERSEC ### } elsif("$opt{'check_type'}" eq "MSGPERSEC") { my $check = _get_oid_value($snmp_session,$snmp_pineapp_averageProcessingTimePerMsg); ($msg,$stat) = _clac_err_stat($check,$opt{'check_type'},$opt{'warn'},$opt{'crit'},"sec"); $perf = "msgPersec=$check/sec"; ### INOUT ### } elsif("$opt{'check_type'}" eq "INOUT") { my $in = _get_oid_value($snmp_session,$snmp_pineapp_queues_in); my $out = _get_oid_value($snmp_session,$snmp_pineapp_queues_out); $msg = "OK: $opt{'check_type'}(Performance Only)"; $perf = "in=$in/msg out=-$out/msg"; ### QUEUE ### } elsif("$opt{'check_type'}" eq "QUEUE") { my $high = _get_oid_value($snmp_session,$snmp_pineapp_queues_high); my $normal = _get_oid_value($snmp_session,$snmp_pineapp_queues_normal); my $low = _get_oid_value($snmp_session,$snmp_pineapp_queues_low); my $total = _get_oid_value($snmp_session,$snmp_pineapp_queues_total); ($msg,$stat) = _clac_err_stat($total,$opt{'check_type'},$opt{'warn'},$opt{'crit'},"msg"); $perf = "total=$total/msg low=$low/msg normal=$normal/msg high=$high/msg"; } else { FSyntaxError("$opt{'check_type'} invalid parameter !"); } print "$msg | $perfn"; exit($stat);
Reviewed 12 years ago