git-svn-id: http://svn.centreon.com/trunk/plugins-2.x@3670 6bcd3966-0018-0410-8128-fd23d134de7e
This commit is contained in:
parent
f1256d969e
commit
90dbaa2e38
|
@ -27,7 +27,8 @@ use strict;
|
|||
use Net::SNMP qw(:snmp);
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin";
|
||||
use lib "@NAGIOS_PLUGINS@";
|
||||
use lib "/usr/local/nagios/libexec";
|
||||
#use lib "@NAGIOS_PLUGINS@";
|
||||
use utils qw($TIMEOUT %ERRORS &print_revision &support);
|
||||
|
||||
if (eval "require centreon" ) {
|
||||
|
|
|
@ -28,7 +28,8 @@ use strict;
|
|||
use Net::SNMP qw(:snmp);
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin";
|
||||
use lib "@NAGIOS_PLUGINS@";
|
||||
use lib "/usr/local/nagios/libexec";
|
||||
#use lib "@NAGIOS_PLUGINS@";
|
||||
use utils qw($TIMEOUT %ERRORS &print_revision &support);
|
||||
|
||||
if (eval "require centreon" ) {
|
||||
|
|
|
@ -28,7 +28,8 @@ use strict;
|
|||
use Net::SNMP qw(:snmp oid_lex_sort);
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin";
|
||||
use lib "@NAGIOS_PLUGINS@";
|
||||
use lib "/usr/local/nagios/libexec";
|
||||
#use lib "@NAGIOS_PLUGINS@";
|
||||
use utils qw($TIMEOUT %ERRORS &print_revision &support);
|
||||
|
||||
if (eval "require centreon" ) {
|
||||
|
@ -152,8 +153,8 @@ foreach my $err (oid_lex_sort(keys %$result_out)) {
|
|||
# ##
|
||||
|
||||
for (my $i = 0; $i < scalar(@nb_in_errors); $i++) {
|
||||
if (-e "/tmp/packet_errors_if".$i."_".$opt_H.".tmp") {
|
||||
open(FILE,"<"."/tmp/packet_errors_if".$i."_".$opt_H.".tmp");
|
||||
if (-e "/usr/local/centreon/temp/packet_errors_if".$i."_".$opt_H.".tmp") {
|
||||
open(FILE,"<"."/usr/local/centreon/temp/packet_errors_if".$i."_".$opt_H.".tmp");
|
||||
while($row = <FILE>){
|
||||
my @last_values = split(":",$row);
|
||||
$last_check_time[$i] = $last_values[0];
|
||||
|
@ -167,8 +168,8 @@ for (my $i = 0; $i < scalar(@nb_in_errors); $i++) {
|
|||
}
|
||||
|
||||
$update_time = time;
|
||||
unless (open(FILE,">"."/tmp/packet_errors_if".$i."_".$opt_H.".tmp")){
|
||||
print "Unknown - /tmp/tmp/packet_errors_if".$i."_".$opt_H.".tmp!\n";
|
||||
unless (open(FILE,">"."/usr/local/centreon/temp/packet_errors_if".$i."_".$opt_H.".tmp")){
|
||||
print "Unknown - /usr/local/centreon/temp/packet_errors_if".$i."_".$opt_H.".tmp!\n";
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
print FILE "$update_time:$nb_in_errors[$i]:$nb_out_errors[$i]";
|
||||
|
|
|
@ -28,7 +28,8 @@ use strict;
|
|||
use Net::SNMP qw(:snmp);
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin";
|
||||
use lib "@NAGIOS_PLUGINS@";
|
||||
use lib "/usr/local/nagios/libexec";
|
||||
#use lib "@NAGIOS_PLUGINS@";
|
||||
use utils qw($TIMEOUT %ERRORS &print_revision &support);
|
||||
|
||||
if (eval "require centreon" ) {
|
||||
|
@ -208,9 +209,8 @@ if ($opt_s) {
|
|||
# Get description table
|
||||
my $result = $session->get_table(
|
||||
Baseoid => $OID_hrStorageDescr
|
||||
);
|
||||
|
||||
if (!defined($result)) {
|
||||
);
|
||||
printf("ERROR: hrStorageDescr Table : %s.\n", $session->error);
|
||||
$session->close;
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
|
@ -219,12 +219,11 @@ if ($opt_s) {
|
|||
foreach my $key ( oid_lex_sort(keys %$result)) {
|
||||
my @oid_list = split (/\./,$key);
|
||||
my $index = pop (@oid_list) ;
|
||||
print "hrStorage $index :: $$result{$key}\n";
|
||||
print "hrStorage $index :: @$result{$key}\n";
|
||||
}
|
||||
exit $ERRORS{'OK'};
|
||||
}
|
||||
|
||||
|
||||
my $result = $session->get_request(
|
||||
-varbindlist => [$OID_hrStorageDescr.".".$partition ,
|
||||
$OID_hrStorageAllocationUnits.".".$partition ,
|
||||
|
|
|
@ -28,7 +28,8 @@ use strict;
|
|||
use Net::SNMP qw(:snmp oid_lex_sort);
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin";
|
||||
use lib "@NAGIOS_PLUGINS@";
|
||||
use lib "/usr/local/nagios/libexec";
|
||||
#use lib "@NAGIOS_LIBEXEC@";
|
||||
use utils qw($TIMEOUT %ERRORS &print_revision &support);
|
||||
if (eval "require centreon" ) {
|
||||
use centreon qw(get_parameters);
|
||||
|
@ -307,8 +308,8 @@ $last_out_bits = 0;
|
|||
|
||||
my $flg_created = 0;
|
||||
|
||||
if (-e "/tmp/centreon_traffic_if".$interface."_".$opt_H) {
|
||||
open(FILE,"<"."/tmp/centreon_traffic_if".$interface."_".$opt_H);
|
||||
if (-e "/usr/local/centreon/temp/traffic_if".$interface."_".$opt_H) {
|
||||
open(FILE,"<"."/usr/local/centreon/temp/traffic_if".$interface."_".$opt_H);
|
||||
while($row = <FILE>){
|
||||
@last_values = split(":",$row);
|
||||
$last_check_time = $last_values[0];
|
||||
|
@ -323,8 +324,8 @@ if (-e "/tmp/centreon_traffic_if".$interface."_".$opt_H) {
|
|||
|
||||
$update_time = time();
|
||||
|
||||
unless (open(FILE,">"."/tmp/centreon_traffic_if".$interface."_".$opt_H)){
|
||||
print "Unknown - /tmp/centreon_traffic_if".$interface."_".$opt_H. " !\n";
|
||||
unless (open(FILE,">"."/usr/local/centreon/temp/traffic_if".$interface."_".$opt_H)){
|
||||
print "Unknown - /usr/local/centreon/temp/traffic_if".$interface."_".$opt_H. " !\n";
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
print FILE "$update_time:$in_bits:$out_bits";
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
#!/usr/bin/perl -w
|
||||
#!/usr/bin/perl -w
|
||||
############################## check_snmp_load #################
|
||||
# Version : 1.2 / BETA
|
||||
# Date : Aug 27 2005
|
||||
my $Version='1.12';
|
||||
# Date : Oct 12 2007
|
||||
# Author : Patrick Proy ( patrick at proy.org)
|
||||
# Help : http://www.manubulon.com/nagios/
|
||||
# Help : http://nagios.manubulon.com/
|
||||
# Licence : GPL - http://www.fsf.org/licenses/gpl.txt
|
||||
# Changelog : HP Procurve
|
||||
# TODO :
|
||||
# Contributors : F. Lacroix and many others !!!
|
||||
#################################################################
|
||||
#
|
||||
# Help : ./check_snmp_load.pl -h
|
||||
|
@ -18,24 +17,8 @@ use Getopt::Long;
|
|||
|
||||
# Nagios specific
|
||||
|
||||
use lib "@NAGIOS_PLUGINS@";
|
||||
use utils qw(%ERRORS $TIMEOUT);
|
||||
#my $TIMEOUT = 15;
|
||||
#my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
|
||||
|
||||
# Oreon specific
|
||||
|
||||
|
||||
if (eval "require centreon" ) {
|
||||
use centreon qw(get_parameters create_rrd update_rrd &is_valid_serviceid);
|
||||
use vars qw($VERSION %centreon);
|
||||
%centreon=get_parameters();
|
||||
} else {
|
||||
print "Unable to load centreon perl module\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
my $pathtorrdbase = $centreon{GLOBAL}{DIR_RRDTOOL};
|
||||
my $TIMEOUT = 15;
|
||||
my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
|
||||
|
||||
# SNMP Datas
|
||||
|
||||
|
@ -44,7 +27,7 @@ my $base_proc = "1.3.6.1.2.1.25.3.3.1"; # oid for all proc info
|
|||
my $proc_id = "1.3.6.1.2.1.25.3.3.1.1"; # list of processors (product ID)
|
||||
my $proc_load = "1.3.6.1.2.1.25.3.3.1.2"; # %time the proc was not idle over last minute
|
||||
|
||||
# Linux load
|
||||
# Linux load
|
||||
|
||||
my $linload_table= "1.3.6.1.4.1.2021.10.1"; # net-snmp load table
|
||||
my $linload_name = "1.3.6.1.4.1.2021.10.1.2"; # text 'Load-1','Load-5', 'Load-15'
|
||||
|
@ -56,6 +39,18 @@ my $cisco_cpu_5m = "1.3.6.1.4.1.9.2.1.58.0"; # Cisco CPU load (5min %)
|
|||
my $cisco_cpu_1m = "1.3.6.1.4.1.9.2.1.57.0"; # Cisco CPU load (1min %)
|
||||
my $cisco_cpu_5s = "1.3.6.1.4.1.9.2.1.56.0"; # Cisco CPU load (5sec %)
|
||||
|
||||
# Cisco catalyst cpu/load
|
||||
|
||||
my $ciscocata_cpu_5m = ".1.3.6.1.4.1.9.9.109.1.1.1.1.5.9"; # Cisco CPU load (5min %)
|
||||
my $ciscocata_cpu_1m = ".1.3.6.1.4.1.9.9.109.1.1.1.1.3.9"; # Cisco CPU load (1min %)
|
||||
my $ciscocata_cpu_5s = ".1.3.6.1.4.1.9.9.109.1.1.1.1.4.9"; # Cisco CPU load (5sec %)
|
||||
|
||||
# Netscreen cpu/load
|
||||
|
||||
my $nsc_cpu_5m = "1.3.6.1.4.1.3224.16.1.4.0"; # NS CPU load (5min %)
|
||||
my $nsc_cpu_1m = "1.3.6.1.4.1.3224.16.1.2.0"; # NS CPU load (1min %)
|
||||
my $nsc_cpu_5s = "1.3.6.1.4.1.3224.16.1.3.0"; # NS CPU load (5sec %)
|
||||
|
||||
# AS/400 CPU
|
||||
|
||||
my $as400_cpu = "1.3.6.1.4.1.2.6.4.5.1.0"; # AS400 CPU load (10000=100%);
|
||||
|
@ -75,17 +70,27 @@ my $nokia_cpu = "1.3.6.1.4.1.94.1.21.1.7.1.0"; # Nokia CPU % usage
|
|||
# Bluecoat Appliance
|
||||
my $bluecoat_cpu = "1.3.6.1.4.1.3417.2.4.1.1.1.4.1"; # Bluecoat %cpu usage.
|
||||
|
||||
# Fortigate CPU
|
||||
my $fortigate_cpu = ".1.3.6.1.4.1.12356.1.8.0"; # Fortigate CPU % usage
|
||||
|
||||
# Linkproof Appliance
|
||||
my $linkproof_cpu= "1.3.6.1.4.1.89.35.1.53.0"; # Ressource utilisation (%) Considers network utilization and internal CPU utilization
|
||||
my $linkproof_cpu= "1.3.6.1.4.1.89.35.1.55.0"; # CPU RE (Routing Engine Tasks)
|
||||
# 1.3.6.1.4.1.89.35.1.53.0 : Ressource utilisation (%) Considers network utilization and internal CPU utilization
|
||||
# 1.3.6.1.4.1.89.35.1.54 : CPU only (%)
|
||||
# 1.3.6.1.4.1.89.35.1.55 : network only (%)
|
||||
|
||||
# HP-UX cpu usage (thanks to krizb for the OIDs).
|
||||
my $hpux_load_1_min="1.3.6.1.4.1.11.2.3.1.1.3.0";
|
||||
my $hpux_load_5_min="1.3.6.1.4.1.11.2.3.1.1.4.0";
|
||||
my $hpux_load_15_min="1.3.6.1.4.1.11.2.3.1.1.5.0";
|
||||
|
||||
# valid values
|
||||
my @valid_types = ("stand","netsc","netsl","as400","cisco","cata","nsc","fg","bc","nokia","hp","lp","hpux");
|
||||
# CPU OID array
|
||||
my %cpu_oid = ("netsc",$ns_cpu_idle,"as400",$as400_cpu,"bc",$bluecoat_cpu,"nokia",$nokia_cpu,"hp",$procurve_cpu,"lp",$linkproof_cpu);
|
||||
my %cpu_oid = ("netsc",$ns_cpu_idle,"as400",$as400_cpu,"bc",$bluecoat_cpu,"nokia",$nokia_cpu,"hp",$procurve_cpu,"lp",$linkproof_cpu,"fg",$fortigate_cpu);
|
||||
|
||||
# Globals
|
||||
|
||||
my $Version='1.2';
|
||||
|
||||
my $o_host = undef; # hostname
|
||||
my $o_community = undef; # community
|
||||
|
@ -93,38 +98,30 @@ my $o_port = 161; # port
|
|||
my $o_help= undef; # wan't some help ?
|
||||
my $o_verb= undef; # verbose mode
|
||||
my $o_version= undef; # print version
|
||||
my $o_check_type= "stand"; # check type : stand | netsc | netsl | as400 | cisco | bc | nokia | hp | lp
|
||||
# For backward compatibility
|
||||
my $o_linux= undef; # Check linux load instead of CPU
|
||||
my $o_linuxC= undef; # Check Net-SNMP CPU
|
||||
my $o_as400= undef; # Check for AS 400 load
|
||||
my $o_cisco= undef; # Check for Cisco CPU
|
||||
# check type : stand | netsc | netsl | as400 | cisco | cata | nsc | fg | bc | nokia | hp | lp | hpux
|
||||
my $o_check_type= "stand";
|
||||
# End compatibility
|
||||
my $o_warn= undef; # warning level
|
||||
my @o_warnL= undef; # warning levels for Linux Load or Cisco CPU
|
||||
my $o_crit= undef; # critical level
|
||||
my @o_critL= undef; # critical level for Linux Load or Cisco CPU
|
||||
my $o_timeout= 5; # Default 5s Timeout
|
||||
my $o_timeout= undef; # Timeout (Default 5)
|
||||
my $o_perf= undef; # Output performance data
|
||||
my $o_version2= undef; # use snmp v2c
|
||||
# SNMPv3 specific
|
||||
my $o_login= undef; # Login for snmpv3
|
||||
my $o_passwd= undef; # Pass for snmpv3
|
||||
# centreon specific
|
||||
my $o_step= undef;
|
||||
my $o_g= undef;
|
||||
my $o_S= undef;
|
||||
my $step= undef;
|
||||
my $rrd= undef;
|
||||
my $start= undef;
|
||||
my $ServiceId= undef;
|
||||
my $v3protocols=undef; # V3 protocol list.
|
||||
my $o_authproto='md5'; # Auth protocol
|
||||
my $o_privproto='des'; # Priv protocol
|
||||
my $o_privpass= undef; # priv password
|
||||
|
||||
# functions
|
||||
|
||||
sub p_version { print "check_snmp_load version : $Version\n"; }
|
||||
|
||||
sub print_usage {
|
||||
print "Usage: $0 [-v] -H <host> -C <snmp_community> [-2] | (-l login -x passwd) [-p <port>] -w <warn level> -c <crit level> -T=[stand|netsl|netsc|as400|cisco|bc|nokia|hp|lp] [-f] [-t <timeout>] [-V]\n";
|
||||
print "Usage: $0 [-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|hpux] [-f] [-t <timeout>] [-V]\n";
|
||||
}
|
||||
|
||||
sub isnnum { # Return true if arg is not a number
|
||||
|
@ -135,11 +132,11 @@ sub isnnum { # Return true if arg is not a number
|
|||
|
||||
sub help {
|
||||
print "\nSNMP Load & CPU Monitor for Nagios version ",$Version,"\n";
|
||||
print "(c)2004 to my cat Ratoune - Author : Patrick Proy\n\n";
|
||||
print "GPL licence, (c)2004-2007 Patrick Proy\n\n";
|
||||
print_usage();
|
||||
print <<EOT;
|
||||
-v, --verbose
|
||||
print extra debugging information
|
||||
print extra debugging information
|
||||
-h, --help
|
||||
print this help message
|
||||
-H, --hostname=HOST
|
||||
|
@ -148,43 +145,45 @@ sub help {
|
|||
community name for the host's SNMP agent (implies v1 protocol)
|
||||
-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
|
||||
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
|
||||
warning level for cpu in percent (on one minute)
|
||||
if -L switch then comma separated level for load-1,load-5,load-15
|
||||
if -I switch then comma separated level for cpu 5s,cpu 1m,cpu 5m
|
||||
1 value check : warning level for cpu in percent (on one minute)
|
||||
3 value check : comma separated level for load or cpu for 1min, 5min, 15min
|
||||
-c, --crit=INTEGER | INT,INT,INT
|
||||
critical level for cpu in percent (on one minute)
|
||||
if -L switch then comma separated level for load-1,load-5,load-15
|
||||
if -I switch then comma separated level for cpu 5s,cpu 1m,cpu 5m
|
||||
1 value check : critical level for cpu in percent (on one minute)
|
||||
3 value check : comma separated level for load or cpu for 1min, 5min, 15min
|
||||
-T, --type=stand|netsl|netsc|as400|cisco|bc|nokia|hp|lp
|
||||
CPU check :
|
||||
stand : standard MIBII (works with Windows),
|
||||
can handle multiple CPU.
|
||||
netsl : check linux load provided by Net SNMP
|
||||
netsc : check cpu usage given by net-snmp (100-idle)
|
||||
as400 : check as400 CPU usage
|
||||
cisco : check cisco CPU usage
|
||||
bc : check bluecoat CPU usage
|
||||
nokia : check nokia CPU usage
|
||||
hp : check HP procurve switch CPU usage
|
||||
lp : Linkproof CPU usage
|
||||
CPU check :
|
||||
stand : standard MIBII (works with Windows),
|
||||
can handle multiple CPU.
|
||||
netsl : linux load provided by Net SNMP (1,5 & 15 minutes values)
|
||||
netsc : cpu usage given by net-snmp (100-idle)
|
||||
as400 : as400 CPU usage
|
||||
cisco : Cisco CPU usage
|
||||
cata : Cisco catalyst CPU usage
|
||||
nsc : NetScreen CPU usage
|
||||
fg : Fortigate CPU usage
|
||||
bc : Bluecoat CPU usage
|
||||
nokia : Nokia CPU usage
|
||||
hp : HP procurve switch CPU usage
|
||||
lp : Linkproof CPU usage
|
||||
hpux : HP-UX load (1,5 & 15 minutes values)
|
||||
-f, --perfparse
|
||||
Perfparse compatible output
|
||||
-t, --timeout=INTEGER
|
||||
timeout for SNMP in seconds (Default: 5)
|
||||
-V, --version
|
||||
prints version number
|
||||
-L, --linux, -A, --as400, -I, --cisco, -N, --netsnmp
|
||||
These options are for backward compatibility (version<1.2)
|
||||
-g (--rrdgraph) Create a rrd base if necessary and add datas into this one
|
||||
--rrd_step Specifies the base interval in seconds with which data will be fed into the RRD (300 by default)
|
||||
-S (--ServiceId) centreon Service Id
|
||||
EOT
|
||||
}
|
||||
|
||||
|
@ -194,130 +193,146 @@ sub verb { my $t=shift; print $t,"\n" if defined($o_verb) ; }
|
|||
sub check_options {
|
||||
Getopt::Long::Configure ("bundling");
|
||||
GetOptions(
|
||||
'v' => \$o_verb, 'verbose' => \$o_verb,
|
||||
'v' => \$o_verb, 'verbose' => \$o_verb,
|
||||
'h' => \$o_help, 'help' => \$o_help,
|
||||
'H:s' => \$o_host, 'hostname:s' => \$o_host,
|
||||
'p:i' => \$o_port, 'port:i' => \$o_port,
|
||||
'C:s' => \$o_community, 'community:s' => \$o_community,
|
||||
'l:s' => \$o_login, 'login:s' => \$o_login,
|
||||
'x:s' => \$o_passwd, 'passwd:s' => \$o_passwd,
|
||||
'l:s' => \$o_login, 'login:s' => \$o_login,
|
||||
'x:s' => \$o_passwd, 'passwd:s' => \$o_passwd,
|
||||
'X:s' => \$o_privpass, 'privpass:s' => \$o_privpass,
|
||||
'L:s' => \$v3protocols, 'protocols:s' => \$v3protocols,
|
||||
't:i' => \$o_timeout, 'timeout:i' => \$o_timeout,
|
||||
'V' => \$o_version, 'version' => \$o_version,
|
||||
|
||||
'2' => \$o_version2, 'v2c' => \$o_version2,
|
||||
'V' => \$o_version, 'version' => \$o_version,
|
||||
'2' => \$o_version2, 'v2c' => \$o_version2,
|
||||
'c:s' => \$o_crit, 'critical:s' => \$o_crit,
|
||||
'w:s' => \$o_warn, 'warn:s' => \$o_warn,
|
||||
'f' => \$o_perf, 'perfparse' => \$o_perf,
|
||||
'T:s' => \$o_check_type, 'type:s' => \$o_check_type,
|
||||
# For backward compatibility
|
||||
'L' => \$o_linux, 'linux' => \$o_linux,
|
||||
'A' => \$o_as400, 'as400' => \$o_as400,
|
||||
'I' => \$o_cisco, 'cisco' => \$o_cisco,
|
||||
'N' => \$o_linuxC, 'netsnmp' => \$o_linuxC,
|
||||
# For centreon rrdtool graph
|
||||
"rrd_step:s" => \$o_step,
|
||||
"g" => \$o_g, "rrdgraph" => \$o_g,
|
||||
"S=s" => \$o_S, "ServiceId=s" => \$o_S
|
||||
);
|
||||
# For backward compat
|
||||
if (defined($o_linux)) { $o_check_type="netsl" }
|
||||
if (defined($o_linuxC)) { $o_check_type="netsc" }
|
||||
if (defined($o_as400)) { $o_check_type="as400"}
|
||||
if (defined($o_cisco)) { $o_check_type="cisco"}
|
||||
# TODO : check the -T option
|
||||
'T:s' => \$o_check_type, 'type:s' => \$o_check_type
|
||||
);
|
||||
# check the -T option
|
||||
my $T_option_valid=0;
|
||||
foreach (@valid_types) { if ($_ eq $o_check_type) {$T_option_valid=1} };
|
||||
if ( $T_option_valid == 0 )
|
||||
{print "Invalid check type (-T)!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
# Basic checks
|
||||
if (defined($o_timeout) && (isnnum($o_timeout) || ($o_timeout < 2) || ($o_timeout > 60)))
|
||||
{ print "Timeout must be >1 and <60 !\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if (!defined($o_timeout)) {$o_timeout=5;}
|
||||
if (defined ($o_help) ) { help(); exit $ERRORS{"UNKNOWN"}};
|
||||
if (defined($o_version)) { p_version(); exit $ERRORS{"UNKNOWN"}};
|
||||
if ( ! defined($o_host) ) # check host and filter
|
||||
{ print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if ( ! defined($o_host) ) # check host and filter
|
||||
{ print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
# check snmp information
|
||||
if ( !defined($o_community) && (!defined($o_login) || !defined($o_passwd)) )
|
||||
{ print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
{ print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if ((defined($o_login) || defined($o_passwd)) && (defined($o_community) || defined($o_version2)) )
|
||||
{ print "Can't mix snmp v1,2c,3 protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if (defined ($v3protocols)) {
|
||||
if (!defined($o_login)) { print "Put snmp V3 login info with protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
my @v3proto=split(/,/,$v3protocols);
|
||||
if ((defined ($v3proto[0])) && ($v3proto[0] ne "")) {$o_authproto=$v3proto[0]; } # Auth protocol
|
||||
if (defined ($v3proto[1])) {$o_privproto=$v3proto[1]; } # Priv protocol
|
||||
if ((defined ($v3proto[1])) && (!defined($o_privpass))) {
|
||||
print "Put snmp V3 priv login info with priv protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
}
|
||||
# Check warnings and critical
|
||||
if (!defined($o_warn) || !defined($o_crit))
|
||||
{ print "put warning and critical info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
{ print "put warning and critical info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
# Get rid of % sign
|
||||
$o_warn =~ s/\%//g;
|
||||
$o_warn =~ s/\%//g;
|
||||
$o_crit =~ s/\%//g;
|
||||
# Check for multiple warning and crit in case of -L
|
||||
if (($o_warn =~ /,/) || ($o_crit =~ /,/)) {
|
||||
if (($o_check_type ne "netsl") && ($o_check_type ne "cisco")) { print "Multiple warning without -L or -I switch\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
@o_warnL=split(/,/ , $o_warn);
|
||||
@o_critL=split(/,/ , $o_crit);
|
||||
if (($#o_warnL != 2) || ($#o_critL != 2))
|
||||
{ print "3 warnings and critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
for (my $i=0;$i<3;$i++) {
|
||||
if ( isnnum($o_warnL[$i]) || isnnum($o_critL[$i]))
|
||||
{ print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if ($o_warnL[$i] > $o_critL[$i])
|
||||
{ print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
}
|
||||
} else {
|
||||
if (($o_check_type eq "netsl") || ($o_check_type eq "cisco")) { print "Multiple warn and crit levels needed with -L or -I switch\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if ( isnnum($o_warn) || isnnum($o_crit) )
|
||||
{ print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if ($o_warn > $o_crit)
|
||||
if (($o_check_type eq "netsl") || ($o_check_type eq "cisco") || ($o_check_type eq "cata") ||
|
||||
($o_check_type eq "nsc") || ($o_check_type eq "hpux")) {
|
||||
@o_warnL=split(/,/ , $o_warn);
|
||||
@o_critL=split(/,/ , $o_crit);
|
||||
if (($#o_warnL != 2) || ($#o_critL != 2))
|
||||
{ print "3 warnings and critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
for (my $i=0;$i<3;$i++) {
|
||||
if ( isnnum($o_warnL[$i]) || isnnum($o_critL[$i]))
|
||||
{ print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if ($o_warnL[$i] > $o_critL[$i])
|
||||
{ print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
}
|
||||
} else {
|
||||
if (($o_warn =~ /,/) || ($o_crit =~ /,/)) {
|
||||
{ print "Multiple warning/critical levels not available for this check\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
}
|
||||
if ( isnnum($o_warn) || isnnum($o_crit) )
|
||||
{ print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if ($o_warn > $o_crit)
|
||||
{ print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
}
|
||||
|
||||
###### centreon #######
|
||||
|
||||
if (!defined($o_S)) { $o_S="1_1" }
|
||||
$ServiceId = is_valid_serviceid($o_S);
|
||||
|
||||
if (!defined($o_step)) { $o_step="300" }
|
||||
$step = $1 if ($o_step =~ /(\d+)/);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
########## MAIN #######
|
||||
|
||||
check_options();
|
||||
|
||||
$rrd = $pathtorrdbase.$ServiceId.".rrd";
|
||||
$start=time;
|
||||
|
||||
# Check gobal timeout if snmp screws up
|
||||
if (defined($TIMEOUT)) {
|
||||
verb("Alarm at $TIMEOUT + 5");
|
||||
alarm($TIMEOUT+5);
|
||||
} else {
|
||||
verb("no timeout defined : $o_timeout + 10");
|
||||
verb("no global timeout defined : $o_timeout + 10");
|
||||
alarm ($o_timeout+10);
|
||||
}
|
||||
|
||||
$SIG{'ALRM'} = sub {
|
||||
print "No answer from host\n";
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
};
|
||||
|
||||
# Connect to host
|
||||
my ($session,$error);
|
||||
if ( defined($o_login) && defined($o_passwd)) {
|
||||
# SNMPv3 login
|
||||
verb("SNMPv3 login");
|
||||
($session, $error) = Net::SNMP->session(
|
||||
if (!defined ($o_privpass)) {
|
||||
verb("SNMPv3 AuthNoPriv login : $o_login, $o_authproto");
|
||||
($session, $error) = Net::SNMP->session(
|
||||
-hostname => $o_host,
|
||||
-version => '3',
|
||||
-username => $o_login,
|
||||
-authpassword => $o_passwd,
|
||||
-authprotocol => 'md5',
|
||||
-privpassword => $o_passwd,
|
||||
-authprotocol => $o_authproto,
|
||||
-timeout => $o_timeout
|
||||
);
|
||||
} else {
|
||||
if (defined ($o_version2)) {
|
||||
# SNMPv2 Login
|
||||
($session, $error) = Net::SNMP->session(
|
||||
-hostname => $o_host,
|
||||
-version => 2,
|
||||
-community => $o_community,
|
||||
-port => $o_port,
|
||||
-timeout => $o_timeout
|
||||
);
|
||||
} else {
|
||||
# SNMPV1 login
|
||||
);
|
||||
} else {
|
||||
verb("SNMPv3 AuthPriv login : $o_login, $o_authproto, $o_privproto");
|
||||
($session, $error) = Net::SNMP->session(
|
||||
-hostname => $o_host,
|
||||
-community => $o_community,
|
||||
-port => $o_port,
|
||||
-timeout => $o_timeout
|
||||
-hostname => $o_host,
|
||||
-version => '3',
|
||||
-username => $o_login,
|
||||
-authpassword => $o_passwd,
|
||||
-authprotocol => $o_authproto,
|
||||
-privpassword => $o_privpass,
|
||||
-privprotocol => $o_privproto,
|
||||
-timeout => $o_timeout
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (defined ($o_version2)) {
|
||||
# SNMPv2 Login
|
||||
verb("SNMP v2c login");
|
||||
($session, $error) = Net::SNMP->session(
|
||||
-hostname => $o_host,
|
||||
-version => 2,
|
||||
-community => $o_community,
|
||||
-port => $o_port,
|
||||
-timeout => $o_timeout
|
||||
);
|
||||
} else {
|
||||
# SNMPV1 login
|
||||
verb("SNMP v1 login");
|
||||
($session, $error) = Net::SNMP->session(
|
||||
-hostname => $o_host,
|
||||
-community => $o_community,
|
||||
-port => $o_port,
|
||||
-timeout => $o_timeout
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!defined($session)) {
|
||||
printf("ERROR opening session: %s.\n", $error);
|
||||
|
@ -331,10 +346,10 @@ if ($o_check_type eq "netsl") {
|
|||
|
||||
verb("Checking linux load");
|
||||
# Get load table
|
||||
my $resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_table($linload_table)
|
||||
: $session->get_table(Baseoid => $linload_table);
|
||||
|
||||
my $resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_table($linload_table)
|
||||
: $session->get_table(Baseoid => $linload_table);
|
||||
|
||||
if (!defined($resultat)) {
|
||||
printf("ERROR: Description table : %s.\n", $session->error);
|
||||
$session->close;
|
||||
|
@ -345,30 +360,24 @@ $session->close;
|
|||
my @load = undef;
|
||||
my @iload = undef;
|
||||
my @oid=undef;
|
||||
my $exist=0;
|
||||
foreach my $key ( keys %$resultat) {
|
||||
verb("OID : $key, Desc : $$resultat{$key}");
|
||||
if ( $key =~ /$linload_name/ ) {
|
||||
if ( $key =~ /$linload_name/ ) {
|
||||
@oid=split (/\./,$key);
|
||||
$iload[0]= pop(@oid) if ($$resultat{$key} eq "Load-1");
|
||||
$iload[1]= pop(@oid) if ($$resultat{$key} eq "Load-5");
|
||||
$iload[2]= pop(@oid) if ($$resultat{$key} eq "Load-15");
|
||||
$exist=1
|
||||
}
|
||||
}
|
||||
|
||||
for (my $i=0;$i<3;$i++) { $load[$i] = $$resultat{$linload_load . "." . $iload[$i]}};
|
||||
|
||||
##
|
||||
## RRD management
|
||||
##
|
||||
|
||||
if ($o_g) {
|
||||
$start=time;
|
||||
if (! -e $rrd) {
|
||||
create_rrd($rrd,3,$start,$step,0,"U","GAUGE");
|
||||
}
|
||||
update_rrd($rrd,$start, $load[0] ,$load[1], $load[2]);
|
||||
if ($exist == 0) {
|
||||
print "Can't find snmp information on load : UNKNOWN\n";
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
|
||||
for (my $i=0;$i<3;$i++) { $load[$i] = $$resultat{$linload_load . "." . $iload[$i]}};
|
||||
|
||||
print "Load : $load[0] $load[1] $load[2] :";
|
||||
|
||||
|
@ -379,17 +388,17 @@ for (my $i=0;$i<3;$i++) {
|
|||
$exit_val=$ERRORS{"CRITICAL"};
|
||||
}
|
||||
if ( $load[$i] > $o_warnL[$i] ) {
|
||||
# output warn error only if no critical was found
|
||||
# output warn error only if no critical was found
|
||||
if ($exit_val eq $ERRORS{"OK"}) {
|
||||
print " $load[$i] > $o_warnL[$i] : WARNING";
|
||||
print " $load[$i] > $o_warnL[$i] : WARNING";
|
||||
$exit_val=$ERRORS{"WARNING"};
|
||||
}
|
||||
}
|
||||
}
|
||||
print " OK" if ($exit_val eq $ERRORS{"OK"});
|
||||
if (defined($o_perf)) {
|
||||
print " | load_1_min=$load[0];$o_warnL[0];$o_critL[0],";
|
||||
print "load_5_min=$load[1];$o_warnL[1];$o_critL[1],";
|
||||
if (defined($o_perf)) {
|
||||
print " | load_1_min=$load[0];$o_warnL[0];$o_critL[0] ";
|
||||
print "load_5_min=$load[1];$o_warnL[1];$o_critL[1] ";
|
||||
print "load_15_min=$load[2];$o_warnL[2];$o_critL[2]\n";
|
||||
} else {
|
||||
print "\n";
|
||||
|
@ -402,8 +411,8 @@ exit $exit_val;
|
|||
if ($o_check_type eq "cisco") {
|
||||
my @oidlists = ($cisco_cpu_5m, $cisco_cpu_1m, $cisco_cpu_5s);
|
||||
my $resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_request(@oidlists)
|
||||
: $session->get_request(-varbindlist => \@oidlists);
|
||||
$session->get_request(@oidlists)
|
||||
: $session->get_request(-varbindlist => \@oidlists);
|
||||
|
||||
if (!defined($resultat)) {
|
||||
printf("ERROR: Description table : %s.\n", $session->error);
|
||||
|
@ -424,17 +433,60 @@ $load[0]=$$resultat{$cisco_cpu_5s};
|
|||
$load[1]=$$resultat{$cisco_cpu_1m};
|
||||
$load[2]=$$resultat{$cisco_cpu_5m};
|
||||
|
||||
##
|
||||
## RRD management
|
||||
##
|
||||
print "CPU : $load[0] $load[1] $load[2] :";
|
||||
|
||||
if ($o_g) {
|
||||
$start=time;
|
||||
if (! -e $rrd) {
|
||||
create_rrd($rrd,3,$start,$step,0,"U","GAUGE");
|
||||
$exit_val=$ERRORS{"OK"};
|
||||
for (my $i=0;$i<3;$i++) {
|
||||
if ( $load[$i] > $o_critL[$i] ) {
|
||||
print " $load[$i] > $o_critL[$i] : CRITICAL";
|
||||
$exit_val=$ERRORS{"CRITICAL"};
|
||||
}
|
||||
if ( $load[$i] > $o_warnL[$i] ) {
|
||||
# output warn error only if no critical was found
|
||||
if ($exit_val eq $ERRORS{"OK"}) {
|
||||
print " $load[$i] > $o_warnL[$i] : WARNING";
|
||||
$exit_val=$ERRORS{"WARNING"};
|
||||
}
|
||||
update_rrd($rrd,$start,$load[0] ,$load[1], $load[2]);
|
||||
}
|
||||
}
|
||||
print " OK" if ($exit_val eq $ERRORS{"OK"});
|
||||
if (defined($o_perf)) {
|
||||
print " | load_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] ";
|
||||
print "load_1_min=$load[1]%;$o_warnL[1];$o_critL[1] ";
|
||||
print "load_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n";
|
||||
} else {
|
||||
print "\n";
|
||||
}
|
||||
|
||||
exit $exit_val;
|
||||
}
|
||||
|
||||
############## Cisco Catalyst CPU check ################
|
||||
|
||||
if ($o_check_type eq "cata") {
|
||||
my @oidlists = ($ciscocata_cpu_5m, $ciscocata_cpu_1m, $ciscocata_cpu_5s);
|
||||
my $resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_request(@oidlists)
|
||||
: $session->get_request(-varbindlist => \@oidlists);
|
||||
|
||||
if (!defined($resultat)) {
|
||||
printf("ERROR: Description table : %s.\n", $session->error);
|
||||
$session->close;
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
|
||||
$session->close;
|
||||
|
||||
if (!defined ($$resultat{$ciscocata_cpu_5s})) {
|
||||
print "No CPU information : UNKNOWN\n";
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
|
||||
my @load = undef;
|
||||
|
||||
$load[0]=$$resultat{$ciscocata_cpu_5s};
|
||||
$load[1]=$$resultat{$ciscocata_cpu_1m};
|
||||
$load[2]=$$resultat{$ciscocata_cpu_5m};
|
||||
|
||||
print "CPU : $load[0] $load[1] $load[2] :";
|
||||
|
||||
|
@ -447,15 +499,15 @@ for (my $i=0;$i<3;$i++) {
|
|||
if ( $load[$i] > $o_warnL[$i] ) {
|
||||
# output warn error only if no critical was found
|
||||
if ($exit_val eq $ERRORS{"OK"}) {
|
||||
print " $load[$i] > $o_warnL[$i] : WARNING";
|
||||
print " $load[$i] > $o_warnL[$i] : WARNING";
|
||||
$exit_val=$ERRORS{"WARNING"};
|
||||
}
|
||||
}
|
||||
}
|
||||
print " OK" if ($exit_val eq $ERRORS{"OK"});
|
||||
if (defined($o_perf)) {
|
||||
print " | load_5_sec=$load[0]%;$o_warnL[0];$o_critL[0],";
|
||||
print "load_1_min=$load[1]%;$o_warnL[1];$o_critL[1],";
|
||||
print " | load_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] ";
|
||||
print "load_1_min=$load[1]%;$o_warnL[1];$o_critL[1] ";
|
||||
print "load_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n";
|
||||
} else {
|
||||
print "\n";
|
||||
|
@ -464,15 +516,70 @@ if (defined($o_perf)) {
|
|||
exit $exit_val;
|
||||
}
|
||||
|
||||
################## CPU for : AS/400 , Netsnmp, HP, Bluecoat, linkproof ###########
|
||||
if ( $o_check_type =~ /netsc|as400|bc|nokia|hp|lp/ ) {
|
||||
############## Netscreen CPU check ################
|
||||
|
||||
if ($o_check_type eq "nsc") {
|
||||
my @oidlists = ($nsc_cpu_5m, $nsc_cpu_1m, $nsc_cpu_5s);
|
||||
my $resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_request(@oidlists)
|
||||
: $session->get_request(-varbindlist => \@oidlists);
|
||||
|
||||
if (!defined($resultat)) {
|
||||
printf("ERROR: Description table : %s.\n", $session->error);
|
||||
$session->close;
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
|
||||
$session->close;
|
||||
|
||||
if (!defined ($$resultat{$nsc_cpu_5s})) {
|
||||
print "No CPU information : UNKNOWN\n";
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
|
||||
my @load = undef;
|
||||
|
||||
$load[0]=$$resultat{$nsc_cpu_5s};
|
||||
$load[1]=$$resultat{$nsc_cpu_1m};
|
||||
$load[2]=$$resultat{$nsc_cpu_5m};
|
||||
|
||||
print "CPU : $load[0] $load[1] $load[2] :";
|
||||
|
||||
$exit_val=$ERRORS{"OK"};
|
||||
for (my $i=0;$i<3;$i++) {
|
||||
if ( $load[$i] > $o_critL[$i] ) {
|
||||
print " $load[$i] > $o_critL[$i] : CRITICAL";
|
||||
$exit_val=$ERRORS{"CRITICAL"};
|
||||
}
|
||||
if ( $load[$i] > $o_warnL[$i] ) {
|
||||
# output warn error only if no critical was found
|
||||
if ($exit_val eq $ERRORS{"OK"}) {
|
||||
print " $load[$i] > $o_warnL[$i] : WARNING";
|
||||
$exit_val=$ERRORS{"WARNING"};
|
||||
}
|
||||
}
|
||||
}
|
||||
print " OK" if ($exit_val eq $ERRORS{"OK"});
|
||||
if (defined($o_perf)) {
|
||||
print " | cpu_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] ";
|
||||
print "cpu_1_min=$load[1]%;$o_warnL[1];$o_critL[1] ";
|
||||
print "cpu_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n";
|
||||
} else {
|
||||
print "\n";
|
||||
}
|
||||
|
||||
exit $exit_val;
|
||||
}
|
||||
|
||||
################## CPU for : AS/400 , Netsnmp, HP, Bluecoat, linkproof, fortigate ###########
|
||||
if ( $o_check_type =~ /netsc|as400|bc|nokia|^hp$|lp|fg/ ) {
|
||||
|
||||
# Get load table
|
||||
my @oidlist = $cpu_oid{$o_check_type};
|
||||
my @oidlist = $cpu_oid{$o_check_type};
|
||||
verb("Checking OID : @oidlist");
|
||||
my $resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_request(@oidlist)
|
||||
: $session->get_request(-varbindlist => \@oidlist);
|
||||
my $resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_request(@oidlist)
|
||||
: $session->get_request(-varbindlist => \@oidlist);
|
||||
if (!defined($resultat)) {
|
||||
printf("ERROR: Description table : %s.\n", $session->error);
|
||||
$session->close;
|
||||
|
@ -490,20 +597,7 @@ verb("OID returned $load");
|
|||
# for AS400, divide by 100
|
||||
if ($o_check_type eq "as400") {$load /= 100; };
|
||||
# for Net-snmp : oid returned idle time so load = 100-idle.
|
||||
if ($o_check_type eq "netsc") {$load = 100 - $load; };
|
||||
|
||||
##
|
||||
## RRD management
|
||||
##
|
||||
|
||||
if ($o_g) {
|
||||
$start=time;
|
||||
if (! -e $rrd) {
|
||||
create_rrd($rrd,1,$start,$step,0,"U","GAUGE");
|
||||
}
|
||||
update_rrd($rrd,$start,$load);
|
||||
}
|
||||
|
||||
if ($o_check_type eq "netsc") {$load = 100 - $load; };
|
||||
|
||||
printf("CPU used %.1f%% (",$load);
|
||||
|
||||
|
@ -525,11 +619,68 @@ exit $exit_val;
|
|||
|
||||
}
|
||||
|
||||
##### Checking hpux load
|
||||
if ($o_check_type eq "hpux") {
|
||||
|
||||
verb("Checking hpux load");
|
||||
|
||||
my @oidlists = ($hpux_load_1_min, $hpux_load_5_min, $hpux_load_15_min);
|
||||
my $resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_request(@oidlists)
|
||||
: $session->get_request(-varbindlist => \@oidlists);
|
||||
|
||||
if (!defined($resultat)) {
|
||||
printf("ERROR: Load table : %s.\n", $session->error);
|
||||
$session->close;
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
|
||||
$session->close;
|
||||
|
||||
if (!defined ($$resultat{$hpux_load_1_min})) {
|
||||
print "No Load information : UNKNOWN\n";
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
|
||||
my @load = undef;
|
||||
|
||||
$load[0]=$$resultat{$hpux_load_1_min}/100;
|
||||
$load[1]=$$resultat{$hpux_load_5_min}/100;
|
||||
$load[2]=$$resultat{$hpux_load_15_min}/100;
|
||||
|
||||
print "Load : $load[0] $load[1] $load[2] :";
|
||||
|
||||
$exit_val=$ERRORS{"OK"};
|
||||
for (my $i=0;$i<3;$i++) {
|
||||
if ( $load[$i] > $o_critL[$i] ) {
|
||||
print " $load[$i] > $o_critL[$i] : CRITICAL";
|
||||
$exit_val=$ERRORS{"CRITICAL"};
|
||||
}
|
||||
if ( $load[$i] > $o_warnL[$i] ) {
|
||||
# output warn error only if no critical was found
|
||||
if ($exit_val eq $ERRORS{"OK"}) {
|
||||
print " $load[$i] > $o_warnL[$i] : WARNING";
|
||||
$exit_val=$ERRORS{"WARNING"};
|
||||
}
|
||||
}
|
||||
}
|
||||
print " OK" if ($exit_val eq $ERRORS{"OK"});
|
||||
if (defined($o_perf)) {
|
||||
print " | load_1_min=$load[0]%;$o_warnL[0];$o_critL[0] ";
|
||||
print "load_5_min=$load[1]%;$o_warnL[1];$o_critL[1] ";
|
||||
print "load_15_min=$load[2]%;$o_warnL[2];$o_critL[2]\n";
|
||||
} else {
|
||||
print "\n";
|
||||
}
|
||||
|
||||
exit $exit_val;
|
||||
}
|
||||
|
||||
########## Standard cpu usage check ############
|
||||
# Get desctiption table
|
||||
my $resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_table($base_proc)
|
||||
: $session->get_table(Baseoid => $base_proc);
|
||||
$session->get_table($base_proc)
|
||||
: $session->get_table(Baseoid => $base_proc);
|
||||
|
||||
if (!defined($resultat)) {
|
||||
printf("ERROR: Description table : %s.\n", $session->error);
|
||||
|
@ -555,32 +706,20 @@ if ($ncpu==0) {
|
|||
|
||||
$cpu_used /= $ncpu;
|
||||
|
||||
##
|
||||
## RRD management
|
||||
##
|
||||
|
||||
if ($o_g) {
|
||||
$start=time;
|
||||
if (! -e $rrd) {
|
||||
create_rrd($rrd,1,$start,$step,0,"U","GAUGE");
|
||||
}
|
||||
update_rrd($rrd,$start,$cpu_used);
|
||||
}
|
||||
|
||||
print "$ncpu CPU, ", $ncpu==1 ? "load" : "average load";
|
||||
printf(" %.1f",$cpu_used);
|
||||
printf(" %.1f%%",$cpu_used);
|
||||
$exit_val=$ERRORS{"OK"};
|
||||
|
||||
if ($cpu_used > $o_crit) {
|
||||
print " > $o_crit : CRITICAL";
|
||||
print " > $o_crit% : CRITICAL";
|
||||
$exit_val=$ERRORS{"CRITICAL"};
|
||||
} else {
|
||||
if ($cpu_used > $o_warn) {
|
||||
print " > $o_warn : WARNING";
|
||||
print " > $o_warn% : WARNING";
|
||||
$exit_val=$ERRORS{"WARNING"};
|
||||
}
|
||||
}
|
||||
print " < $o_warn : OK" if ($exit_val eq $ERRORS{"OK"});
|
||||
print " < $o_warn% : OK" if ($exit_val eq $ERRORS{"OK"});
|
||||
(defined($o_perf)) ?
|
||||
print " | cpu_prct_used=$cpu_used%;$o_warn;$o_crit\n"
|
||||
: print "\n";
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
#!/usr/bin/perl -w
|
||||
#!/usr/bin/perl -w
|
||||
############################## check_snmp_mem ##############
|
||||
# Version : 0.9
|
||||
# Date : Jul 20 2005
|
||||
# Author : Patrick Proy (patrick at proy.org)
|
||||
# Version : 1.1
|
||||
# Date : Jul 09 2006
|
||||
# Author : Patrick Proy (nagios at proy.org)
|
||||
# Help : http://www.manubulon.com/nagios/
|
||||
# Licence : GPL - http://www.fsf.org/licenses/gpl.txt
|
||||
# TODO : snmpv3
|
||||
# Contrib : Jan Jungmann
|
||||
# TODO :
|
||||
#################################################################
|
||||
#
|
||||
# Help : ./check_snmp_mem.pl -h
|
||||
|
@ -17,41 +18,29 @@ use Getopt::Long;
|
|||
|
||||
# Nagios specific
|
||||
|
||||
use lib "@NAGIOS_PLUGINS@";
|
||||
use lib "/usr/local/nagios/libexec";
|
||||
use utils qw(%ERRORS $TIMEOUT);
|
||||
#my $TIMEOUT = 15;
|
||||
#my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
|
||||
|
||||
# Oreon specific
|
||||
|
||||
if (eval "require centreon" ) {
|
||||
use centreon qw(get_parameters create_rrd update_rrd &is_valid_serviceid);
|
||||
use vars qw($VERSION %centreon);
|
||||
%centreon=get_parameters();
|
||||
} else {
|
||||
print "Unable to load centreon perl module\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
my $pathtorrdbase = $centreon{GLOBAL}{DIR_RRDTOOL};
|
||||
|
||||
# SNMP Datas
|
||||
|
||||
# Net-snmp memory
|
||||
# Net-snmp memory
|
||||
|
||||
my $nets_ram_free = "1.3.6.1.4.1.2021.4.6.0"; # Real memory free
|
||||
my $nets_ram_total = "1.3.6.1.4.1.2021.4.5.0"; # Real memory total
|
||||
my $nets_ram_cache = "1.3.6.1.4.1.2021.4.15.0"; # Real memory cached
|
||||
my $nets_swap_free = "1.3.6.1.4.1.2021.4.4.0"; # swap memory free
|
||||
my $nets_swap_total = "1.3.6.1.4.1.2021.4.3.0"; # Swap memory total
|
||||
my @nets_oids = ($nets_ram_free,$nets_ram_total,$nets_swap_free,$nets_swap_total);
|
||||
my @nets_oids = ($nets_ram_free,$nets_ram_total,$nets_swap_free,$nets_swap_total,$nets_ram_cache);
|
||||
|
||||
# Cisco
|
||||
# Cisco
|
||||
|
||||
my $cisco_mem_pool = "1.3.6.1.4.1.9.9.48.1.1.1"; # Cisco memory pool
|
||||
my $cisco_index = "1.3.6.1.4.1.9.9.48.1.1.1.2"; # memory pool name and index
|
||||
my $cisco_valid = "1.3.6.1.4.1.9.9.48.1.1.1.4"; # Valid memory if 1
|
||||
my $cisco_used = "1.3.6.1.4.1.9.9.48.1.1.1.5"; # Used memory
|
||||
my $cisco_free = "1.3.6.1.4.1.9.9.48.1.1.1.6"; # Used memory
|
||||
my $cisco_free = "1.3.6.1.4.1.9.9.48.1.1.1.6"; # Free memory
|
||||
# .1 : type, .2 : name, .3 : alternate, .4 : valid, .5 : used, .6 : free, .7 : max free
|
||||
|
||||
# HP Procurve
|
||||
|
@ -62,7 +51,7 @@ my $hp_mem_total = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.5"; # Total Bytes
|
|||
my $hp_mem_free = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.6"; # Free Bytes
|
||||
my $hp_mem_free_seg = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.3"; # Free segments
|
||||
|
||||
# AS/400
|
||||
# AS/400
|
||||
|
||||
# Windows NT/2K/(XP?)
|
||||
|
||||
|
@ -71,7 +60,7 @@ my $hp_mem_free_seg = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.3"; # Free segments
|
|||
|
||||
# Globals
|
||||
|
||||
my $Version='0.9';
|
||||
my $Version='1.1';
|
||||
|
||||
my $o_host = undef; # hostname
|
||||
my $o_community = undef; # community
|
||||
|
@ -89,28 +78,23 @@ my $o_crit= undef; # Critical level option
|
|||
my $o_critR= undef; # critical level for Real memory
|
||||
my $o_critS= undef; # critical level for swap
|
||||
my $o_perf= undef; # Performance data option
|
||||
my $o_timeout= 5; # Default 5s Timeout
|
||||
my $o_cache= undef; # Include cached memory as used memory
|
||||
my $o_timeout= undef; # Timeout (Default 5)
|
||||
my $o_version2= undef; # use snmp v2c
|
||||
# SNMPv3 specific
|
||||
my $o_login= undef; # Login for snmpv3
|
||||
my $o_passwd= undef; # Pass for snmpv3
|
||||
|
||||
# Oreon specific
|
||||
my $o_step= undef;
|
||||
my $o_g= undef;
|
||||
my $o_S= undef;
|
||||
my $step= undef;
|
||||
my $rrd= undef;
|
||||
my $start= undef;
|
||||
my $ServiceId= undef;
|
||||
|
||||
my $v3protocols=undef; # V3 protocol list.
|
||||
my $o_authproto='md5'; # Auth protocol
|
||||
my $o_privproto='des'; # Priv protocol
|
||||
my $o_privpass= undef; # priv password
|
||||
|
||||
# functions
|
||||
|
||||
sub p_version { print "check_snmp_mem version : $Version\n"; }
|
||||
|
||||
sub print_usage {
|
||||
print "Usage: $0 [-v] -H <host> -C <snmp_community> [-2] | (-l login -x passwd) [-p <port>] -w <warn level> -c <crit level> [-I|-N|-E] [-f] [-t <timeout>] [-V]\n";
|
||||
print "Usage: $0 [-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]\n";
|
||||
}
|
||||
|
||||
sub isnnum { # Return true if arg is not a number
|
||||
|
@ -125,7 +109,7 @@ sub round ($$) {
|
|||
|
||||
sub help {
|
||||
print "\nSNMP Memory Monitor for Nagios version ",$Version,"\n";
|
||||
print "(c)2004 to my cat Ratoune - Author: Patrick Proy\n\n";
|
||||
print "(c)2004-2006 to my cat Ratoune - Author: Patrick Proy\n\n";
|
||||
print_usage();
|
||||
print <<EOT;
|
||||
-v, --verbose
|
||||
|
@ -138,22 +122,28 @@ sub help {
|
|||
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
|
||||
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
|
||||
warning level for memory in percent (0 for no checks)
|
||||
Default (-N switch) : comma separated level for Real Memory and Swap
|
||||
-I switch : warning level
|
||||
-c, --crit=INTEGER | INT,INT
|
||||
critical level for memory in percent (0 for no checks)
|
||||
Default (-N switch) : comma separated level for Real Memory and Swap
|
||||
Default (-N switch) : comma separated level for Real Memory and Swap
|
||||
-I switch : critical level
|
||||
-N, --netsnmp (default)
|
||||
check linux memory & swap provided by Net SNMP
|
||||
check linux memory & swap provided by Net SNMP
|
||||
-m, --memcache
|
||||
include cached memory in used memory (only with Net-SNMP)
|
||||
-I, --cisco
|
||||
check cisco memory (sum of all memory pools)
|
||||
-E, --hp
|
||||
|
@ -164,9 +154,6 @@ sub help {
|
|||
timeout for SNMP in seconds (Default: 5)
|
||||
-V, --version
|
||||
prints version number
|
||||
-g (--rrdgraph) Create a rrd base if necessary and add datas into this one
|
||||
--rrd_step Specifies the base interval in seconds with which data will be fed into the RRD (300 by default)
|
||||
-S (--ServiceId) Oreon Service Id
|
||||
EOT
|
||||
}
|
||||
|
||||
|
@ -181,7 +168,7 @@ $SIG{'ALRM'} = sub {
|
|||
|
||||
sub check_options {
|
||||
Getopt::Long::Configure ("bundling");
|
||||
GetOptions(
|
||||
GetOptions(
|
||||
'v' => \$o_verb, 'verbose' => \$o_verb,
|
||||
'h' => \$o_help, 'help' => \$o_help,
|
||||
'H:s' => \$o_host, 'hostname:s' => \$o_host,
|
||||
|
@ -189,7 +176,9 @@ sub check_options {
|
|||
'C:s' => \$o_community, 'community:s' => \$o_community,
|
||||
'l:s' => \$o_login, 'login:s' => \$o_login,
|
||||
'x:s' => \$o_passwd, 'passwd:s' => \$o_passwd,
|
||||
't:i' => \$o_timeout, 'timeout:i' => \$o_timeout,
|
||||
'X:s' => \$o_privpass, 'privpass:s' => \$o_privpass,
|
||||
'L:s' => \$v3protocols, 'protocols:s' => \$v3protocols,
|
||||
't:i' => \$o_timeout, 'timeout:i' => \$o_timeout,
|
||||
'V' => \$o_version, 'version' => \$o_version,
|
||||
'I' => \$o_cisco, 'cisco' => \$o_cisco,
|
||||
'N' => \$o_netsnmp, 'netsnmp' => \$o_netsnmp,
|
||||
|
@ -197,40 +186,50 @@ sub check_options {
|
|||
'2' => \$o_version2, 'v2c' => \$o_version2,
|
||||
'c:s' => \$o_crit, 'critical:s' => \$o_crit,
|
||||
'w:s' => \$o_warn, 'warn:s' => \$o_warn,
|
||||
'f' => \$o_perf, 'perfdata' => \$o_perf,
|
||||
# For Oreon rrdtool graph
|
||||
"rrd_step:s" => \$o_step,
|
||||
"g" => \$o_g, "rrdgraph" => \$o_g,
|
||||
"S=s" => \$o_S, "ServiceId=s" => \$o_S
|
||||
'm' => \$o_cache, 'memcache' => \$o_cache,
|
||||
'f' => \$o_perf, 'perfdata' => \$o_perf
|
||||
);
|
||||
if (defined ($o_help) ) { help(); exit $ERRORS{"UNKNOWN"}};
|
||||
if (defined($o_version)) { p_version(); exit $ERRORS{"UNKNOWN"}};
|
||||
if ( ! defined($o_host) ) # check host and filter
|
||||
if ( ! defined($o_host) ) # check host and filter
|
||||
{ print "No host defined!\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
# check snmp information
|
||||
if ( !defined($o_community) && (!defined($o_login) || !defined($o_passwd)) )
|
||||
{ print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
#Check Warning and crit are present
|
||||
{ print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if ((defined($o_login) || defined($o_passwd)) && (defined($o_community) || defined($o_version2)) )
|
||||
{ print "Can't mix snmp v1,2c,3 protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if (defined ($v3protocols)) {
|
||||
if (!defined($o_login)) { print "Put snmp V3 login info with protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
my @v3proto=split(/,/,$v3protocols);
|
||||
if ((defined ($v3proto[0])) && ($v3proto[0] ne "")) {$o_authproto=$v3proto[0]; } # Auth protocol
|
||||
if (defined ($v3proto[1])) {$o_privproto=$v3proto[1]; } # Priv protocol
|
||||
if ((defined ($v3proto[1])) && (!defined($o_privpass))) {
|
||||
print "Put snmp V3 priv login info with priv protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
}
|
||||
if (defined($o_timeout) && (isnnum($o_timeout) || ($o_timeout < 2) || ($o_timeout > 60)))
|
||||
{ print "Timeout must be >1 and <60 !\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
if (!defined($o_timeout)) {$o_timeout=5;}
|
||||
#Check Warning and crit are present
|
||||
if ( ! defined($o_warn) || ! defined($o_crit))
|
||||
{ print "Put warning and critical values!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
# Get rid of % sign
|
||||
$o_warn =~ s/\%//g;
|
||||
$o_warn =~ s/\%//g;
|
||||
$o_crit =~ s/\%//g;
|
||||
# if -N or -E switch , undef $o_netsnmp
|
||||
if (defined($o_cisco) || defined($o_hp) ) {
|
||||
$o_netsnmp=undef;
|
||||
if ( isnnum($o_warn) || isnnum($o_crit))
|
||||
if ( isnnum($o_warn) || isnnum($o_crit))
|
||||
{ print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"} }
|
||||
if ( ($o_crit != 0) && ($o_warn > $o_crit) )
|
||||
if ( ($o_crit != 0) && ($o_warn > $o_crit) )
|
||||
{ print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
}
|
||||
if (defined($o_netsnmp)) {
|
||||
my @o_warnL=split(/,/ , $o_warn);
|
||||
my @o_critL=split(/,/ , $o_crit);
|
||||
if (($#o_warnL != 1) || ($#o_critL != 1))
|
||||
if (($#o_warnL != 1) || ($#o_critL != 1))
|
||||
{ print "2 warnings and critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
for (my $i=0;$i<2;$i++) {
|
||||
if ( isnnum($o_warnL[$i]) || isnnum($o_critL[$i]))
|
||||
if ( isnnum($o_warnL[$i]) || isnnum($o_critL[$i]))
|
||||
{ print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"} }
|
||||
if (($o_critL[$i]!= 0) && ($o_warnL[$i] > $o_critL[$i]))
|
||||
{ print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}}
|
||||
|
@ -240,24 +239,13 @@ sub check_options {
|
|||
$o_warnR=$o_warnL[0];$o_warnS=$o_warnL[1];
|
||||
$o_critR=$o_critL[0];$o_critS=$o_critL[1];
|
||||
}
|
||||
|
||||
###### Oreon #######
|
||||
|
||||
if (!defined($o_S)) { $o_S="1_1" }
|
||||
$ServiceId = is_valid_serviceid($o_S);
|
||||
|
||||
if (!defined($o_step)) { $o_step="300" }
|
||||
$step = $1 if ($o_step =~ /(\d+)/);
|
||||
|
||||
|
||||
}
|
||||
|
||||
########## MAIN #######
|
||||
|
||||
check_options();
|
||||
|
||||
$rrd = $pathtorrdbase.$ServiceId.".rrd";
|
||||
$start=time;
|
||||
|
||||
# Check gobal timeout if snmp screws up
|
||||
if (defined($TIMEOUT)) {
|
||||
verb("Alarm at $TIMEOUT");
|
||||
|
@ -271,19 +259,33 @@ if (defined($TIMEOUT)) {
|
|||
my ($session,$error);
|
||||
if ( defined($o_login) && defined($o_passwd)) {
|
||||
# SNMPv3 login
|
||||
verb("SNMPv3 login");
|
||||
($session, $error) = Net::SNMP->session(
|
||||
if (!defined ($o_privpass)) {
|
||||
verb("SNMPv3 AuthNoPriv login : $o_login, $o_authproto");
|
||||
($session, $error) = Net::SNMP->session(
|
||||
-hostname => $o_host,
|
||||
-version => '3',
|
||||
-username => $o_login,
|
||||
-authpassword => $o_passwd,
|
||||
-authprotocol => 'md5',
|
||||
-privpassword => $o_passwd,
|
||||
-authprotocol => $o_authproto,
|
||||
-timeout => $o_timeout
|
||||
);
|
||||
);
|
||||
} else {
|
||||
verb("SNMPv3 AuthPriv login : $o_login, $o_authproto, $o_privproto");
|
||||
($session, $error) = Net::SNMP->session(
|
||||
-hostname => $o_host,
|
||||
-version => '3',
|
||||
-username => $o_login,
|
||||
-authpassword => $o_passwd,
|
||||
-authprotocol => $o_authproto,
|
||||
-privpassword => $o_privpass,
|
||||
-privprotocol => $o_privproto,
|
||||
-timeout => $o_timeout
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (defined ($o_version2)) {
|
||||
# SNMPv2 Login
|
||||
verb("SNMP v2c login");
|
||||
($session, $error) = Net::SNMP->session(
|
||||
-hostname => $o_host,
|
||||
-version => 2,
|
||||
|
@ -292,8 +294,8 @@ if ( defined($o_login) && defined($o_passwd)) {
|
|||
-timeout => $o_timeout
|
||||
);
|
||||
} else {
|
||||
|
||||
# SNMPV1 login
|
||||
verb("SNMP v1 login");
|
||||
($session, $error) = Net::SNMP->session(
|
||||
-hostname => $o_host,
|
||||
-community => $o_community,
|
||||
|
@ -317,7 +319,7 @@ if (defined ($o_cisco)) {
|
|||
$resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_table($cisco_mem_pool)
|
||||
:$session->get_table(Baseoid => $cisco_mem_pool);
|
||||
|
||||
|
||||
if (!defined($resultat)) {
|
||||
printf("ERROR: Description table : %s.\n", $session->error);
|
||||
$session->close;
|
||||
|
@ -327,55 +329,50 @@ if (defined ($o_cisco)) {
|
|||
my $nindex=0;
|
||||
foreach my $key ( keys %$resultat) {
|
||||
verb("OID : $key, Desc : $$resultat{$key}");
|
||||
if ( $key =~ /$cisco_index/ ) {
|
||||
if ( $key =~ /$cisco_index/ ) {
|
||||
@oid=split (/\./,$key);
|
||||
$index[$nindex++] = pop(@oid);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Check if at least 1 memory pool exists
|
||||
if ($nindex == 0) {
|
||||
if ($nindex == 0) {
|
||||
printf("ERROR: No memory pools found");
|
||||
$session->close;
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
|
||||
# Consolidate the datas
|
||||
my ($used,$free)=(0,0);
|
||||
# Test every memory pool
|
||||
my ($c_output,$prct_free)=(undef,undef);
|
||||
my ($warn_s,$crit_s)=(0,0);
|
||||
my ($used,$free)=(0,0);
|
||||
foreach (@index) {
|
||||
$c_output .="," if defined ($c_output);
|
||||
if ( $$resultat{$cisco_valid . "." . $_} == 1 ) {
|
||||
$c_output .="," if defined ($c_output);
|
||||
$used += $$resultat{$cisco_used . "." . $_};
|
||||
$free += $$resultat{$cisco_free . "." . $_};
|
||||
$c_output .= $$resultat{$cisco_index . "." . $_} . ":"
|
||||
.round($$resultat{$cisco_used . "." . $_}*100/($$resultat{$cisco_free . "." . $_}+$$resultat{$cisco_used . "." . $_}) ,0)
|
||||
. "%";
|
||||
$prct_free=round($$resultat{$cisco_used . "." . $_}*100/($$resultat{$cisco_free . "." . $_}+$$resultat{$cisco_used . "." . $_}) ,0);
|
||||
$c_output .= $$resultat{$cisco_index . "." . $_} . ":" . $prct_free . "%";
|
||||
if (($o_crit!=0)&&($o_crit <= $prct_free)) {
|
||||
$crit_s =1;
|
||||
} elsif (($o_warn!=0)&&($o_warn <= $prct_free)) {
|
||||
$warn_s=1;
|
||||
}
|
||||
} else {
|
||||
$c_output .= $$resultat{$cisco_index . "." . $_} . ": INVALID";
|
||||
$crit_s =1;
|
||||
}
|
||||
}
|
||||
my $total=$used+$free;
|
||||
my $total=$used+$free;
|
||||
$prct_free=round($used*100/($total),0);
|
||||
verb("Used : $used, Free: $free, Output : $c_output");
|
||||
|
||||
##
|
||||
## RRD management
|
||||
##
|
||||
|
||||
if ($o_g) {
|
||||
$start=time;
|
||||
if (! -e $rrd) {
|
||||
create_rrd($rrd,1,$start,$step,0,100,"GAUGE");
|
||||
}
|
||||
update_rrd($rrd,$start,$prct_free);
|
||||
}
|
||||
|
||||
verb("Total used : $used, free: $free, output : $c_output");
|
||||
my $c_status="OK";
|
||||
$c_output .=" : " . $prct_free ."% : ";
|
||||
if (($o_crit!=0)&&($o_crit <= $prct_free)) {
|
||||
if ($crit_s == 1 ) {
|
||||
$c_output .= " > " . $o_crit ;
|
||||
$c_status="CRITICAL";
|
||||
} else {
|
||||
if (($o_warn!=0)&&($o_warn <= $prct_free)) {
|
||||
if ($warn_s == 1 ) {
|
||||
$c_output.=" > " . $o_warn;
|
||||
$c_status="WARNING";
|
||||
}
|
||||
|
@ -383,11 +380,11 @@ if (defined ($o_cisco)) {
|
|||
$c_output .= " ; ".$c_status;
|
||||
if (defined ($o_perf)) {
|
||||
$c_output .= " | ram_used=" . $used.";";
|
||||
$c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";";
|
||||
$c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";";
|
||||
$c_output .= ($o_crit ==0)? ";" : round($o_crit * $total/100,0).";";
|
||||
$c_output .= "0;" . $total ;
|
||||
}
|
||||
$session->close;
|
||||
}
|
||||
$session->close;
|
||||
print "$c_output \n";
|
||||
exit $ERRORS{$c_status};
|
||||
}
|
||||
|
@ -399,7 +396,7 @@ if (defined ($o_hp)) {
|
|||
$resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_table($hp_mem_pool)
|
||||
:$session->get_table(Baseoid => $hp_mem_pool);
|
||||
|
||||
|
||||
if (!defined($resultat)) {
|
||||
printf("ERROR: Description table : %s.\n", $session->error);
|
||||
$session->close;
|
||||
|
@ -409,14 +406,14 @@ if (defined ($o_hp)) {
|
|||
my $nindex=0;
|
||||
foreach my $key ( keys %$resultat) {
|
||||
verb("OID : $key, Desc : $$resultat{$key}");
|
||||
if ( $key =~ /$hp_mem_index/ ) {
|
||||
if ( $key =~ /$hp_mem_index/ ) {
|
||||
@oid=split (/\./,$key);
|
||||
$index[$nindex++] = pop(@oid);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Check if at least 1 memory slots exists
|
||||
if ($nindex == 0) {
|
||||
if ($nindex == 0) {
|
||||
printf("ERROR: No memory slots found");
|
||||
$session->close;
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
|
@ -429,28 +426,15 @@ if (defined ($o_hp)) {
|
|||
$c_output .="," if defined ($c_output);
|
||||
$total += $$resultat{$hp_mem_total . "." . $_};
|
||||
$free += $$resultat{$hp_mem_free . "." . $_};
|
||||
$c_output .= "Slot " . $$resultat{$hp_mem_index . "." . $_} . ":"
|
||||
.round(
|
||||
100 - ($$resultat{$hp_mem_free . "." . $_} *100 /
|
||||
$c_output .= "Slot " . $$resultat{$hp_mem_index . "." . $_} . ":"
|
||||
.round(
|
||||
100 - ($$resultat{$hp_mem_free . "." . $_} *100 /
|
||||
$$resultat{$hp_mem_total . "." . $_}) ,0)
|
||||
. "%";
|
||||
}
|
||||
my $used = $total - $free;
|
||||
my $used = $total - $free;
|
||||
$prct_free=round($used*100/($total),0);
|
||||
verb("Used : $used, Free: $free, Output : $c_output");
|
||||
|
||||
##
|
||||
## RRD management
|
||||
##
|
||||
|
||||
if ($o_g) {
|
||||
$start=time;
|
||||
if (! -e $rrd) {
|
||||
create_rrd($rrd,1,$start,$step,0,100,"GAUGE");
|
||||
}
|
||||
update_rrd($rrd,$start,$prct_free);
|
||||
}
|
||||
|
||||
my $c_status="OK";
|
||||
$c_output .=" : " . $prct_free ."% : ";
|
||||
if (($o_crit!=0)&&($o_crit <= $prct_free)) {
|
||||
|
@ -465,11 +449,11 @@ if (defined ($o_hp)) {
|
|||
$c_output .= " ; ".$c_status;
|
||||
if (defined ($o_perf)) {
|
||||
$c_output .= " | ram_used=" . $used.";";
|
||||
$c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";";
|
||||
$c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";";
|
||||
$c_output .= ($o_crit ==0)? ";" : round($o_crit * $total/100,0).";";
|
||||
$c_output .= "0;" . $total ;
|
||||
}
|
||||
$session->close;
|
||||
}
|
||||
$session->close;
|
||||
print "$c_output \n";
|
||||
exit $ERRORS{$c_status};
|
||||
}
|
||||
|
@ -481,38 +465,32 @@ if (defined ($o_netsnmp)) {
|
|||
$resultat = (Net::SNMP->VERSION < 4) ?
|
||||
$session->get_request(@nets_oids)
|
||||
:$session->get_request(-varbindlist => \@nets_oids);
|
||||
|
||||
|
||||
if (!defined($resultat)) {
|
||||
printf("ERROR: netsnmp : %s.\n", $session->error);
|
||||
$session->close;
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
|
||||
|
||||
my ($realused,$swapused)=(undef,undef);
|
||||
|
||||
$realused= defined($o_cache) ?
|
||||
($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free})/$$resultat{$nets_ram_total}
|
||||
:
|
||||
($$resultat{$nets_ram_total}-($$resultat{$nets_ram_free}+$$resultat{$nets_ram_cache}))/$$resultat{$nets_ram_total};
|
||||
|
||||
if($$resultat{$nets_ram_total} == 0) { $realused = 0; }
|
||||
|
||||
$realused= ($$resultat{$nets_ram_total} == 0) ? 0 :
|
||||
($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free})/$$resultat{$nets_ram_total};
|
||||
$swapused= ($$resultat{$nets_swap_total} == 0) ? 0 :
|
||||
($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free})/$$resultat{$nets_swap_total};
|
||||
($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free})/$$resultat{$nets_swap_total};
|
||||
$realused=round($realused*100,0);
|
||||
$swapused=round($swapused*100,0);
|
||||
verb ("Ram : $$resultat{$nets_ram_free} / $$resultat{$nets_ram_total} : $realused");
|
||||
defined($o_cache) ?
|
||||
verb ("Ram : $$resultat{$nets_ram_free} / $$resultat{$nets_ram_total} : $realused")
|
||||
:
|
||||
verb ("Ram : $$resultat{$nets_ram_free} ($$resultat{$nets_ram_cache} cached) / $$resultat{$nets_ram_total} : $realused");
|
||||
verb ("Swap : $$resultat{$nets_swap_free} / $$resultat{$nets_swap_total} : $swapused");
|
||||
|
||||
##
|
||||
## RRD management
|
||||
##
|
||||
|
||||
if ($o_g) {
|
||||
$start=time;
|
||||
if (! -e $rrd) {
|
||||
create_rrd($rrd,2,$start,$step,0,100,"GAUGE");
|
||||
}
|
||||
update_rrd($rrd,$start,$realused, $swapused );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
my $n_status="OK";
|
||||
my $n_output="Ram : " . $realused . "%, Swap : " . $swapused . "% :";
|
||||
if ((($o_critR!=0)&&($o_critR <= $realused)) || (($o_critS!=0)&&($o_critS <= $swapused))) {
|
||||
|
@ -524,19 +502,24 @@ if (defined ($o_netsnmp)) {
|
|||
$n_status="WARNING";
|
||||
}
|
||||
}
|
||||
$n_output .= " ; ".$n_status;
|
||||
$n_output .= " ; ".$n_status;
|
||||
if (defined ($o_perf)) {
|
||||
$n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}).";";
|
||||
$n_output .= ($o_warnR ==0)? ";" : round($o_warnR * $$resultat{$nets_ram_total}/100,0).";";
|
||||
$n_output .= ($o_critR ==0)? ";" : round($o_critR * $$resultat{$nets_ram_total}/100,0).";";
|
||||
if (defined ($o_cache)) {
|
||||
$n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}).";";
|
||||
}
|
||||
else {
|
||||
$n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}-$$resultat{$nets_ram_cache}).";";
|
||||
}
|
||||
$n_output .= ($o_warnR ==0)? ";" : round($o_warnR * $$resultat{$nets_ram_total}/100,0).";";
|
||||
$n_output .= ($o_critR ==0)? ";" : round($o_critR * $$resultat{$nets_ram_total}/100,0).";";
|
||||
$n_output .= "0;" . $$resultat{$nets_ram_total}. " ";
|
||||
$n_output .= "swap_used=" . ($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free}).";";
|
||||
$n_output .= ($o_warnS ==0)? ";" : round($o_warnS * $$resultat{$nets_swap_total}/100,0).";";
|
||||
$n_output .= ($o_critS ==0)? ";" : round($o_critS * $$resultat{$nets_swap_total}/100,0).";";
|
||||
$n_output .= ($o_warnS ==0)? ";" : round($o_warnS * $$resultat{$nets_swap_total}/100,0).";";
|
||||
$n_output .= ($o_critS ==0)? ";" : round($o_critS * $$resultat{$nets_swap_total}/100,0).";";
|
||||
$n_output .= "0;" . $$resultat{$nets_swap_total};
|
||||
}
|
||||
}
|
||||
$session->close;
|
||||
print "$n_output \n";
|
||||
exit $ERRORS{$n_status};
|
||||
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue