Emitir avisos com saída de texto de check_snmp no Nagios

2

Estou tentando configurar o Icinga para consultar o status SMART dos discos rígidos carregados em um storage array que estou configurando.

O problema que enfrentei é a resposta da matriz quando a consulta do OID de uma unidade é texto e não um número.

./check_snmp -H 10.0.10.17 -P 2c -C public -o .1.3.6.1.4.1.24681.1.2.11.1.7.1
SNMP OK - "GOOD" |

Estou acostumado a trabalhar com números em vez de strings quando lida com a saída de check_snmp. Alguém sabe como posso criar uma notificação crítica ou de aviso quando algo diferente da saída GOOD é retornado?

    
por DKNUCKLES 31.03.2014 / 21:20

4 respostas

1

Você certamente já sabe que Nagios precisa de um número (0,1,2,3) como código de status de retorno do comando iniciado.

se $? para o comando check_snmp sempre retornar 0 , meu conselho seria escrever seu próprio cheque adicionando pipe e grep ao comando check_snmp , algo como:

./check_snmp -H 10.0.10.17 -P 2c -C public -o .1.3.6.1.4.1.24681.1.2.11.1.7.1 | grep GOOD

Isso retornará 0 (OK) se a palavra GOOD for encontrada na saída, caso contrário, ela retornará 1 (Warning) .

    
por 31.03.2014 / 22:29
1

Você não pode usar o estoque check_snmp com valores não numéricos; você tem que escrever um wrapper em torno do check_snmp plugin, ou usar / escrever um plugin que verifique os valores da string. É por isso que existem centenas de variantes de plugins SNMP para hardware específico. Esse OID é para um QNAP NAS, certo?

Normalmente, você descobrirá que outra pessoa já fez o trabalho por você. Provavelmente, você pode usar um desses plug-ins da forma como está ou bifurcá-los:

por 31.03.2014 / 23:32
0

Se você precisar de nomes em vez de números (OID), precisará converter esses OID em mibs. Baixe os mibs necessários para o propósito (disco rígido, interface de um roteador, serviços, etc ...). Após o download, tente usar o script com um determinado nome para o propósito. por exemplo, se eu gosto de usar check_snmp para verificar o uptime doente faça isso: ./check_snmp -H iphosts -P 2c -C public -o sysUpTime.0 você pode então substituir o número OID com o nome mibs ... isso é tudo ponto

    
por 31.03.2014 / 22:43
0

Você deve escrever seu próprio roteiro.

Neste script, você pode usar as seguintes opções do plugin check_snmp:

-s, --string=STRING: Return OK state (for that OID) if STRING is an exact match
-r, --ereg=REGEX: Return OK state (for that OID) if extended regular expression REGEX matches
-R, --eregi=REGEX: Return OK state (for that OID) if case-insensitive extended REGEX matches --invert-search: Invert search result (CRITICAL if found)

Por exemplo, eu tenho que verificar o estado de 3 hdd no meu servidor, com um OID especificado. Este OID retorna a string "Normal" quando tudo estiver ok e "Crítico" quando houver algum problema, então meu comando é:

./check_snmp -H <@IP> -C <community> -o .1.3.6.1.4.1.2.3.51.3.1.12.2.1.3.0 --invert-search -r "Critical" -o .1.3.6.1.4.1.2.3.51.3.1.12.2.1.3.1 -r "Critical" -o .1.3.6.1.4.1.2.3.51.3.1.12.2.1.3.2  -r "Critical"  -o -l "Drive 0" -l "Drive 1" -l "Drive 2" -l "Drive 3"

Ele retornará quando tudo estiver correto:

SNMP OK - Drive 0 "Normal" Drive 1 "Normal" Drive 2 "Normal" Drive 3 "Normal" |

e quando há um problema:

SNMP CRITICAL - Drive 0 "Normal" Drive 1 "Normal" Drive 2 "Normal" Drive 3 *"Critical"* 

Se você deseja ter números em vez de strings, você deve modificar os resultados que seu script enviará para nagios. No meu caso, eu queria um texto com a saída normal de check_snmp e o valor 1 para o estado Normal e 0 para o valor crítico para perfdata. Então, no meu script eu fiz assim:

...    
test="$(/usr/lib/nagios/plugins/check_snmp -H <snip> -C <snip> --invert-search -o .1.3.6.1.4.1.2.3.51.3.1.12.2.1.3.$i -r Critical)"

if (echo $test | grep -q Critical); then
    #echo "Drive $i" = 0        
    texte+="Drive_$i CRITICAL, "
    perfdata+="Drive_$i=0 "
    crit=1
else
    #echo "Drive $i" = 1
    texte+="Drive_$i Normal, "
    perfdata+="Drive_$i=1 "
...
if [ $crit = 1 ]
then
    resultat="CRITICAL: "
    result_code=2
else
    resultat="OK: "
    result_code=0
fi
resultat+="$texte|$perfdata"
echo $resultat
exit $result_code

A saída do seu script será:

CRITICAL: Drive_0 Normal, Drive_1 Normal, Drive_2 Normal, Drive_3 
Normal, Drive_4 Normal, Drive_5 Normal, Drive_6 Normal, Drive_7 Normal, 
Drive_8 CRITICAL, Drive_9 CRITICAL, Drive_10 CRITICAL, |Drive_0=1
Drive_1=1 
Drive_2=1 Drive_3=1 Drive_4=1 Drive_5=1 Drive_6=1 Drive_7=1 Drive_8=0 
Drive_9=0 Drive_10=0

Com a esquerda do "|" o texto aparecerá em nagios, e à direita os valores para perfdata por disco.

nagios definem o estado do serviço dependendo do valor retornado pela função exit

    
por 26.10.2015 / 16:51