Nagios SNMP: разные OID для одного и того же значения
С Nagios я хочу прочитать имя устройства сотен устройств Ubiquity. Это значение имеет один OID для некоторых из них и другой для других. Лучший способ, который я получил, - использовать этот скрипт:
$1/check_snmp -H $2 -o .1.2.840.10036.3.1.2.1.3.5 > /tmp/$2.snmp.nagios.tmp
status=$?
if [ $status -ne 0 ]; then
$1/check_snmp -H $2 -o .1.2.840.10036.3.1.2.1.3.9 > /tmp/$2.snmp.nagios.tmp
status=$?
fi
cat /tmp/$2.snmp.nagios.tmp
exit $status
Что мне здесь не нравится, так это то, что он использует файловую систему, но я не знаю, как прочитать вывод команды в одну переменную и код выхода команды в другую переменную.
Есть ли способ написать это, чтобы он использовал только переменные?
Нет ли лучшего способа достичь главной цели?
2 ответа
Вы можете напрямую использовать команду snmpget вместо check_snmp, потому что check_snmp будет использовать snmpget (или другой инструмент инструментов netsnmp) и работает с результатом, сохраненным в переменной.
Я вставляю сюда скелет скрипта, который я использую для этого:
function control_error {
echo "UNKNOWN : Error during operation"
exit 3
}
drive="$(snmpget -v1 -Ovq -c <community snmpv1> $IPadress .1.3.6.1.4.1.2.3.51.3.1.13.1.3.1.2.$i)"
if [ $? != 0 ]; then control_error;fi
drive="$(echo $drive | sed -e 's/"//g')"
...
Этот скрипт считывает OID и сохраняет результат в переменной drive.
он проверяет возможную ошибку snmpget и возвращает 3 (неизвестно для nagios), если проблема.
Варианты snmpget:
- версия snmp -v1
- -c сообщество
- -Ovq OUPUT параметры, которые возвращают только результат без запрашиваемого OID
После того, как вы можете работать с вашей переменной, например, в этом скрипте с echo и sed
Я обычно делаю это так:
data=$(your command)
result=$?
Таким образом, вы получите вывод вашей команды в $data
и код возврата в $result
, Но, может быть, есть гораздо приятнее.