Wir brauchten unbedingt einen Check, der überprüfen kann wieviele Inodes eigentlich bei diversen definierten Volumes belegt sind. Da ich nichts passendes gefunden habe, hier ein eigenes Script:
#!/usr/bin/env perl
##############
## 2015-10-12
## Script by Clemens Steinkogler (clemens[at]steinkogler.org) for monitoring disk-inode usage
## Copyright (C) 2015 Clemens Steinkogler
##
## This program is free software; you can redistribute it and/or modify it under the terms of the
## GNU General Public License as published by the Free Software Foundation; either version 2 of
## the License, or (at your option) any later version. This program is distributed in the hope
## that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details. You should have received a copy of the GNU General Public License along with this program;
## if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
## MA 02111-1307 USA
##############
## This script relies on NETWORK-APPLIANCE_MIB by Netapp - netapp.netapp1.filesys.dfTable
## You may have to install Scalar::MoreUtils via cpan. If you want to do this on Debian in a clean way,
## use cpan2deb* for example https://github.com/sharl/cpan2deb - just follow the installation readme
##
## * You will need following Debian packages:
## + libmodule-depends-perl
## + dh-make-perl
## + devscripts
##
##
use strict;
use warnings;
use Data::Dump qw(dump);
use Scalar::MoreUtils qw(empty);
use Net::SNMP;
use Getopt::Long qw(:config no_ignore_case); # set no_ignore_case so options are case sensitive
use Pod::Usage;
#messy hardcoding or so called default values :o)
my $host = '127.0.0.1';
my $port = 161;
my $community = "icinga";
my $snmp_version = '2c';
my $oid_dfEntry = '1.3.6.1.4.1.789.1.5.4.1';
my $oid_dfMountedOn = '1.3.6.1.4.1.789.1.5.4.1.10';
my $oid_dfPerCentInodeCapacity = '1.3.6.1.4.1.789.1.5.4.1.9';
my $dskPath = '/';
my $warning = 80;
my $critical = 90;
my $debug = 0;
my $help = 0;
GetOptions(
"host|H=s" => \$host,
"port|P=i" => \$port,
"community|C=s" => \$community,
"snmp-version|v=s" => \$snmp_version,
"dskPath|d=s" => \$dskPath,
"warning|w=i" => \$warning,
"critical|c=i" => \$critical,
"debug" => \$debug,
"help|?" => \$help,
) or pod2usage(2);
pod2usage(1) if $help;
my ($sess, $err) = Net::SNMP->session(
-hostname => $host,
-port => $port,
-community => $community,
-version => $snmp_version,
);
if (!defined $sess) {
print "UNKONWN: Error connecting to target ". $host . ": ". $err;
next;
}
# WARNING: Results from this method can become very large if the base OBJECT IDENTIFIER is close to the root of the SNMP MIB tree.
my $result = $sess->get_table(
-baseoid => $oid_dfEntry,
);
$sess->close(); # close the session because we do not need it anymore
if (! $result) {
print "UNKONWN: An error occurred requesting the OID: " . $sess->error() . "\n";
exit 3; # exit code of script indicates error
} else {
my %hash_result = %$result; # dereference $result hash-reference for easier usage
# we need to find the key/OID for the corresponding partition
my %search_result = reverse %$result;
my $key = $search_result{$dskPath};
my $id;
if ( not empty($key) ) {
$key =~ m/\.(\d+)$/;
$id = $1;
}
my $full_oid;
my $percentInode;
if ( not empty($id) ) {
$full_oid = $oid_dfPerCentInodeCapacity.".$id";
$percentInode = $hash_result{$full_oid};
if ( $debug == 1) { # only show if debugging is enabled
print "############### DEBUGGING ###############";
print "received requested OID data\n";
print "RESULT TYPE: $result \n";
print dump($result)."\n";
print "Hash-Key requested: ".$key."\n";
print "ID of partition: ".$id."\n";
print "Full inode OID: ".$full_oid."\n";
}
if ( $percentInode < $warning ) {
print "Inode usage of $dskPath: ".$percentInode."% (<$warning) : OK | inode_usage=$percentInode%;$warning;$critical\n";
exit 0;
} elsif ( $percentInode >= $warning && $percentInode < $critical ) {
print "Inode usage of $dskPath: ".$percentInode."% (>=$warning and <$critical) : WARNING | inode_usage=$percentInode%;$warning;$critical\n";
exit 1;
} elsif ( $percentInode >= $critical ) {
print "Inode usage of $dskPath: ".$percentInode."% (>=$critical) : CRITICAL | inode_usage=$percentInode%;$warning;$critical\n";
exit 2;
} else {
print "UNKONWN Inode usage of $dskPath: \n";
exit 3;
}
} else { # we didn't find any partition named like that
print "UNKONWN: no corresponding partition $dskPath found \n";
exit 3;
}
}
__END__
=head1 NAME
check_snmp_inodes.pl - a check script for monitoring inode usage of a defined partition
=head1 SYNOPSIS
check_snmp_inodes.pl [options]
Options:
--help, -? this help message
--host=[host], -H define host IP or FQDN (default: localhost)
--port=[port], -P define listening SNMP-server port (default: 161)
--community=[community], -C define SNMP community (default: icinga)
--snmp-version=[snmp-version], -v define SNMP version (default: 2c)
--dskpath=[dskpath], -d define partition (default: /)
--warning=[warning], -w define warning limit in percent (default: 80)
--critical=[crictical], -c define critical limit in percent (default:90)
--debug activates debugging messages
=cut
Kommentare