使用 Nagios 监控文件夹中的文件

使用 Nagios 监控文件夹中的文件

我开始使用 nagios 来监控我们的一些系统,我想知道是否有人遇到过让它监控文件目录的方法。

我想查看一个目录并说其中有 x 个超​​过 x 分钟的文件,所以警告我。

干杯

答案1

我找到了一个插件(不记得在哪里),它似乎在生产中运行良好。

define command{
    command_name    check_numfiles
    command_line    $USER1$/check_numoffiles.sh $ARG1$
    }

check_command           check_numfiles!-d /var/spool/sms/failed -w 1 -c 2

如果目录包含一个或多个文件,则会发出警告;如果包含两个或两个以上文件,则会发出严重警告。该插件使用find,因此用 修改它以-mtime xxx仅检查超过一定年限的文件将是微不足道的。

插件本身是:

#!/bin/sh
#
# ## Plugin for Nagios to monitor how man files a directory contain
# ## Written by Bernd Mueller (http://www.lisega.de/)
# ##
# ## - 20070426 coded and tested for Linux
# ## - no jet published on NagiosExchange
#
#
# ## You are free to use this script under the terms of the Gnu Public License.
# ## No guarantee - use at your own risc.
#
#
# Usage: ./check_nomoffiles -d <path> -w <warn> -c <crit>
#
# ## Description:
#
# This plugin determines the number of files in a directory
# and compares it with the supplied thresholds.
#
# ## Output: 
#
# The plugin prints the Count of Files in the directory followed by "ok" or
# either "warning" or "critical" if the corresponing threshold is reached.
#
# Exit Codes
# 0 OK       Directory Count of files checked and everything is ok
# 1 Warning  Directory Count of files above "warning" threshold
# 2 Critical Directory Count of files above "critical" threshold
# 3 Unknown  Invalid command line arguments or could not determine directory size
#
# Example: check_numoffiles -d . -w 1000 -c 1400
#
# 121 Files - ok         (exit code 0)
# 1234 Files - warning   (exit code 1)
# 1633 Files - critical  (exit code 2)


# Paths to commands used in this script.  These
# may have to be modified to match your system setup.

PATH=""

find="/usr/bin/find"
xargs="/usr/bin/xargs"
tail="/usr/bin/tail"
awk="/usr/bin/awk"
cut="/usr/bin/cut"
wc="/usr/bin/wc"

PROGNAME=`/bin/basename $0`
PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`
REVISION="Revision 1.0"
AUTHOR="(c) 2007 Bernd Mueller (http://www.lisega.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 <path> -w <warn> -c <crit>"
    echo "Usage: $PROGNAME --help"
    echo "Usage: $PROGNAME --version"
}

print_help() {
    print_revision $PROGNAME $REVISION
    echo ""
    echo "Directory Files 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=""
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
            ;;
        *)
            echo "Unknown argument: $1"
            print_usage
            exit $STATE_UNKNOWN
            ;;
    esac
    shift
done

##### Get size of specified directory

error=""
statresult=`$find $dirpath -maxdepth 1 -type f | $wc -l |$tail -1`
dirsize=`echo $statresult`
result="ok"
exitstatus=$STATE_OK

##### Compare with thresholds

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

echo "$dirsize Files - $result"
exit $exitstatus

相关内容