Я запрашиваю некоторые значения уровня сигнала, измеренные в дБм, и хост SNMP на устройстве удаления сообщает эти значения как отрицательные значения, то есть -90 дБм. Однако кажется, что check-snmp не может обрабатывать отрицательные числа как часть своих пороговых значений. Если я указываю значения как часть коллекции OID, он принимает синтаксис, но преобразует значение snmp в положительное, таким образом всегда генерируя ПРЕДУПРЕЖДЕНИЕ / КРИТИЧЕСКИЙ результат:
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
Если я запускаю его с одним OID, я получаю сообщение об ошибке формата:
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
изменить: если я использую -w = range, он правильно анализирует, но все равно преобразует значение в положительное.
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
И если я запускаю его без определенных порогов, он работает правильно и возвращает правильное значение. Это делает графики правильными, однако никогда не будет генерировать уведомление, когда оно выходит за пределы допустимого диапазона:
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
Что я здесь делаю не так? Как мне, например, генерировать КРИТИЧЕСКИЙ, когда минимальный уровень шума составляет -80 дБм или выше, ПРЕДУПРЕЖДЕНИЕ, когда он составляет от -85 до -80 дБм, и ОК, когда -85 дБм или ниже? Должен ли я писать собственные подключаемые модули SNMP при работе с отрицательными значениями?
-w = -85: -c = -80: это синтаксис, который мне нужен, но check_snmp по-прежнему преобразует вывод в положительный, когда возникает ошибка. Отчет об ошибке отправлен.
Я использовал -w ~: 0.5 -c 0.5. Использование ~: 0.5 допускает отрицательные значения. Я получил это с сайта: https://nagios-plugins.org/doc/guidelines.html#THRESHOLDFORMAT