Browse Source

check_junos: Added 'system_storage' check.

This check may be used to check the amount of used space of any/all system
filesystems.
Sebastian Harl 13 years ago
parent
commit
a99a7fb062
1 changed files with 39 additions and 3 deletions
  1. 39 3
      check_junos.pl

+ 39 - 3
check_junos.pl

@@ -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 => ', ');