Como posso verificar a quantidade exata de espaço (MB ou GB) no Nagios usando o comando check_nt em vez do valor usado de porcentagem?

2

Como posso verificar a quantidade exata de espaço restante (MB ou GB) no Nagios usando o comando check_nt em vez do valor percentual?

Atualmente estou usando este comando:

 check_command           check_nt!USEDDISKSPACE!-l c -w 90 -c 95

mas isso está verificando o valor percentual do espaço em disco usado e eu quero receber uma notificação quando tiver a quantidade exata de GB restante em alguma unidade (por exemplo, aviso quando houver 10GB restantes e crítico quando houver apenas 5GB esquerda).

Obrigado

    
por GrZeCh 10.09.2011 / 00:28

3 respostas

5

check_nt!USEDDISKSPACE retorna o tamanho e a porcentagem do uso do disco. Mas os limites são percentuais.

Se você deseja receber alertas com base no tamanho, pode escrever um script de shell de wrapper para o comando check_nt , por exemplo, check_disk_by_size :

#!/bin/bash

FREESPACE='/usr/local/nagios/libexec/check_nt -H $2 -p 12489 -s pa$$word \
-v USEDDISKSPACE -l $4 | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $1 }''

SIZE='echo $FREESPACE | awk '{ print $2 }''
UNIT='echo $FREESPACE | awk '{ print $3 }''

if [ $UNIT == "Gb" ]; then
    SIZE='echo $SIZE \* 1024 | bc'
fi

if [ 'echo "$SIZE >= $6" | bc' -eq 1 ]; then
    echo "$4:\_Drive_Space OK - $FREESPACE"
    exit 0
elif [ 'echo "$SIZE < $6" | bc' -eq 1 -a 'echo "$SIZE > $8" | bc' -eq 1 ]; then
    echo "$4:\_Drive_Space WARNING - $FREESPACE"
    exit 1
elif [ 'echo "$SIZE <= $8" | bc' -eq 1 ]; then
    echo "$4:\_Drive_Space CRITICAL - $FREESPACE"
    exit 2
fi

Teste:

$ check_disk_by_size.sh -H 192.168.6.31 -l c -w 10240 -c 5120
c:\_Drive_Space OK - free 13.01 Gb (36%)

$ check_disk_by_size.sh -H 192.168.6.31 -l c -w 14240 -c 5120
c:\_Drive_Space WARNING - free 13.01 Gb (36%)

$ check_disk_by_size.sh -H 192.168.6.31 -l c -w 16240 -c 15120
c:\_Drive_Space CRITICAL - free 13.01 Gb (36%)

Você pode adicioná-lo ao Nagios assim:

"check_disk_by_size.sh".

# 'check_disk_by_size' command definition
define command{
       command_name    check_disk_by_size
       command_line    $USER1$/check_disk_by_size.sh -H $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$
       }

define service{
        use                     generic-service
        host_name               fileserver1
        service_description     Drive Space fileserver1: L:
        check_command           check_disk_by_size!-l L -w 4096 -c 2048
        notifications_enabled   1
        }
    
por 10.09.2011 / 07:02
3

Eu modifiquei o código para adaptar a nova sintaxe BASH e uma verificação mais robusta.

#!/bin/bash

usage() { echo "$0 check_nt -H host [-p port] [-w warning] [-c critical] [-l params] [-t timeout]" 1>&2; exit 1; }

while getopts ":H:p:l:w:c:" opt; do
    case "${opt}" in
        H ) HOST_NAME=$OPTARG;;
        p ) PORT=$OPTARG;;
        l ) DISC=$OPTARG;;
        w ) WARN_THRESHOLD=$OPTARG;;
        c ) CRITICAL_THRESHOLD=$OPTARG;;
#        t ) TIME_OUT=$OPTARG;;
        \?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;;
        : ) echo "Option -$OPTARG requires an argument." >&2; exit 1;;
    esac
done
shift $((OPTIND-1))

if [[ -z "$HOST_NAME" ]] || [[ -z "$PORT" ]] || [[ -z "$DISC" ]] || [[ -z "$WARN_THRESHOLD" ]] || [[ -z "$CRITICAL_THRESHOLD" ]] ; then
    usage
fi

FREESPACE='/usr/local/nagios/libexec/check_nt -H $HOST_NAME -p $PORT \
-v USEDDISKSPACE -l $DISC | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $1 }''

