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