mirror of https://github.com/jimsalterjrs/sanoid
Add disk space check script for ZFS filesystems
This script checks the available disk space on all mounted filesystems, producing Nagios-ready exit codes and brief, human-readable text.
This commit is contained in:
parent
dbcaeef1ac
commit
361e6839d1
|
|
@ -0,0 +1,67 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
# nagios plugin format: exit 0,1,2,3 for OK, WARN, CRITICAL, or ERROR.
|
||||||
|
|
||||||
|
# check_all_space_avail - test space available on all ZFS filesystems on host
|
||||||
|
# different values for pools named "backup" and other pools:
|
||||||
|
#
|
||||||
|
# default: warn 93%, crit 98%
|
||||||
|
|
||||||
|
my $warnlevel = .93;
|
||||||
|
my $critlevel = .98;
|
||||||
|
|
||||||
|
# accept warnlevel and critlevel as arguments if passed
|
||||||
|
if (defined $ARGV[0] && defined $ARGV[1] && $ARGV[0] >=0 && $ARGV[0] <=1 && $ARGV[1] >=0 && $ARGV[1] <=1) {
|
||||||
|
$warnlevel = $ARGV[0];
|
||||||
|
$critlevel = $ARGV[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
my $msg,$warnfound,$critfound,$errfound;
|
||||||
|
|
||||||
|
# get standard df output, but skip the tmpfs and devtmpfs crap - this should leave us with
|
||||||
|
# nothing but disks. we WILL also get nfs or other network filesystems here, since we
|
||||||
|
# didn't use the -l flag. Feature, not bug. also skip UDF so we don't check free space on CDs!
|
||||||
|
my @filesystems = `/bin/df -x tmpfs -x devtmpfs -x udf`;
|
||||||
|
|
||||||
|
# get rid of header line
|
||||||
|
shift @filesystems;
|
||||||
|
|
||||||
|
foreach my $fs (@filesystems) {
|
||||||
|
chomp $fs;
|
||||||
|
# compress space to make sure split works right
|
||||||
|
$fs =~ s/ +/ /g;
|
||||||
|
my ($dev,$space,$used,$available,$percent,$mounted) = split(' ',$fs);
|
||||||
|
my $calcpercent = $used/$space;
|
||||||
|
my $prettypercent = sprintf('%.1F%',($calcpercent * 100));
|
||||||
|
if ($calcpercent > $critlevel) {
|
||||||
|
$critfound = 1;
|
||||||
|
$msg .= "$mounted: $prettypercent, ";
|
||||||
|
} elsif ($calcpercent > $warnlevel) {
|
||||||
|
$warnfound = 1;
|
||||||
|
$msg .= "$mounted: $prettypercent, ";
|
||||||
|
} elsif ($calcpercent < 0 || $calcpercent > 1) {
|
||||||
|
$errfound = 1;
|
||||||
|
$msg .= "$mounted: $prettypercent (WTF?), ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$msg =~ s/, $//;
|
||||||
|
$msg .= "\n";
|
||||||
|
|
||||||
|
if ($critfound) {
|
||||||
|
print "CRITICAL: $msg";
|
||||||
|
exit 2;
|
||||||
|
} elsif ($warnfound) {
|
||||||
|
print "WARNING: $msg";
|
||||||
|
exit 1;
|
||||||
|
} elsif ($errfound) {
|
||||||
|
print "ERROR: $msg";
|
||||||
|
exit 3;
|
||||||
|
} else {
|
||||||
|
print "OK\n";
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
print "ERROR: $msg ?";
|
||||||
|
exit 3;
|
||||||
Loading…
Reference in New Issue