-
Notifications
You must be signed in to change notification settings - Fork 2
/
check_iperf.pl
87 lines (71 loc) · 2.02 KB
/
check_iperf.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/perl -w
## $Id: check_iperf.pl 232 2006-10-01 15:23:55Z touche $
## hagen.nicol@lan-monitor.de
use strict;
$ENV{'PATH'}='';
$ENV{'BASH_ENV'}='';
$ENV{'ENV'}='';
my ($target,$exit);
#my $iperf = "c:\\temp\\iperf.exe";
my $iperf = "/usr/bin/iperf";
if ($#ARGV+1 !=3) {
usage();
exit;
} elsif (! -f "$iperf") {
print "didn't find iperf here '$iperf'.\n";
exit;
} else {
$target = $ARGV[0];
}
our ($mtu,$connect_ok,$speed,$unit);
$connect_ok = 0;
$speed = "UNKNOWN";
my ($maxwarn,$maxcrit,$minwarn,$mincrit);
$mincrit = $ARGV[1];
if ($mincrit =~ m/([0-9].+):([0-9].+)/) {
$mincrit = $1;
$maxcrit = $2;
}
$minwarn = $ARGV[2];
if ($minwarn =~ m/([0-9].+):([0-9].+)/) {
$minwarn = $1;
$maxwarn = $2;
}
open(OUT, "$iperf -c $target -m -f m|");
while (<OUT>) {
chomp;
#print "DEBUG: '$_'\n";
if (m/TCP window size: ([0-9\.].+) (\w)/) {
$mtu = "$1 $2";
} elsif (m/connected with/) {
$connect_ok = 1;
} elsif (m/^\[.*\] [0-9-\.].+ sec.*[0-9\.] .Bytes\s*([0-9].*) (.*)$/) {
$speed = $1;
$unit = $2;
}
}
if ($connect_ok == 0) {
print "NOK: iperf didn't connect to '$target'.\n"; $exit = 2;
} elsif ($speed<$mincrit) {
print "Critical: iperf speed of '$target': $speed ($unit) < $mincrit | speed=$speed\n";$exit=2;
} elsif (defined($maxcrit) && $speed > $maxcrit) {
print "Critical: iperf speed of '$target': $speed ($unit) > $maxcrit | speed=$speed\n";$exit=2;
} elsif ($speed < $minwarn) {
print "Warning: iperf speed of '$target': $speed ($unit) < $minwarn | speed=$speed\n";$exit=1;
} elsif (defined($maxwarn) && $speed > $maxwarn) {
print "Warning: iperf speed of '$target': $speed ($unit) > $maxwarn | speed=$speed\n";$exit=2;
} else {
print "OK: iperf returns $speed $unit (wsize $mtu) | speed=$speed\n"; $exit = 0;
}
sub usage {
print <<EOL
$0 <target host> "Critical speed" "Warning speed":
this plugin returns iperf usage
examples:
$0 <host> 10 15: critical if speed under 10 units
$0 <host> 10 15:50: warning if speed out of 15:50 units
$0 <host> 10:100 15:90
$0 <host> 10:40 15:90
EOL
}
exit $exit;