Nagios usuário capaz de executar a verificação, mas falha quando executado com su-nagios -c?

1

Perdoe-me se isso já foi respondido em algum lugar - eu encontrei muitas perguntas semelhantes, mas nada que pareça corrigir meu problema.

Estou apenas testando o tempo de atividade de alguns servidores Windows no nagios e, se ultrapassar um determinado valor, desejo alertar sobre isso.

Estava funcionando ontem e, em algum momento, pareço ter quebrado as coisas, mas não consigo identificar exatamente o que está errado.

Primeiramente, como root, o teste funciona:

./libexec/check_uptime.sh x.x.x.x 28 30
1449919
OK. Uptime 16 Days.

Como nagios, via su - nagios o teste funciona:

su - nagios
-bash-3.2$ pwd
/usr/local/nagios
-bash-3.2$ ./libexec/check_uptime.sh xx.xx.xx.xx 28 30
1449969
OK. Uptime 16 Days.

No entanto, acredito que a maneira 'correta' de testar é através de su-nagios -c?

su - nagios -c "./libexec/check_uptime.sh 10.36.128.22 28 30"
1450084
OK. Uptime 16 Days.

No entanto, o comando ainda está falhando na página da Web / daemon

Uptime UNKNOWN  15-03-2016 11:04:24 0d 1h 4m 10s    3/3 0

A definição de comando parece correta para mim:

define command{
    command_name                    check_uptime
    command_line                    $USER1$/check_uptime.sh -H $HOSTADDRESS$ 25 28
}

Como é a definição de serviço:

define service{
    use                     generic-service
    hostgroup_name          Windows-Servers
    service_description     Uptime
    check_command           check_uptime
}

De alguma forma, perdeu o script em uma edição, aqui está novamente:

#!/bin/bash

## Shamelessly adapted from http://correctlife.blogspot.de/2011/02/wrapper-on-checkntuptime.html

HOSTADDRESS=$1
MAXWARN=28 # in days
MAXCRIT=30 # in days
MINCRIT=1

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

SECONDS='/usr/local/nagios/libexec/check_nt -H $HOSTADDRESS -p 12489 -s $ekr3t -v COUNTER -l "\System\System Up Time"'
#echo $SECONDS

if [ $SECONDS == 0 ]; then
        echo "UNKNOWN: No uptime recieved. Uptime Value: $SECONDS"
        exit 3
fi

HOURS=$(( $SECONDS / 60 / 60 ))
SECONDSINHOURS=$(( $HOURS * 60 * 60 ))
DAYS=$(( $HOURS / 24 ))
REMAININGSECONDS=$(( $SECONDS - $SECONDSINHOURS ))
MINUTES=$(( $REMAININGSECONDS / 60 ))
FORMEDUPTIME="${DAYS} Days"

if [[ $HOURS -lt $MINCRIT ]]; then
        echo "CRITICAL: System restarted in last hour."
        exit 2
fi

if [[ $DAYS -ge $MAXCRIT ]]; then
    echo "CRITICAL: System up over ${MAXCRIT} Days."
    exit 2
fi

if [[ $DAYS -ge $MAXWARN ]]; then
    echo "WARNING: System up over ${MAXWARN} Days."
    exit 1
fi

echo "OK. Uptime $FORMEDUPTIME."
exit 0
    
por djsmiley2k 15.03.2016 / 12:18

1 resposta

1

Eu sou um idiota.

A pista veio na definição do comando.

Em algum momento, eu adicionei '-H', o que obviamente significava que eu estava passando -H como o nome do host;)

Deveria ter sido:

define command{
command_name                    check_uptime
command_line                    $USER1$/check_uptime.sh $HOSTADDRESS$ 25 28
}
    
por 15.03.2016 / 14:22

Tags