SIZE='echo $FREESPACE | awk '{ print $2 }''
UNIT='echo $FREESPACE | awk '{ print $3 }''

if [[ $UNIT == "Gb" ]];then
    SIZE='echo $SIZE \* 1024 | bc'
fi

if [[ 'echo "$SIZE >= $WARN_THRESHOLD" | bc' -eq 1 ]];then
    echo "$DISC:\_Drive_Space OK - $FREESPACE"
    exit 0
elif [[ 'echo "$SIZE  $CRITICAL_THRESHOLD" | bc' -eq 1 ]];then
    echo "$DISC:\_Drive_Space WARNING - $FREESPACE"
    exit 1
elif [[ 'echo "$SIZE 
    
por 31.12.2014 / 08:59
1

Eu modifiquei o script do Gnought, que é uma modificação do script do quanta para remover alguns erros de código e modifiquei os resultados para parecer mais com a saída original do check_nt, que fornece dados melhores ao analisar tendências ao longo do tempo, bem como dados de desempenho. sendo adicionado novamente.

#!/bin/bash
# Date: 2015-06-30
# Purpose: A wrapper script for check_nt to set threshold for exact space
#          free rather than just percentage.  Useful on VERY large drives.
# Example: check_disk_by_size.sh -H 192.168.0.1 -l c -w 10240 -c 5120

usage() { echo "$0 -H host [-s password] [-p port] [-w warning] [-c critical] [-l params]" 1>&2; exit 1; }

while getopts ":H:s:p:l:w:c:" opt; do
    case "${opt}" in
        H ) HOST_NAME=$OPTARG;;
        s ) PASSW0RD=$OPTARG;;
        p ) PORT=$OPTARG;;
        l ) DISC=$OPTARG;;
        w ) WARN_THRESHOLD=$OPTARG;;
        c ) CRITICAL_THRESHOLD=$OPTARG;;
        \?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;;
        : ) echo "Option -$OPTARG requires an argument." >&2; exit 1;;
    esac
done
shift $((OPTIND-1))

if [[ -z "${HOST_NAME}" ]] || [[ -z "${PASSW0RD}" ]] || [[ -z "${PORT}" ]] || [[ -z "${DISC}" ]] || [[ -z "${WARN_THRESHOLD}" ]] || [[ -z "${CRITICAL_THRESHOLD}" ]] ; then
    usage
fi

CHECKRESULT='/usr/local/nagios/libexec/check_nt -H ${HOST_NAME} -p ${PORT} -s ${PASSW0RD} -v USEDDISKSPACE -l ${DISC}'
PERFDATA='echo ${CHECKRESULT} | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $2 }''
FREESPACE='echo ${CHECKRESULT} | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $1 }''
USEDSPACE='echo ${CHECKRESULT} | awk -F"- " '{ print $3 }''
TOTALSPACE='echo ${CHECKRESULT} | awk -F"- " '{ print $2 }''

if [[ -z ${FREESPACE} ]]; then
    ## Command failed or server offline
    echo "ERROR ERROR: Command failed"
    exit 1
fi

SIZE='echo $FREESPACE | awk '{ print $2 }''
UNIT='echo $FREESPACE | awk '{ print $3 }''

if [[ ${UNIT} == "Gb" ]]; then
    SIZE='echo ${SIZE} \* 1024 | bc'
fi

if [[ 'echo "${SIZE} >= ${WARN_THRESHOLD}" | bc' -eq 1 ]]; then
    echo "${DISC}:\ OK - ${TOTALSPACE} - ${USEDSPACE} - ${FREESPACE} | ${PERFDATA}"
    exit 0
elif [[ 'echo "${SIZE} < ${WARN_THRESHOLD}" | bc' -eq 1 && 'echo "${SIZE} > ${CRITICAL_THRESHOLD}" | bc' -eq 1 ]]; then
    echo "${DISC}:\ WARNING - ${TOTALSPACE} - ${USEDSPACE} - ${FREESPACE} | ${PERFDATA}"
    exit 1
elif [[ 'echo "${SIZE} <= ${CRITICAL_THRESHOLD}" | bc' -eq 1 ]]; then
    echo "${DISC}:\ CRITICAL - ${TOTALSPACE} - ${USEDSPACE} - ${FREESPACE} | ${PERFDATA}"
    exit 2
fi
    
por 30.06.2015 / 23:33