#!/usr/bin/perl #check infiniband stats for check_mk #these checks do not reset counters # - use -x for 64 bit data counters # if errors happen, you will have to reset on the host # these checks assume only 1 (or the first) interface to monitor my @xperf = `/usr/sbin/perfquery -x`; chomp @xperf; my @perf = `/usr/sbin/perfquery`; chomp @perf; foreach $val (@xperf) { if ($val =~ /^PortXmitData/) { (undef,$pxd) = split ( /\.+/, $val ); } elsif ($val =~ /^PortRcvData/) { (undef,$prd) = split ( /\.+/, $val ); } elsif ($val =~ /^PortXmitPkts/) { (undef,$pxp) = split ( /\.+/, $val ); } elsif ($val =~ /^PortRcvPkts/) { (undef,$prp) = split ( /\.+/, $val ); } } foreach $val (@perf) { if ($val =~ /^PortRcvErrors/) { (undef,$pre) = split ( /\.+/, $val ); } elsif ($val =~ /^PortRcvSwitchRelayErrors/) { (undef,$prse) = split ( /\.+/, $val ); } elsif ($val =~ /^PortRcvRemotePhysicalErrors/) { (undef,$prre) = split ( /\.+/, $val ); } } #data must be multiplied by 4 $pxd = $pxd * 4; $prd = $prd * 4; if ($pre > 10) { $prestatus="2"; $prestatustxt="CRITCAL"; } elsif ($pre > 5) { $prestatus="1"; $prestatustxt="WARNING"; } elsif ($pre < 5) { $prestatus="0"; $prestatustxt="OK"; } else { $prestatus="3"; $prestatustxt="UNKNOWN"; } print "${prestatus} Infiniband "; print "data.xmit=${pxd}|data.rcv=${prd}|pkts.xmit=${pxp}|pkts.rcv=${prp}|errors=${pre} ${prestatustxt} - IB errors=${pre}\n";