check_junos: Moved all checks into a new sub for each.
This commit is contained in:
parent
f4fdf36e4e
commit
1ef30b92b6
438
check_junos.pl
438
check_junos.pl
|
@ -130,9 +130,6 @@ $plugin->set_checks($valid_checks, 'chassis_environment', @ARGV);
|
||||||
$junos = $plugin->connect();
|
$junos = $plugin->connect();
|
||||||
|
|
||||||
foreach my $check ($plugin->get_checks()) {
|
foreach my $check ($plugin->get_checks()) {
|
||||||
my $code;
|
|
||||||
my $value;
|
|
||||||
|
|
||||||
my @targets = ();
|
my @targets = ();
|
||||||
|
|
||||||
if (defined $check->{'target'}) {
|
if (defined $check->{'target'}) {
|
||||||
|
@ -145,217 +142,13 @@ foreach my $check ($plugin->get_checks()) {
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($check->{'name'} eq 'interfaces') {
|
if ($check->{'name'} eq 'interfaces') {
|
||||||
my $opts = {
|
check_interfaces(@targets);
|
||||||
with_description => 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (grep { m/^\@with_description$/; } @targets) {
|
|
||||||
$opts->{'with_description'} = 1;
|
|
||||||
|
|
||||||
@targets = grep { ! m/^\@with_description$/; } @targets;
|
|
||||||
}
|
|
||||||
|
|
||||||
my @interfaces = get_interfaces($junos, $opts, @targets);;
|
|
||||||
|
|
||||||
my $down_count = 0;
|
|
||||||
my @down_ifaces = ();
|
|
||||||
|
|
||||||
my $phys_down_count = 0;
|
|
||||||
my @phys_down_ifaces = ();
|
|
||||||
|
|
||||||
my $have_lag_ifaces = 0;
|
|
||||||
|
|
||||||
foreach my $iface (@interfaces) {
|
|
||||||
my $name = get_iface_name($iface);
|
|
||||||
my $status = check_interface($iface, $opts, @targets);
|
|
||||||
|
|
||||||
if ($status == 0) {
|
|
||||||
++$down_count;
|
|
||||||
push @down_ifaces, $name;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($status <= 0) {
|
|
||||||
# disabled or down
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($name !~ m/^ae/) {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
$have_lag_ifaces = 1;
|
|
||||||
|
|
||||||
my @markers = get_liface_marker(get_iface_first_logical($iface));
|
|
||||||
if (! @markers) {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach my $marker (@markers) {
|
|
||||||
my $phy_name = get_iface_name($marker);
|
|
||||||
$phy_name =~ s/\.\d+$//;
|
|
||||||
|
|
||||||
$plugin->verbose(3, "Quering physical interface '$phy_name' "
|
|
||||||
. "for $name.");
|
|
||||||
|
|
||||||
my @phy_interfaces = get_interfaces($junos, {}, $phy_name);
|
|
||||||
foreach my $phy_iface (@phy_interfaces) {
|
|
||||||
if (check_interface($phy_iface, {}, $phy_name) == 0) {
|
|
||||||
++$phys_down_count;
|
|
||||||
push @phys_down_ifaces, "$name -> $phy_name";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($down_count > 0) {
|
|
||||||
$plugin->add_message(CRITICAL, $down_count
|
|
||||||
. " interfaces down (" . join(", ", @down_ifaces) . ")");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($phys_down_count > 0) {
|
|
||||||
$plugin->add_message(WARNING, $phys_down_count
|
|
||||||
. " LAG member interfaces down ("
|
|
||||||
. join(", ", @phys_down_ifaces) . ")");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((! $down_count) && (! $phys_down_count)) {
|
|
||||||
if (! scalar(@targets)) {
|
|
||||||
$plugin->add_message(OK, "all interfaces up"
|
|
||||||
. ($have_lag_ifaces
|
|
||||||
? " (including all LAG member interfaces)" : ""));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$plugin->add_message(OK, "interface"
|
|
||||||
. (scalar(@targets) == 1 ? " " : "s ")
|
|
||||||
. join(", ", @targets) . " up"
|
|
||||||
. ($have_lag_ifaces
|
|
||||||
? " (including all LAG member interfaces)" : ""));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
elsif ($check->{'name'} eq 'chassis_environment') {
|
elsif ($check->{'name'} eq 'chassis_environment') {
|
||||||
my $res = send_query($junos, 'get_environment_information');
|
check_chassis_environment(@targets);
|
||||||
|
|
||||||
my %status_map = (
|
|
||||||
OK => OK,
|
|
||||||
Testing => UNKNOWN,
|
|
||||||
Check => UNKNOWN,
|
|
||||||
Failed => CRITICAL,
|
|
||||||
Absent => CRITICAL,
|
|
||||||
);
|
|
||||||
|
|
||||||
my $items_count = 0;
|
|
||||||
my $items_ok = 0;
|
|
||||||
|
|
||||||
my $class = "";
|
|
||||||
foreach my $item (get_object_by_spec($res, 'environment-item')) {
|
|
||||||
my $name = get_object_value_by_spec($item, 'name');
|
|
||||||
|
|
||||||
if (scalar(@targets) && (! grep { m/^$name$/ } @targets)) {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (get_object_value_by_spec($item, 'class')) {
|
|
||||||
$class = get_object_value_by_spec($item, 'class');
|
|
||||||
}
|
|
||||||
|
|
||||||
my $status = get_object_value_by_spec($item, 'status');
|
|
||||||
|
|
||||||
if ($status eq "Absent") {
|
|
||||||
if (! scalar(@targets)) {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
# else: check this component
|
|
||||||
}
|
|
||||||
|
|
||||||
my $state = UNKNOWN;
|
|
||||||
if (defined $status_map{$status}) {
|
|
||||||
$state = $status_map{$status};
|
|
||||||
}
|
|
||||||
|
|
||||||
++$items_count;
|
|
||||||
|
|
||||||
if ($state == OK) {
|
|
||||||
++$items_ok;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$plugin->add_message($state, $class . " $name: status " .
|
|
||||||
$status);
|
|
||||||
}
|
|
||||||
|
|
||||||
my $temp = get_object_value_by_spec($item, 'temperature');
|
|
||||||
if (! $temp) {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
($temp) = $temp =~ m/(\d+) degrees C/;
|
|
||||||
if (! defined($temp)) {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
$state = $plugin->check_threshold($temp);
|
|
||||||
if ($state != OK) {
|
|
||||||
$plugin->add_message($state, $class
|
|
||||||
. " $name: ${temp} degrees C");
|
|
||||||
}
|
|
||||||
|
|
||||||
my $label = "$name-temp";
|
|
||||||
$label =~ s/ /_/g;
|
|
||||||
$plugin->add_perfdata(
|
|
||||||
label => "'$label'",
|
|
||||||
value => $temp,
|
|
||||||
min => undef,
|
|
||||||
max => undef,
|
|
||||||
uom => '',
|
|
||||||
threshold => $plugin->threshold(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! $items_count) {
|
|
||||||
$plugin->add_message(UNKNOWN, "no components found");
|
|
||||||
}
|
|
||||||
elsif ($items_count == $items_ok) {
|
|
||||||
$plugin->add_message(OK, "$items_ok components OK");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$plugin->add_message(WARNING,
|
|
||||||
"$items_ok / $items_count components OK");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
elsif ($check->{'name'} eq 'system_storage') {
|
elsif ($check->{'name'} eq 'system_storage') {
|
||||||
my $res = send_query($junos, 'get_system_storage');
|
check_system_storage(@targets);
|
||||||
|
|
||||||
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(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -618,3 +411,228 @@ sub get_liface_marker
|
||||||
return @markers;
|
return @markers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub check_interfaces
|
||||||
|
{
|
||||||
|
my @targets = @_;
|
||||||
|
|
||||||
|
my $opts = {
|
||||||
|
with_description => 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (grep { m/^\@with_description$/; } @targets) {
|
||||||
|
$opts->{'with_description'} = 1;
|
||||||
|
|
||||||
|
@targets = grep { ! m/^\@with_description$/; } @targets;
|
||||||
|
}
|
||||||
|
|
||||||
|
my @interfaces = get_interfaces($junos, $opts, @targets);;
|
||||||
|
|
||||||
|
my $down_count = 0;
|
||||||
|
my @down_ifaces = ();
|
||||||
|
|
||||||
|
my $phys_down_count = 0;
|
||||||
|
my @phys_down_ifaces = ();
|
||||||
|
|
||||||
|
my $have_lag_ifaces = 0;
|
||||||
|
|
||||||
|
foreach my $iface (@interfaces) {
|
||||||
|
my $name = get_iface_name($iface);
|
||||||
|
my $status = check_interface($iface, $opts, @targets);
|
||||||
|
|
||||||
|
if ($status == 0) {
|
||||||
|
++$down_count;
|
||||||
|
push @down_ifaces, $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($status <= 0) {
|
||||||
|
# disabled or down
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($name !~ m/^ae/) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
$have_lag_ifaces = 1;
|
||||||
|
|
||||||
|
my @markers = get_liface_marker(get_iface_first_logical($iface));
|
||||||
|
if (! @markers) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach my $marker (@markers) {
|
||||||
|
my $phy_name = get_iface_name($marker);
|
||||||
|
$phy_name =~ s/\.\d+$//;
|
||||||
|
|
||||||
|
$plugin->verbose(3, "Quering physical interface '$phy_name' "
|
||||||
|
. "for $name.");
|
||||||
|
|
||||||
|
my @phy_interfaces = get_interfaces($junos, {}, $phy_name);
|
||||||
|
foreach my $phy_iface (@phy_interfaces) {
|
||||||
|
if (check_interface($phy_iface, {}, $phy_name) == 0) {
|
||||||
|
++$phys_down_count;
|
||||||
|
push @phys_down_ifaces, "$name -> $phy_name";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($down_count > 0) {
|
||||||
|
$plugin->add_message(CRITICAL, $down_count
|
||||||
|
. " interfaces down (" . join(", ", @down_ifaces) . ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($phys_down_count > 0) {
|
||||||
|
$plugin->add_message(WARNING, $phys_down_count
|
||||||
|
. " LAG member interfaces down ("
|
||||||
|
. join(", ", @phys_down_ifaces) . ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((! $down_count) && (! $phys_down_count)) {
|
||||||
|
if (! scalar(@targets)) {
|
||||||
|
$plugin->add_message(OK, "all interfaces up"
|
||||||
|
. ($have_lag_ifaces
|
||||||
|
? " (including all LAG member interfaces)" : ""));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$plugin->add_message(OK, "interface"
|
||||||
|
. (scalar(@targets) == 1 ? " " : "s ")
|
||||||
|
. join(", ", @targets) . " up"
|
||||||
|
. ($have_lag_ifaces
|
||||||
|
? " (including all LAG member interfaces)" : ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub check_chassis_environment
|
||||||
|
{
|
||||||
|
my @targets = @_;
|
||||||
|
|
||||||
|
my $res = send_query($junos, 'get_environment_information');
|
||||||
|
|
||||||
|
my %status_map = (
|
||||||
|
OK => OK,
|
||||||
|
Testing => UNKNOWN,
|
||||||
|
Check => UNKNOWN,
|
||||||
|
Failed => CRITICAL,
|
||||||
|
Absent => CRITICAL,
|
||||||
|
);
|
||||||
|
|
||||||
|
my $items_count = 0;
|
||||||
|
my $items_ok = 0;
|
||||||
|
|
||||||
|
my $class = "";
|
||||||
|
foreach my $item (get_object_by_spec($res, 'environment-item')) {
|
||||||
|
my $name = get_object_value_by_spec($item, 'name');
|
||||||
|
|
||||||
|
if (scalar(@targets) && (! grep { m/^$name$/ } @targets)) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (get_object_value_by_spec($item, 'class')) {
|
||||||
|
$class = get_object_value_by_spec($item, 'class');
|
||||||
|
}
|
||||||
|
|
||||||
|
my $status = get_object_value_by_spec($item, 'status');
|
||||||
|
|
||||||
|
if ($status eq "Absent") {
|
||||||
|
if (! scalar(@targets)) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
# else: check this component
|
||||||
|
}
|
||||||
|
|
||||||
|
my $state = UNKNOWN;
|
||||||
|
if (defined $status_map{$status}) {
|
||||||
|
$state = $status_map{$status};
|
||||||
|
}
|
||||||
|
|
||||||
|
++$items_count;
|
||||||
|
|
||||||
|
if ($state == OK) {
|
||||||
|
++$items_ok;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$plugin->add_message($state, $class . " $name: status " .
|
||||||
|
$status);
|
||||||
|
}
|
||||||
|
|
||||||
|
my $temp = get_object_value_by_spec($item, 'temperature');
|
||||||
|
if (! $temp) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
($temp) = $temp =~ m/(\d+) degrees C/;
|
||||||
|
if (! defined($temp)) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
$state = $plugin->check_threshold($temp);
|
||||||
|
if ($state != OK) {
|
||||||
|
$plugin->add_message($state, $class
|
||||||
|
. " $name: ${temp} degrees C");
|
||||||
|
}
|
||||||
|
|
||||||
|
my $label = "$name-temp";
|
||||||
|
$label =~ s/ /_/g;
|
||||||
|
$plugin->add_perfdata(
|
||||||
|
label => "'$label'",
|
||||||
|
value => $temp,
|
||||||
|
min => undef,
|
||||||
|
max => undef,
|
||||||
|
uom => '',
|
||||||
|
threshold => $plugin->threshold(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $items_count) {
|
||||||
|
$plugin->add_message(UNKNOWN, "no components found");
|
||||||
|
}
|
||||||
|
elsif ($items_count == $items_ok) {
|
||||||
|
$plugin->add_message(OK, "$items_ok components OK");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$plugin->add_message(WARNING,
|
||||||
|
"$items_ok / $items_count components OK");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub check_system_storage
|
||||||
|
{
|
||||||
|
my @targets = @_;
|
||||||
|
|
||||||
|
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(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue