+ Add top in snmp processcount (Fix #100)
This commit is contained in:
parent
eb84744474
commit
356537fd6e
|
@ -59,6 +59,9 @@ sub new {
|
|||
"process-status:s" => { name => 'process_status', default => 'running|runnable' },
|
||||
"memory" => { name => 'memory', },
|
||||
"cpu" => { name => 'cpu', },
|
||||
"top" => { name => 'top', },
|
||||
"top-num:s" => { name => 'top_num', default => 5 },
|
||||
"top-size:s" => { name => 'top_size', default => 52428800 }, # 50MB
|
||||
});
|
||||
$self->{statefile_cache} = centreon::plugins::statefile->new(%options);
|
||||
$self->{filter4md5} = '';
|
||||
|
@ -114,20 +117,45 @@ sub check_options {
|
|||
}
|
||||
}
|
||||
|
||||
my $oids = {
|
||||
name => '.1.3.6.1.2.1.25.4.2.1.2', # hrSWRunName
|
||||
path => '.1.3.6.1.2.1.25.4.2.1.4', # hrSWRunPath
|
||||
args => '.1.3.6.1.2.1.25.4.2.1.5', # hrSWRunParameters (Warning: it's truncated. (128 characters))
|
||||
status => '.1.3.6.1.2.1.25.4.2.1.7', # hrSWRunStatus
|
||||
};
|
||||
my $oid_hrSWRunPerfMem = '.1.3.6.1.2.1.25.5.1.1.2';
|
||||
my $oid_hrSWRunPerfCPU = '.1.3.6.1.2.1.25.5.1.1.1';
|
||||
|
||||
sub check_top {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
my %data = ();
|
||||
foreach (keys %{$self->{results}->{$oids->{name}}}) {
|
||||
if (/^$oids->{name}\.(.*)/ &&
|
||||
defined($self->{results}->{$oid_hrSWRunPerfMem}->{$oid_hrSWRunPerfMem . '.' . $1})) {
|
||||
$data{$self->{results}->{$oids->{name}}->{$_}} = 0 if (!defined($data{$self->{results}->{$oids->{name}}->{$_}}));
|
||||
$data{$self->{results}->{$oids->{name}}->{$_}} += $self->{results}->{$oid_hrSWRunPerfMem}->{$oid_hrSWRunPerfMem . '.' . $1} * 1024;
|
||||
}
|
||||
}
|
||||
|
||||
my $i = 1;
|
||||
foreach my $name (sort { $data{$b} <=> $data{$a} } keys %data) {
|
||||
last if ($i > $self->{option_results}->{top_num});
|
||||
last if ($data{$name} < $self->{option_results}->{top_size});
|
||||
|
||||
my ($mem_value, $amem_unit) = $self->{perfdata}->change_bytes(value => $data{$name});
|
||||
$self->{output}->output_add(long_msg => sprintf("Top %d '%s' memory usage: %s %s", $i, $name, $mem_value, $amem_unit));
|
||||
$self->{output}->perfdata_add(label => 'top_' . $name, unit => 'B',
|
||||
value => $data{$name},
|
||||
min => 0);
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
sub run {
|
||||
my ($self, %options) = @_;
|
||||
# $options{snmp} = snmp object
|
||||
$self->{snmp} = $options{snmp};
|
||||
|
||||
my $oids = {
|
||||
name => '.1.3.6.1.2.1.25.4.2.1.2', # hrSWRunName
|
||||
path => '.1.3.6.1.2.1.25.4.2.1.4', # hrSWRunPath
|
||||
args => '.1.3.6.1.2.1.25.4.2.1.5', # hrSWRunParameters (Warning: it's truncated. (128 characters))
|
||||
status => '.1.3.6.1.2.1.25.4.2.1.7', # hrSWRunStatus
|
||||
};
|
||||
|
||||
my $oid_hrSWRunPerfMem = '.1.3.6.1.2.1.25.5.1.1.2';
|
||||
my $oid_hrSWRunPerfCPU = '.1.3.6.1.2.1.25.5.1.1.1';
|
||||
|
||||
my $oid2check_filter;
|
||||
# To have a better order
|
||||
|
@ -153,9 +181,15 @@ sub run {
|
|||
}
|
||||
}
|
||||
|
||||
my $result = $self->{snmp}->get_table(oid => $oids->{$oid2check_filter});
|
||||
my $oids_multiple_table = [ { oid => $oids->{$oid2check_filter} } ];
|
||||
if (defined($self->{option_results}->{top})) {
|
||||
push @{$oids_multiple_table}, { oid => $oids->{name} };
|
||||
push @{$oids_multiple_table}, { oid => $oid_hrSWRunPerfMem };
|
||||
}
|
||||
$self->{results} = $self->{snmp}->get_multiple_table(oids => $oids_multiple_table);
|
||||
my $result = $self->{results}->{$oids->{$oid2check_filter}};
|
||||
my $instances_keep = {};
|
||||
foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) {
|
||||
foreach my $key ($self->{snmp}->oid_lex_sort(keys %{$result})) {
|
||||
my $option_val = $self->{option_results}->{'process_' . $oid2check_filter};
|
||||
|
||||
if ($oid2check_filter eq 'status') {
|
||||
|
@ -229,7 +263,7 @@ sub run {
|
|||
my ($total_mem_value, $total_mem_unit) = $self->{perfdata}->change_bytes(value => $total_memory);
|
||||
$self->{output}->output_add(severity => $exit,
|
||||
short_msg => sprintf("Total memory usage: %s", $total_mem_value . " " . $total_mem_unit));
|
||||
$self->{output}->perfdata_add(label => 'mem_total',
|
||||
$self->{output}->perfdata_add(label => 'mem_total', unit => 'B',
|
||||
value => $total_memory,
|
||||
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning_mem_total'),
|
||||
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical_mem_total'),
|
||||
|
@ -239,7 +273,7 @@ sub run {
|
|||
my ($avg_mem_value, $avg_mem_unit) = $self->{perfdata}->change_bytes(value => $total_memory / $num_processes_match);
|
||||
$self->{output}->output_add(severity => $exit,
|
||||
short_msg => sprintf("Average memory usage: %.2f %s", $avg_mem_value, $avg_mem_unit));
|
||||
$self->{output}->perfdata_add(label => 'mem_avg',
|
||||
$self->{output}->perfdata_add(label => 'mem_avg', unit => 'B',
|
||||
value => sprintf("%.2f", $total_memory / $num_processes_match),
|
||||
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning_avg_total'),
|
||||
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical_avg_total'),
|
||||
|
@ -292,6 +326,8 @@ sub run {
|
|||
$self->{statefile_cache}->write(data => $datas);
|
||||
}
|
||||
|
||||
$self->check_top() if (defined($self->{option_results}->{top}));
|
||||
|
||||
$self->{output}->display();
|
||||
$self->{output}->exit();
|
||||
}
|
||||
|
@ -380,6 +416,18 @@ Check memory.
|
|||
Check cpu usage. Should be used with fix processes.
|
||||
if processes pid changes too much, the plugin can compute values.
|
||||
|
||||
=item B<--top>
|
||||
|
||||
Enable top memory usage display.
|
||||
|
||||
=item B<--top-num>
|
||||
|
||||
Number of processes in the top (Default: 5).
|
||||
|
||||
=item B<--top-size>
|
||||
|
||||
Minimum memory usage to be in the top (Default: 52428800 -> 50 MB).
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
|
Loading…
Reference in New Issue