Search Exchange
Search All Sites
Nagios Live Webinars
Let our experts show you how Nagios can help your organization.Login
Directory Tree
CheckDirSize
172122
File | Description |
---|---|
check_dirsize.sh | CheckDirSize V1.0 |
check_dirsize11.sh | CheckDirSize V1.1 (with perfdata option) |
Meet The New Nagios Core Services Platform
Built on over 25 years of monitoring experience, the Nagios Core Services Platform provides insightful monitoring dashboards, time-saving monitoring wizards, and unmatched ease of use. Use it for free indefinitely.
Monitoring Made Magically Better
- Nagios Core on Overdrive
- Powerful Monitoring Dashboards
- Time-Saving Configuration Wizards
- Open Source Powered Monitoring On Steroids
- And So Much More!
## 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.
Usage: check_dirsize -d -w -c -f
## 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)
## Changes in V1.1
CheckDirSize now generates perfdata if desired (option -f). Thanks to Jose Vicente Mondejar.
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.
Usage: check_dirsize -d -w -c -f
## 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)
## Changes in V1.1
CheckDirSize now generates perfdata if desired (option -f). Thanks to Jose Vicente Mondejar.
Reviews (6)
byArthurBorsboom, June 28, 2020
There is a bug in the script.
the command line option -perfdata should be --perfdata in the code.
--perfdata is not recognized.
the command line option -perfdata should be --perfdata in the code.
--perfdata is not recognized.
bynishith, December 30, 2019
I'm using NRPE on Client Side. Below is the configuration.
Upload "check_dirsize11.sh" script on Nagios Client Node under "/usr/lib64/nagios/plugins/" directory.
Open nrpe.cfg file & append new line as follows.
vim /etc/nagios/nrpe.cfg
command[check_syslog_dir]=/usr/lib64/nagios/plugins/check_dirsize11.sh -d /var/log/
Restart NRPE Service.
systemctl restart nrpe
Now on the Nagios Server Side, configure remote host as follows:
define service{
use generic-service
host_name linuxbox1.example.local
service_description SYSLOG Directory Size
check_command check_nrpe!check_syslog_dir
}
Save & Exit.
You can also run the NRPE Command from Nagios Server to get the output. The command is,
/usr/local/nagios/libexec/check_nrpe -H 172.16.1.96 -c check_syslog_dir
Important Note:
If you're getting sudo error to access "DU" command, append below line inside Nagios client sudo file.
%nagios ALL=(ALL) NOPASSWD:ALL
Now, modify "check_dirsize11.sh" plugin, line no:46
DU="/usr/bin/sudo /usr/bin/du"
If you want directory size output in "GB", then change line no. 159 as follows.
duresult=`$DU -sh $dirpath 2>&1` || error="Error"
(Replace -sk with -sh)
That's it.
Upload "check_dirsize11.sh" script on Nagios Client Node under "/usr/lib64/nagios/plugins/" directory.
Open nrpe.cfg file & append new line as follows.
vim /etc/nagios/nrpe.cfg
command[check_syslog_dir]=/usr/lib64/nagios/plugins/check_dirsize11.sh -d /var/log/
Restart NRPE Service.
systemctl restart nrpe
Now on the Nagios Server Side, configure remote host as follows:
define service{
use generic-service
host_name linuxbox1.example.local
service_description SYSLOG Directory Size
check_command check_nrpe!check_syslog_dir
}
Save & Exit.
You can also run the NRPE Command from Nagios Server to get the output. The command is,
/usr/local/nagios/libexec/check_nrpe -H 172.16.1.96 -c check_syslog_dir
Important Note:
If you're getting sudo error to access "DU" command, append below line inside Nagios client sudo file.
%nagios ALL=(ALL) NOPASSWD:ALL
Now, modify "check_dirsize11.sh" plugin, line no:46
DU="/usr/bin/sudo /usr/bin/du"
If you want directory size output in "GB", then change line no. 159 as follows.
duresult=`$DU -sh $dirpath 2>&1` || error="Error"
(Replace -sk with -sh)
That's it.
byAposwolf, December 27, 2017
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
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
byErick678, March 23, 2014
Is it possible to implement the remote dirsize check?
byadarsh, May 6, 2013
Thanks shawnbrito,
i have changed the permission settings in the script as you told but it doesn't work. the error is just "Error:" i have tried chmod u+r on the directory (/etc) i need to monitor but the trick failed to work. any idea please?
i have changed the permission settings in the script as you told but it doesn't work. the error is just "Error:" i have tried chmod u+r on the directory (/etc) i need to monitor but the trick failed to work. any idea please?
byshawnbrito, January 17, 2012
This is a must have plugin.. Really appreciate it.. Thanks...
In order to read the folder that have root permission, you will need to modify line:46 with sudo as follows....
DU="/usr/bin/sudo /usr/bin/du"
On Fedora based systems, basename command is located in the /bin/ folder.. (Modify line:50)
PROGNAME=`/bin/basename $0`
I also had to visudo, and #comment the Default requiretty... and add the following line to the list of allowed commands...(Fedora Linux)
nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/
nagios ALL=(ALL) NOPASSWD: /usr/bin/
In order to read the folder that have root permission, you will need to modify line:46 with sudo as follows....
DU="/usr/bin/sudo /usr/bin/du"
On Fedora based systems, basename command is located in the /bin/ folder.. (Modify line:50)
PROGNAME=`/bin/basename $0`
I also had to visudo, and #comment the Default requiretty... and add the following line to the list of allowed commands...(Fedora Linux)
nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/
nagios ALL=(ALL) NOPASSWD: /usr/bin/