diff --git a/snmp_standard/mode/loadaverage.pm b/snmp_standard/mode/loadaverage.pm index 7abd28836..6530e967c 100644 --- a/snmp_standard/mode/loadaverage.pm +++ b/snmp_standard/mode/loadaverage.pm @@ -50,6 +50,7 @@ sub new { { "warning:s" => { name => 'warning', default => '' }, "critical:s" => { name => 'critical', default => '' }, + "average" => { name => 'average' }, }); return $self; @@ -92,23 +93,53 @@ sub run { my ($self, %options) = @_; # $options{snmp} = snmp object $self->{snmp} = $options{snmp}; - + + my $oid_CountCpu = '.1.3.6.1.2.1.25.3.3.1.2'; my $oid_CpuLoad1m = '.1.3.6.1.4.1.2021.10.1.3.1'; my $oid_CpuLoad5m = '.1.3.6.1.4.1.2021.10.1.3.2'; my $oid_CpuLoad15m = '.1.3.6.1.4.1.2021.10.1.3.3'; my $result = $self->{snmp}->get_leef(oids => [$oid_CpuLoad1m, $oid_CpuLoad5m, $oid_CpuLoad15m], nothing_quit => 1); + + if (defined($self->{option_results}->{average})) { + my $result2 = $self->{snmp}->get_table(oid => $oid_CountCpu); + if (scalar(keys %$result2)<=0){ + $self->{output}->output_add(severity => 'unknown', + short_msg => 'Unable to get number of CPUs'); + $self->{output}->display(); + $self->{output}->exit(); + } + + my $countCpu = scalar(keys %$result2); + + my $avgCpuLoad1m = sprintf ("%0.2f", $result->{$oid_CpuLoad1m} / $countCpu); + my $avgCpuLoad5m = sprintf ("%0.2f", $result->{$oid_CpuLoad5m} / $countCpu); + my $avgCpuLoad15m = sprintf ("%0.2f", $result->{$oid_CpuLoad15m} / $countCpu); + + my $exit1 = $self->{perfdata}->threshold_check(value => $avgCpuLoad1m, + threshold => [ { label => 'crit1', 'exit_litteral' => 'critical' }, { label => 'warn1', exit_litteral => 'warning' } ]); + my $exit2 = $self->{perfdata}->threshold_check(value => $avgCpuLoad5m, + threshold => [ { label => 'crit5', 'exit_litteral' => 'critical' }, { label => 'warn5', exit_litteral => 'warning' } ]); + my $exit3 = $self->{perfdata}->threshold_check(value => $avgCpuLoad15m, + threshold => [ { label => 'crit15', 'exit_litteral' => 'critical' }, { label => 'warn15', exit_litteral => 'warning' } ]); + + my $exit = $self->{output}->get_most_critical(status => [ $exit1, $exit2, $exit3 ]); + $self->{output}->output_add(severity => $exit, + short_msg => sprintf("Load average: %s [%s/%s CPUs], %s [%s/%s CPUs], %s [%s/%s CPUs]", $avgCpuLoad1m, $result->{$oid_CpuLoad1m}, $countCpu, + $avgCpuLoad5m, $result->{$oid_CpuLoad5m}, $countCpu, + $avgCpuLoad15m, $result->{$oid_CpuLoad15m}, $countCpu)); + } else { + my $exit1 = $self->{perfdata}->threshold_check(value => $result->{$oid_CpuLoad1m}, + threshold => [ { label => 'crit1', 'exit_litteral' => 'critical' }, { label => 'warn1', exit_litteral => 'warning' } ]); + my $exit2 = $self->{perfdata}->threshold_check(value => $result->{$oid_CpuLoad5m}, + threshold => [ { label => 'crit5', 'exit_litteral' => 'critical' }, { label => 'warn5', exit_litteral => 'warning' } ]); + my $exit3 = $self->{perfdata}->threshold_check(value => $result->{$oid_CpuLoad15m}, + threshold => [ { label => 'crit15', 'exit_litteral' => 'critical' }, { label => 'warn15', exit_litteral => 'warning' } ]); - my $exit1 = $self->{perfdata}->threshold_check(value => $result->{$oid_CpuLoad1m}, - threshold => [ { label => 'crit1', 'exit_litteral' => 'critical' }, { label => 'warn1', exit_litteral => 'warning' } ]); - my $exit2 = $self->{perfdata}->threshold_check(value => $result->{$oid_CpuLoad5m}, - threshold => [ { label => 'crit5', 'exit_litteral' => 'critical' }, { label => 'warn5', exit_litteral => 'warning' } ]); - my $exit3 = $self->{perfdata}->threshold_check(value => $result->{$oid_CpuLoad15m}, - threshold => [ { label => 'crit15', 'exit_litteral' => 'critical' }, { label => 'warn15', exit_litteral => 'warning' } ]); - - my $exit = $self->{output}->get_most_critical(status => [ $exit1, $exit2, $exit3 ]); - $self->{output}->output_add(severity => $exit, - short_msg => sprintf("Load average: %s, %s, %s", $result->{$oid_CpuLoad1m}, $result->{$oid_CpuLoad5m}, $result->{$oid_CpuLoad15m})); + my $exit = $self->{output}->get_most_critical(status => [ $exit1, $exit2, $exit3 ]); + $self->{output}->output_add(severity => $exit, + short_msg => sprintf("Load average: %s, %s, %s", $result->{$oid_CpuLoad1m}, $result->{$oid_CpuLoad5m}, $result->{$oid_CpuLoad15m})); + } $self->{output}->perfdata_add(label => 'load1', value => $result->{$oid_CpuLoad1m}, @@ -148,6 +179,10 @@ Threshold warning (1min,5min,15min). Threshold critical (1min,5min,15min). +=item B<--average> + +Load average for the number of CPUs. + =back =cut