371 lines
17 KiB
Perl
371 lines
17 KiB
Perl
#
|
|
# Copyright 2021 Centreon (http://www.centreon.com/)
|
|
#
|
|
# Centreon is a full-fledged industry-strength solution that meets
|
|
# the needs in IT infrastructure and application monitoring for
|
|
# service performance.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
package hardware::devices::polycom::dma::snmp::mode::serversusage;
|
|
|
|
use base qw(centreon::plugins::templates::counter);
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
sub custom_memory_output {
|
|
my ($self, %options) = @_;
|
|
|
|
return sprintf(
|
|
'Memory Total: %s %s, Used: %s %s (%.2f%%), Free: %s %s (%.2f%%)',
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{memory_total}),
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{memory_used}),
|
|
$self->{result_values}->{memory_prct_used},
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{memory_free}),
|
|
$self->{result_values}->{memory_prct_free}
|
|
);
|
|
}
|
|
|
|
sub custom_swap_output {
|
|
my ($self, %options) = @_;
|
|
|
|
return sprintf(
|
|
'Swap Total: %s %s, Used: %s %s (%.2f%%), Free: %s %s (%.2f%%)',
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{swap_total}),
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{swap_used}),
|
|
$self->{result_values}->{swap_prct_used},
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{swap_free}),
|
|
$self->{result_values}->{swap_prct_free}
|
|
);
|
|
}
|
|
|
|
sub custom_disk_output {
|
|
my ($self, %options) = @_;
|
|
|
|
return sprintf(
|
|
'Disk Total: %s %s, Used: %s %s (%.2f%%), Free: %s %s (%.2f%%)',
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{disk_total}),
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{disk_used}),
|
|
$self->{result_values}->{disk_prct_used},
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{disk_free}),
|
|
$self->{result_values}->{disk_prct_free}
|
|
);
|
|
}
|
|
|
|
sub custom_logs_output {
|
|
my ($self, %options) = @_;
|
|
|
|
return sprintf(
|
|
'Logs Total: %s %s, Used: %s %s (%.2f%%), Free: %s %s (%.2f%%)',
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{logs_total}),
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{logs_used}),
|
|
$self->{result_values}->{logs_prct_used},
|
|
$self->{perfdata}->change_bytes(value => $self->{result_values}->{logs_free}),
|
|
$self->{result_values}->{logs_prct_free}
|
|
);
|
|
}
|
|
|
|
sub set_counters {
|
|
my ($self, %options) = @_;
|
|
|
|
$self->{maps_counters_type} = [
|
|
{ name => 'server', type => 1, cb_prefix_output => 'prefix_server_output', message_multiple => 'All servers are ok' }
|
|
];
|
|
|
|
$self->{maps_counters}->{server} = [
|
|
{ label => 'server-cpu-usage', nlabel => 'dma.server.cpu.utilization.percentage', set => {
|
|
key_values => [ { name => 'stRsrcCPUUsageCPUUtilizationPct' }, { name => 'display'} ],
|
|
output_template => 'CPU Utilization: %.2f %%',
|
|
perfdatas => [
|
|
{ template => '%d', min => 0, max => 100, unit => '%', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
# Memory counters
|
|
{ label => 'server-memory-usage', nlabel => 'dma.server.memory.usage.bytes', set => {
|
|
key_values => [
|
|
{ name => 'memory_used' }, { name => 'memory_free' }, { name => 'memory_prct_used' },
|
|
{ name => 'memory_prct_free' }, { name => 'memory_total' }, { name => 'display' }
|
|
],
|
|
closure_custom_output => $self->can('custom_memory_output'),
|
|
perfdatas => [
|
|
{ template => '%d', cast_int => 1, min => 0, max => 'memory_total', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
{ label => 'server-memory-free', display_ok => 0, nlabel => 'dma.server.memory.free.bytes', set => {
|
|
key_values => [
|
|
{ name => 'memory_free' }, { name => 'memory_used' }, { name => 'memory_prct_used' },
|
|
{ name => 'memory_prct_free' }, { name => 'memory_total' }, { name => 'display' }
|
|
],
|
|
closure_custom_output => $self->can('custom_memory_output'),
|
|
perfdatas => [
|
|
{ template => '%d', cast_int => 1, min => 0, max => 'memory_total', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
{ label => 'server-memory-prct', display_ok => 0, nlabel => 'dma.server.memory.usage.percentage', set => {
|
|
key_values => [ { name => 'memory_prct_used' }, { name => 'display' } ],
|
|
output_template => 'RAM used: %.2f %%',
|
|
perfdatas => [
|
|
{ template => '%.2f', min => 0, max => 100, unit => '%', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
# Swap counters
|
|
{ label => 'server-swap-usage', nlabel => 'dma.server.swap.usage.percentage', set => {
|
|
key_values => [
|
|
{ name => 'swap_used' }, { name => 'swap_free' }, { name => 'swap_prct_used' },
|
|
{ name => 'swap_prct_free' }, { name => 'swap_total' }, { name => 'display' }
|
|
],
|
|
closure_custom_output => $self->can('custom_swap_output'),
|
|
perfdatas => [
|
|
{ template => '%d', cast_int => 1, min => 0, max => 'swap_total', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
{ label => 'server-swap-free', display_ok => 0, nlabel => 'dma.server.swap.free.bytes', set => {
|
|
key_values => [
|
|
{ name => 'swap_free' }, { name => 'swap_used' }, { name => 'swap_prct_used' },
|
|
{ name => 'swap_prct_free' }, { name => 'swap_total' }, { name => 'display' }
|
|
],
|
|
closure_custom_output => $self->can('custom_swap_output'),
|
|
perfdatas => [
|
|
{ template => '%d', cast_int => 1, min => 0, max => 'swap_total', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
{ label => 'server-swap-prct', display_ok => 0, nlabel => 'dma.server.swap.usage.percentage', set => {
|
|
key_values => [ { name => 'swap_prct_used' }, { name => 'display' } ],
|
|
output_template => 'swap used: %.2f %%',
|
|
perfdatas => [
|
|
{ template => '%.2f', min => 0, max => 100, unit => '%', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
# Disk counters
|
|
{ label => 'server-disk-usage', nlabel => 'dma.server.disk.usage.bytes', set => {
|
|
key_values => [
|
|
{ name => 'disk_used' }, { name => 'disk_free' }, { name => 'disk_prct_used' },
|
|
{ name => 'disk_prct_free' }, { name => 'disk_total' }, { name => 'display' }
|
|
],
|
|
closure_custom_output => $self->can('custom_disk_output'),
|
|
perfdatas => [
|
|
{ template => '%d', min => 0, max => 'disk_total', cast_int => 1, label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
{ label => 'server-disk-free', display_ok => 0, nlabel => 'dma.server.disk.free.bytes', set => {
|
|
key_values => [
|
|
{ name => 'disk_free' }, { name => 'disk_used' }, { name => 'disk_prct_used' },
|
|
{ name => 'disk_prct_free' }, { name => 'disk_total' }, { name => 'display' }
|
|
],
|
|
closure_custom_output => $self->can('custom_disk_output'),
|
|
perfdatas => [
|
|
{ template => '%d', cast_int => 1, min => 0, max => 'disk_total', label_extra_instance => 1, instance_use => 'display', }
|
|
]
|
|
}
|
|
},
|
|
{ label => 'server-disk-prct', display_ok => 0, nlabel => 'dma.server.disk.usage.percentage', set => {
|
|
key_values => [ { name => 'disk_prct_used' }, { name => 'display' } ],
|
|
output_template => 'disk used: %.2f %%',
|
|
perfdatas => [
|
|
{ template => '%.2f', min => 0, max => 100, unit => '%', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
# Log counters
|
|
{ label => 'server-logs-usage', nlabel => 'dma.server.logs.usage.bytes', set => {
|
|
key_values => [
|
|
{ name => 'logs_used' }, { name => 'logs_free' }, { name => 'logs_prct_used' },
|
|
{ name => 'logs_prct_free' }, { name => 'logs_total' }, { name => 'display' }
|
|
],
|
|
closure_custom_output => $self->can('custom_logs_output'),
|
|
perfdatas => [
|
|
{ template => '%d', cast_int => 1, min => 0, max => 'logs_total', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
{ label => 'server-logs-free', display_ok => 0, nlabel => 'dma.server.logs.free.bytes', set => {
|
|
key_values => [
|
|
{ name => 'logs_free' }, { name => 'logs_used' }, { name => 'logs_prct_used' },
|
|
{ name => 'logs_prct_free' }, { name => 'logs_total' }, { name => 'display' }
|
|
],
|
|
closure_custom_output => $self->can('custom_logs_output'),
|
|
perfdatas => [
|
|
{ template => '%d', cast_int => 1, min => 0, max => 'logs_total', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
},
|
|
{ label => 'server-logs-prct', display_ok => 0, nlabel => 'dma.server.logs.usage.percentage', set => {
|
|
key_values => [ { name => 'logs_prct_used' }, { name => 'display' } ],
|
|
output_template => 'logs used: %.2f %%',
|
|
perfdatas => [
|
|
{ template => '%.2f', min => 0, max => 100, unit => '%', label_extra_instance => 1, instance_use => 'display' }
|
|
]
|
|
}
|
|
}
|
|
];
|
|
}
|
|
|
|
sub new {
|
|
my ($class, %options) = @_;
|
|
my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1);
|
|
bless $self, $class;
|
|
|
|
$options{options}->add_options(arguments => {
|
|
'filter-server:s' => { name => 'filter_server' }
|
|
});
|
|
|
|
return $self;
|
|
}
|
|
|
|
sub prefix_server_output {
|
|
my ($self, %options) = @_;
|
|
|
|
return "Server '" . $options{instance_value}->{display} . "' ";
|
|
}
|
|
|
|
my $mapping_cpu = {
|
|
stRsrcCPUUsageHostName => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.1.1.2' },
|
|
stRsrcCPUUsageCPUUtilizationPct => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.1.1.3' }
|
|
};
|
|
|
|
my $mapping_memory = {
|
|
stRsrcMemUsageHostName => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.2.1.2' },
|
|
stRsrcMemUsageTotalMemory => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.2.1.3' },
|
|
stRsrcMemUsageBuffersAndCache => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.2.1.4' },
|
|
stRsrcMemUsageUsed => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.2.1.5' },
|
|
stRsrcMemUsageFree => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.2.1.6' }
|
|
};
|
|
|
|
my $mapping_swap = {
|
|
stRsrcSwapHostName => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.3.1.2' },
|
|
stRsrcSwapTotal => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.3.1.3' },
|
|
stRsrcSwapUsed => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.3.1.4' }
|
|
};
|
|
|
|
my $mapping_disk = {
|
|
stRsrcDiskHostName => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.4.1.2' },
|
|
stRsrcDiskTotal => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.4.1.3' },
|
|
stRsrcDiskUsed => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.4.1.4' }
|
|
};
|
|
|
|
my $mapping_logs = {
|
|
stRsrcLogHostName => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.5.1.2'},
|
|
stRsrcLogTotal => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.5.1.3'},
|
|
stRsrcLogUsed => { oid => '.1.3.6.1.4.1.13885.13.2.2.1.4.5.1.4'}
|
|
};
|
|
|
|
my $oid_stRsrcCPUUsageEntry = '.1.3.6.1.4.1.13885.13.2.2.1.4.1.1';
|
|
my $oid_stRsrcMemoryUsageEntry = '.1.3.6.1.4.1.13885.13.2.2.1.4.2.1';
|
|
my $oid_stRsrcSwapUsageEntry = '.1.3.6.1.4.1.13885.13.2.2.1.4.3.1';
|
|
my $oid_stRsrcDiskSpaceEntry = '.1.3.6.1.4.1.13885.13.2.2.1.4.4.1';
|
|
my $oid_stRsrcLogSpaceEntry = '.1.3.6.1.4.1.13885.13.2.2.1.4.5.1';
|
|
|
|
sub manage_selection {
|
|
my ($self, %options) = @_;
|
|
|
|
my $snmp_result = $options{snmp}->get_multiple_table(
|
|
oids => [
|
|
{ oid => $oid_stRsrcCPUUsageEntry },
|
|
{ oid => $oid_stRsrcMemoryUsageEntry },
|
|
{ oid => $oid_stRsrcSwapUsageEntry },
|
|
{ oid => $oid_stRsrcDiskSpaceEntry },
|
|
{ oid => $oid_stRsrcLogSpaceEntry }
|
|
],
|
|
nothing_quit => 1
|
|
);
|
|
|
|
$self->{server} = {};
|
|
foreach my $oid (keys %{$snmp_result->{$oid_stRsrcCPUUsageEntry}}) {
|
|
next if ($oid !~ /^$mapping_cpu->{stRsrcCPUUsageHostName}->{oid}\.(.*)$/);
|
|
my $instance = $1;
|
|
|
|
my $result_cpu = $options{snmp}->map_instance(mapping => $mapping_cpu, results => $snmp_result->{$oid_stRsrcCPUUsageEntry}, instance => $instance);
|
|
my $result_memory = $options{snmp}->map_instance(mapping => $mapping_memory, results => $snmp_result->{$oid_stRsrcMemoryUsageEntry}, instance => $instance);
|
|
my $result_swap = $options{snmp}->map_instance(mapping => $mapping_swap, results => $snmp_result->{$oid_stRsrcSwapUsageEntry}, instance => $instance);
|
|
my $result_disk = $options{snmp}->map_instance(mapping => $mapping_disk, results => $snmp_result->{$oid_stRsrcDiskSpaceEntry}, instance => $instance);
|
|
my $result_logs = $options{snmp}->map_instance(mapping => $mapping_logs, results => $snmp_result->{$oid_stRsrcLogSpaceEntry}, instance => $instance);
|
|
|
|
$result_cpu->{stRsrcCPUUsageHostName} = centreon::plugins::misc::trim($result_cpu->{stRsrcCPUUsageHostName});
|
|
if (defined($self->{option_results}->{filter_server}) && $self->{option_results}->{filter_server} ne '' &&
|
|
$result_cpu->{stRsrcCPUUsageHostName} !~ /$self->{option_results}->{filter_server}/) {
|
|
$self->{output}->output_add(long_msg => "skipping '" . $result_cpu->{stRsrcCPUUsageHostName} . "': no matching filter.", debug => 1);
|
|
next;
|
|
}
|
|
|
|
my ($memory_used, $memory_total) = (($result_memory->{stRsrcMemUsageUsed} + $result_memory->{stRsrcMemUsageBuffersAndCache} * 1024 * 1024),
|
|
$result_memory->{stRsrcMemUsageTotalMemory} * 1024 * 1024);
|
|
my ($swap_used, $swap_total) = (($result_swap->{stRsrcSwapUsed} * 1024 * 1024), ($result_swap->{stRsrcSwapTotal} * 1024 * 1024));
|
|
my ($disk_used, $disk_total) = (($result_disk->{stRsrcDiskUsed} * 1024 * 1024), ($result_disk->{stRsrcDiskTotal} * 1024 * 1024));
|
|
my ($logs_used, $logs_total) = (($result_logs->{stRsrcLogUsed} * 1024 * 1024, $result_logs->{stRsrcLogTotal} * 1024 * 1024));
|
|
|
|
$self->{server}->{$instance} = {
|
|
display => $result_cpu->{stRsrcCPUUsageHostName},
|
|
stRsrcCPUUsageCPUUtilizationPct => $result_cpu->{stRsrcCPUUsageCPUUtilizationPct},
|
|
memory_free => $memory_total - $memory_used,
|
|
memory_prct_free => 100 - ($memory_used * 100 / $memory_total),
|
|
memory_prct_used => ($memory_total != 0) ? $memory_used * 100 / $memory_total : '0',
|
|
memory_total => $memory_total,
|
|
memory_used => $memory_used,
|
|
swap_free => $swap_total - $swap_used,
|
|
swap_prct_free => 100 - ($swap_used * 100 / $swap_total),
|
|
swap_prct_used => ($swap_total != 0) ? $swap_used * 100 / $swap_total : '0',
|
|
swap_total => $swap_total,
|
|
swap_used => $swap_used,
|
|
disk_free => $disk_total - $disk_used,
|
|
disk_prct_free => 100 - ($disk_used * 100 / $disk_total),
|
|
disk_prct_used => ($disk_total != 0) ? $disk_used * 100 / $disk_total : '0',
|
|
disk_total => $disk_total,
|
|
disk_used => $disk_used,
|
|
logs_free => $logs_total - $logs_used,
|
|
logs_prct_free => 100 - ($logs_used * 100 / $logs_total),
|
|
logs_prct_used => ($logs_total != 0) ? $logs_used * 100 / $logs_total : '0',
|
|
logs_total => $logs_total,
|
|
logs_used => $logs_used
|
|
};
|
|
}
|
|
|
|
}
|
|
|
|
1;
|
|
|
|
__END__
|
|
|
|
=head1 MODE
|
|
|
|
Check managed servers system usage metrics
|
|
|
|
=over 8
|
|
|
|
=item B<--filter-server>
|
|
|
|
Filter on one or several server (POSIX regexp)
|
|
|
|
=item B<--warning-* --critical-*>
|
|
|
|
Warning & Critical Thresholds. Possible values:
|
|
|
|
[CPU] server-cpu-usage
|
|
[RAM] server-memory-usage server-memory-free server-memory-prct
|
|
[SWAP] server-swap-usage server-swap-free server-swap-prct
|
|
[DISK] server-disk-usage server-disk-free server-disk-prct
|
|
[LOGS] server-logs-usage server-logs-free server-logs-prct
|
|
|
|
=back
|
|
|
|
=cut
|