#!/bin/bash ############################################################################## # Bash script written by Vahid Hedayati April 2013 ############################################################################## # 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 3 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, see . ############################################################################## # This script takes: # snmpwalk="/usr/bin/snmpwalk" snmpget="/usr/bin/snmpget" function usage() { echo "$0 localhost public 100" echo "where localhost is server" echo "public is snmp pass" echo "100 is when it reaches below a 100Mb" echo "-----------------------------------" echo "define threshold below limit specific for partitions i.e. boot can be 50mb where as /var I guess we want to catch it at around 1 gig so" echo "$0 localhost public 1024" } server=$1; pass=$2 limit=$3; errors_found=""; partitions_found=""; lower_limit=10; graphtext="|" if [ $# -lt 3 ]; then usage; exit 1; fi # takes calc_free() { echo "$1 $2 - $3 * 1024 / 1024 / p" | dc } IFS=$'\n' for results in $($snmpwalk -v2c -c $pass -Oq $server hrStorageDescr|grep /|egrep -v "(/mnt|/home|/proc|/sys)"); do ret_result=${results##*.} partitions=${ret_result##* } index=${ret_result%% *} if [[ $partitions =~ /boot ]]; then limit=$lower_limit; fi IFS=' '; args=$($snmpget -v2c -c $pass -Oqv $server hrStorageSize.$index hrStorageUsed.$index hrStorageAllocationUnits.$index | while read oid j ; do printf " $oid" ; done) free=$(calc_free$args) back_count=$(echo $partitions|grep -o "/"|wc -l) if [[ $back_count -ge 2 ]]; then gpartition=$(echo "/"${partitions##*/}) else gpartition=$partitions; fi if [ "$free" -gt "$limit" ] then graphtext=$graphtext$gpartition"="$free"MB;;;0 " partitions_found=$partitions_found" $partitions ($free MB)" else graphtext=$graphtext$gpartition"="$free"MB;;;0 " errors_found=$errors_found" $partitions ($free MB)" fi done if [ "$errors_found" == "" ]; then echo "OK: $partitions_found$graphtext" exit 0 else echo "CRITICAL: $errors_found$graphtext"; exit 2; fi