24 декабря 2012 г.

Nagios - проверка на наличие новых файлов в директории.

Проверка вызывается с двумя ключами:
d - Директория которая проверяется на наличие ЛЮБЫХ файлов
n - Название проверки (Нужно для создание tmp файлов)

Данная проверка может проверять любую директорию и сравнивать количество и имена новых файлов в указанной директории.
При получение новых файлов проверка выдает статус "CRITICAl"
Если проверка нашла файлы в директории и они не новые, то проверка выдаёт "WARINIG:<кол-во файлов в директории>"
Если же проверка ничего не нашла в указанном каталоге, то проверка выдаёт статус "OK"


#!/bin/sh

NAGIOS_OK=0
NAGIOS_WARNING=1
NAGIOS_CRITICAL=2
PROGNAME=`basename $0`
print_usage() {
    echo "Usage: $PROGNAME -d <check-directory> -n <name-check>"
}
if [ $# -lt 4 ]; then
    print_usage
    exit $NAGIOS_WARNING
fi
while getopts "d:n:" Option
 do
    case $Option in
    d) DIR=$OPTARG;;
    n) NAME=$OPTARG;;
 esac
done
TMP_NEW_CORE="/tmp/$NAME-new-check-dir"
TMP_OLD_CORE="/tmp/$NAME-old-check-dir"
if [ `touch /tmp/test 2> /dev/null; echo "$?"` -ne 0 ]; then
    echo "Access /tmp failed"
    exit $NAGIOS_WARNING
else
    rm "/tmp/test"
fi
oldfilecheck=`ls /tmp/ | grep check-core-old`
if [ -z $oldfilecheck ]; then
    touch $TMP_OLD_CORE
fi

check_core=`ls $DIR | wc -l | awk {'print $1'}`
if [ $check_core -lt 1 ]; then
    echo "OK - $DIR=0"
    truncate -s0 $TMP_OLD_CORE > /dev/null 2>&1
    rm $TMP_NEW_CORE > /dev/null 2>&1
    exit $NAGIOS_OK
fi
check_core_old=`ls -l $TMP_OLD_CORE | awk '{print $5}'`
if [ $check_core_old -eq 0 ]; then
    result_old=`ls -l $DIR | grep -v total | awk '{print $9}' | sed -e s/.core//g | sed 's/$/\;/g' > $TMP_OLD_CORE`
    show_core=`cat $TMP_OLD_CORE | xargs`
    echo "CRITICAL - /var/coredumps/$show_core"
    exit $NAGIOS_CRITICAL
fi
if [ $check_core_old -ne 0 ]; then
    result_new=`ls -l $DIR | grep -v total | awk '{print $9}' | sed -e s/.core//g | sed 's/$/\;/g' > $TMP_NEW_CORE`
    cmd=`diff $TMP_OLD_CORE $TMP_NEW_CORE | grep ">" | awk '{print $2}' | xargs`
    show_core=`cat $TMP_OLD_CORE | wc -l | awk '{print $1}'`
    if [ -z "$cmd" ]; then
    echo "WARNING - /var/coredumps=$show_core"
    NAGIOS_EXIT="1"
    else
    echo "New file [ $cmd ]"
    NAGIOS_EXIT="2"
    fi
    mv $TMP_NEW_CORE $TMP_OLD_CORE
    exit $NAGIOS_EXIT
fi