Build precise queries to find exactly what you need
Press ESC to close
@Aposwolf
Member Since: September 9, 2015
Favorites0
Views
Projects0
It works! But somehow in my system not every successful backup is listed via list jobname. I edited the plugin to use status client, for directly connecting to the fd of the client and it's status. Therefore you also have to convert the date. Following changes where made (just copy line to line: open (JOBLIST,"echo 'status client=$client' | $bconsoleCommand |"); my $latestBackupAge=-1; while() { my($line) = $_; #print $line; # split into columns (and remove whitespaces) my ($_dummy,$_jobId,$_level,$_jobFiles,$_jobBytes,$_jobBytesMetric,$_jobStatus,$_finishedDate,$_finishedTime,$_client)=split(/s+/,$line); if ( $_jobBytes eq "0" ) { ($_dummy,$_jobId,$_level,$_jobFiles,$_jobBytes,$_jobStatus,$_finishedDate,$_finishedTime,$_client)=split(/s+/,$line); } $_finishedDate =~ s/Dez/Dec/; $_finishedDate =~ s/Mrz/Mar/; $_finishedDate =~ s/Okt/Oct/; $_finishedDate =~ s/Mai/May/; my $_startTime = "$_finishedDate-$_finishedTime"; if ( $_jobStatus ne "OK" ) { next; # only jobs which terminated correctly } if ( $_client ne "backup_$client" ) { next; # only jobs for this client } if (!( $level eq "*" || $_level eq $level )) { next; # only jobs for the reqired level (or any if $level="*") } my $in_fmt = '%d-%b-%y-%H:%M'; my $out_fmt = '%Y-%m-%d %H:%M:%S'; my $date = Time::Piece->strptime($_startTime, $in_fmt); my $_startTime = $date->strftime($out_fmt); my ($_y,$_m,$_d,$_H,$_M,$_S); ($_y,$_m,$_d,$_H,$_M,$_S) = ( $_startTime=~/^(d{4})-(d{2})-(d{2})s+(d{2}):(d{2}):(d{2})$/ ); if (! $_y ) { next; # require valid startTime } my $_startTimeAsUnixtime=timelocal($_S, $_M, $_H, $_d, $_m-1, $_y);
Reviewed 8 years ago
I modified the script, now there is also a -m or --metric flag, where you can select which format the warn and crit input and the echo output should be (KB, MB, GB or TB) Here it is: #!/bin/sh # # ## Plugin for Nagios to monitor directory size # ## Written by Gerd Stammwitz (http://www.enbiz.de/) # ## # ## - 20040727 coded and tested for Solaris and Linux # ## - 20041216 published on NagiosExchange # ## - 20070710 modified by Jose Vicente Mondejar to add perfdata option # # # ## You are free to use this script under the terms of the Gnu Public License. # ## No guarantee - use at your own risc. # # # Usage: ./check_dirsize -d -w -c # # ## Description: # # This plugin determines the size of a directory (including sub dirs) # and compares it with the supplied thresholds. # It might also be used to monitor a regular file instead of a directory. # # ## Output: # # The plugin prints the size of the directory in KB followed by "ok" or # either "warning" or "critical" if the corresponing threshold is reached. # # Exit Codes # 0 OK Directory size checked and everything is ok # 1 Warning Directory size above "warning" threshold # 2 Critical Directory size above "critical" threshold # 3 Unknown Invalid command line arguments or could not determine directory size # # Example: check_dirsize -d . -w 1000 -c 1400 # # 121 KB - ok (exit code 0) # 1234 KB - warning (exit code 1) # 1633 KB - critical (exit code 2) # Paths to commands used in this script. These # may have to be modified to match your system setup. PATH="" DU="/usr/bin/du" CUT="/usr/bin/cut" WC="/usr/bin/wc" PROGNAME=`/usr/bin/basename $0` PROGPATH=`echo $0 | /bin/sed -e 's,[\/][^\/][^\/]*$,,'` REVISION="Revision 1.1" AUTHOR="(c) 2004,2007 Gerd Stammwitz (http://www.enbiz.de/)" # Exit codes STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 STATE_DEPENDENT=4 print_revision() { echo "$REVISION $AUTHOR" } print_usage() { echo "Usage: $PROGNAME -d|--dirname [-w|--warning ] [-c|--critical ] [-f|--perfdata] [-m|--metric ]" echo "Usage: $PROGNAME -h|--help" echo "Usage: $PROGNAME -V|--version" echo "" echo " must be KB, MB, GB or TB" } print_help() { print_revision $PROGNAME $REVISION echo "" echo "Directory size monitor plugin for Nagios" echo "" print_usage echo "" } # Make sure the correct number of command line # arguments have been supplied if [ $# -lt 1 ]; then print_usage exit $STATE_UNKNOWN fi # Grab the command line arguments thresh_warn="" thresh_crit="" metric="KB" perfdata=0 exitstatus=$STATE_WARNING #default while test -n "$1"; do case "$1" in --help) print_help exit $STATE_OK ;; -h) print_help exit $STATE_OK ;; --version) print_revision $PROGNAME $VERSION exit $STATE_OK ;; -V) print_revision $PROGNAME $VERSION exit $STATE_OK ;; --dirname) dirpath=$2 shift ;; -d) dirpath=$2 shift ;; --warning) thresh_warn=$2 shift ;; -w) thresh_warn=$2 shift ;; --critical) thresh_crit=$2 shift ;; -c) thresh_crit=$2 shift ;; --metric) metric=$2 shift ;; -m) metric=$2 shift ;; -f) perfdata=1 ;; -perfdata) perfdata=1 ;; *) echo "Unknown argument: $1" print_usage exit $STATE_UNKNOWN ;; esac shift done ##### Get size of specified directory error="" duresult=`$DU -s $dirpath 2>&1` || error="Error" if [ ! "$error"="" ]; then errtext=`echo $duresult | $CUT -f3 -d":"` echo "$error:$errtext" exit $STATE_UNKNOWN fi dirsize=`echo $duresult | $CUT -f1 -d" "` result="ok" exitstatus=$STATE_OK ##### Compare with thresholds calc_value=1 case $metric in "MB") calc_value=$((dirsize / 1024)) thresh_warn=$((thresh_warn * 1024)) thresh_crit=$((thresh_crit * 1024)) ;; "GB") calc_value=$((dirsize / 1024 / 1024)) thresh_warn=$((thresh_warn * 1024 * 1024)) thresh_crit=$((thresh_crit * 1024 * 1024)) ;; "TB") calc_value=$((dirsize / 1024 / 1024 / 1024)) thresh_warn=$((thresh_warn * 1024 * 1024 * 1024)) thresh_crit=$((thresh_crit * 1024 * 1024 * 1024)) ;; "KB") calc_value=$dirsize ;; *) echo "Wrong Metric! Must be KB, MB, GB or TB!" exit $STATE_UNKNOWN ;; esac if [ "$thresh_warn" != "" ]; then if [ $dirsize -ge $thresh_warn ]; then result="warning" exitstatus=$STATE_WARNING fi fi if [ "$thresh_crit" != "" ]; then if [ $dirsize -ge $thresh_crit ]; then result="critical" exitstatus=$STATE_CRITICAL fi fi if [ $perfdata -eq 1 ]; then result="$result|'size'=${calc_value};${thresh_warn};${thresh_crit}" fi echo "$calc_value $metric - $result" exit $exitstatus
To make it work on windows servers you just have to set the megaclibin variable to your megacli.exe like my $megaclibin = 'C:MegaCLIconfigmegacli.exe'; and make it readable for perl $megaclibin =~ s#\#/#g; plus copy the utils.pm from your nagios to the perl lib on the windows server. Then it works very well! Great job!
Reviewed 10 years ago