-w = -85: -c = -80: é a sintaxe que eu precisava, mas check_snmp ainda converte a saída para positiva quando um erro é acionado. Relatório de bug arquivado.
Estou consultando alguns valores de nível de sinal medidos em dBm, e o host SNMP no dispositivo de remoção relata os valores como valores negativos, ou seja, -90 dBm. No entanto, o check-snmp parece ser incapaz de lidar com números negativos como parte de seus valores limiares. Se eu especificar os valores como parte de uma coleção de OIDs, ele aceita a sintaxe, mas converte o valor snmp em positivo, gerando sempre um resultado WARNING / CRITICAL:
root@ops-00:/usr/local/nagios/libexec# ./check_snmp -H 192.168.1.100 -o DEVICE-MIB::AverageReceiveSNR.0,DEVICE-MIB::CurrentNoiseFloor.0 -w 10:,~:-85 -c 15:,~:-80 -vvvv
/usr/bin/snmpget -t 1 -r 5 -m ALL -v 1 [authpriv] 192.168.1.100:161 DEVICE-MIB::AverageReceiveSNR.0 DEVICE-MIB::CurrentNoiseFloor.0
DEVICE-MIB::AverageReceiveSNR.0 = INTEGER: 25
DEVICE-MIB::CurrentNoiseFloor.0 = INTEGER: -97
Processing line 1
oidname: DEVICE-MIB::AverageReceiveSNR.0
response: = INTEGER: 25
Processing line 2
oidname: DEVICE-MIB::CurrentNoiseFloor.0
response: = INTEGER: -97
SNMP CRITICAL - 25 *97* | DEVICE-MIB::AverageReceiveSNR.0=25 DEVICE-MIB::CurrentNoiseFloor.0=97
Se eu executá-lo com um único OID, será exibido um erro informando que o formato está incorreto:
root@ops-00:/usr/local/nagios/libexec# ./check_snmp -H 192.168.1.100 -o DEVICE-MIB::CurrentNoiseFloor.0 -w ~:-85 -c ~:-80 -vvvv
Range format incorrect
edit: se eu usar -w = range analisa adequadamente, mas ainda converte o valor para positivo.
root@ops-00:/usr/local/nagios/libexec# ./check_snmp -H 192.168.1.100 -o DEVICE-MIB::CurrentNoiseFloor.0 -w=~:-85 -c=~:-80 -vvvv
/usr/bin/snmpget -t 1 -r 5 -m ALL -v 1 [authpriv] 192.168.1.100:161 DEVICE-MIB::CurrentNoiseFloor.0
DEVICE-MIB::CurrentNoiseFloor.0 = INTEGER: -97
Processing line 1
oidname: DEVICE-MIB::CurrentNoiseFloor.0
response: = INTEGER: -97
SNMP CRITICAL - *97* | DEVICE-MIB::CurrentNoiseFloor.0=97
E se eu o executar sem limites definidos, ele funcionará corretamente e retornará o valor correto. Isso torna os gráficos corretos, mas nunca gera uma notificação quando fora do intervalo:
root@ops-00:/usr/local/nagios/libexec# ./check_snmp -H 192.168.1.100 -o DEVICE-MIB::CurrentNoiseFloor.0 -vvvv
/usr/bin/snmpget -t 1 -r 5 -m ALL -v 1 [authpriv] 192.168.1.100:161 DEVICE-MIB::CurrentNoiseFloor.0
DEVICE-MIB::CurrentNoiseFloor.0 = INTEGER: -97
Processing line 1
oidname: DEVICE-MIB::CurrentNoiseFloor.0
response: = INTEGER: -97
SNMP OK - -97 | DEVICE-MIB::CurrentNoiseFloor.0=-97
O que estou fazendo errado aqui? Como eu poderia, por exemplo, gerar um CRITICAL quando o nível de ruído for -80 dBm ou superior, um AVISO quando estiver entre -85 e -80 dBm e um OK quando -85 dBm ou menos? Tenho que escrever meus próprios plugins SNMP ao lidar com valores negativos?
Eu usei este -w ~: 0,5 -c 0,5. Usando ~: 0,5 permite valores negativos. Eu peguei no site: link
Tags snmp nagios opsview check-snmp