Check snmp percent.pl
From Federal Burro of Information
#!/usr/bin/perl -w use strict; use Data::Dumper; use Net::SNMP; use Getopt::Long; use Pod::Usage; use POSIX; my $timeout = 1; my $debug = 1; my $verbose = 0; my $man = 0; my $help = 0; my $comm = ''; my $host = ''; my $oid1 = ''; # numerator my $oid2 = ''; # denominator my $warn = ''; my $crit = ''; my $percent = ''; my $result = GetOptions ( "comm=s" => \$comm, "H=s" => \$host, "oid1=s" => \$oid1, "oid2=s" => \$oid2, "w=i" => \$warn, "c=i" => \$crit, 'help|?' => \$help, man => \$man, 'v' => \$verbose) or pod2usage(2); pod2usage(1) if $help; pod2usage(-exitstatus => 0, -verbose => 2) if $man; if ( $comm eq '' ) { die "community string not set\n"; } if ( $host eq '' ) { die "host not set\n"; } if ( $oid1 eq '' ) { die "oid1 not set\n"; } if ( $oid2 eq '' ) { die "oid2 not set\n"; } if ( $warn eq '' ) { die "warn not set\n"; } if ( $crit eq '' ) { die "critical not set\n"; } if ( $verbose ) { print "Community string is $comm\n"; print "Host is $host\n"; print "oid1 is $oid1\n"; print "oid2 is $oid2\n"; print "warn is $warn\n"; print "Critical is $crit\n"; print "Verbose is $verbose\n"; } sub isip ( $ ) { my $string = shift; if ( $string =~ /(\d+)(\.\d+){3}/) { print "$string", ' matches /(\d+)(\.\d+){3}/', "\n"; } else { print "$string", ' does not matche /(\d+)(\.\d+){3}/', "\n"; } # if ($string !~ /([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)/) { # a.b.c.d will be considered as legal ip address # without ^ and $ below -123.235.1.248 is a legal ip address if ($string !~ /^([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)$/) { print "$string not an IP address\n"; next; } my $notIP = 0; foreach my $s (($1, $2, $3, $4)) { # print "s=$s;"; if (0 > $s || $s > 255) { $notIP = 1; last; } } if ($notIP) { return 0; } return 1; } my ($session, $error) = Net::SNMP -> session( -hostname => $host , -community => $comm, -timeout => $timeout, -version => 2 ); if ( $session ) { $verbose && print "Session created ok\n"; my $result = $session->get_request( -varbindlist => [ $oid1, $oid2 ],); if ( $result ) { if ( ! defined $result->{$oid1} ) { print "UNKNOWN: Failed to get oid1 $oid1\n"; exit(3); # UNKNOWN } if ( ! defined $result->{$oid2} ) { print "UNKNOWN: Failed to get oid2 $oid2\n"; exit(3); # UNKNOWN } die "oid1 not found\n" unless ( $result->{$oid1} ) ; die "oid2 not found\n" unless ( $result->{$oid2} ) ; $percent = floor( $result->{$oid1} / $result->{$oid2} * 100 ) ; if ( $percent > $crit ) { print "CRIT: ".$percent."%|'percent'=".$percent."%:$warn:$crit\n"; exit(2); # CRITICAL } if ( $percent > $warn ) { print "WARN: ".$percent."%|'percent'=".$percent."%:$warn:$crit\n"; exit(1); # WARN } print "OK: ".$percent."%|'percent'=$percent%:$warn:$crit\n"; } else { print "Failed to get oid1\n"; print $session->error()."\n"; } } else { $verbose && print "failed to make snmp session for ".$host."\n"; return 0; } __END__ =head1 NAME check_snmp_ratio.pl =head1 SYNOPSIS check_snmp_ratio.pl -comm <string> -H <host> -oid1 <.1.1.1> -oid2 <.1.1.2> -w 80 -c 90 =head1 OPTIONS =over 8 =item B<-comm> The community string =item B<-H> The host to connect to. =item B<-oid1> The numerator ( the top bit ) =item B<-oid2> The denominator ( the bottom bit ) =item B<-w> The warn threshold, a percent =item B<-c> The critical threshold, a precent =item B<-man> Prints the manual page and exits. =item B<-help> I need somebody, not just anybody, help me , please. =back =head1 DESCRIPTION B<This program> will read the given options , collect that data and do something useful, I swear. =cut