check_junos: Added 'system_storage' check.

This check may be used to check the amount of used space of any/all system
filesystems.
This commit is contained in:
Sebastian Harl 2012-01-02 15:04:35 +01:00
parent cfa7416676
commit a99a7fb062

View file

@ -46,12 +46,10 @@ use JUNOS::Device;
binmode STDOUT, ":utf8"; binmode STDOUT, ":utf8";
my $valid_checks = "interfaces|chassis_environment"; my $valid_checks = "interfaces|chassis_environment|system_storage";
# TODO: # TODO:
# * chassis_routing_engine: show chassis routing-engine (-> number and status) # * chassis_routing_engine: show chassis routing-engine (-> number and status)
#
# * storage: show system storage
my $plugin = Nagios::Plugin->new( my $plugin = Nagios::Plugin->new(
plugin => 'check_junos', plugin => 'check_junos',
@ -86,6 +84,9 @@ The following checks are available:
(as provided by 'show chassis environment'). If specified, the thresholds (as provided by 'show chassis environment'). If specified, the thresholds
will be checked against the temperature of the components. will be checked against the temperature of the components.
* system_storage: Check the amount of used space of system filesystems. The
threshold will be checked against the amount (percent) of used space.
Warning and critical thresholds may be specified in the format documented at Warning and critical thresholds may be specified in the format documented at
http://nagiosplug.sourceforge.net/developer-guidelines.html#THRESHOLDFORMAT.", http://nagiosplug.sourceforge.net/developer-guidelines.html#THRESHOLDFORMAT.",
); );
@ -372,6 +373,41 @@ foreach my $check (@{$conf{'checks'}}) {
"$items_ok / $items_count components OK"); "$items_ok / $items_count components OK");
} }
} }
elsif ($check->{'name'} eq 'system_storage') {
my $res = send_query($junos, 'get_system_storage');
foreach my $re (get_object_by_spec($res,
'multi-routing-engine-item')) {
my $re_name = get_object_value_by_spec($re, 're-name');
foreach my $fs (get_object_by_spec($re,
['system-storage-information', 'filesystem'])) {
my $name = get_object_value_by_spec($fs, 'filesystem-name');
my $mnt_pt = get_object_value_by_spec($fs, 'mounted-on');
if (scalar(@targets) && (! grep { m/^$name$/ } @targets)
&& (! grep { m/^$mnt_pt$/ } @targets)) {
next;
}
my $used = get_object_value_by_spec($fs, 'used-percent') + 0;
my $state = $plugin->check_threshold($used);
if ($state != OK) {
$plugin->add_message($state, "$re_name $mnt_pt: "
. "$used\% used");
}
$plugin->add_perfdata(
label => "'$re_name-$mnt_pt'",
value => $used,
min => 0,
max => 100,
uom => '%',
threshold => $plugin->threshold(),
);
}
}
}
} }
my ($code, $msg) = $plugin->check_messages(join => ', '); my ($code, $msg) = $plugin->check_messages(join => ', ');