Предупреждения о проблемах с текстовым выводом check_snmp в Nagios

Самый легкий способ пойти об этом состоит в том, чтобы загрузить последний ASDM с сайта Cisco и подключения с помощью этого.

Насколько я знаю, можно загрузить JAR с ASA и выполнить его вручную (предпочтительно с входом вывода), но я не помню сверху головы, где найти его на asa.

Я боюсь, что это весьма распространено с ASDM :(

2
задан 31 March 2014 в 22:20
5 ответов

Вы наверняка уже знаете, что Nagios требуется число (0,1,2,3) в качестве кода статуса возврата из запущенной команды.

if $? для команды check_snmp всегда возвращает 0 , я бы посоветовал написать свой собственный чек, добавив pipe и grep ] в команду check_snmp , например:

./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

Это вернет 0 (OK) , если в выходных данных будет найдено слово GOOD , в противном случае оно вернет 1 (Предупреждение) .

1
ответ дан 3 December 2019 в 11:43

Нельзя использовать стандартный check_snmp с нечисловыми значениями; вам нужно либо написать оболочку вокруг плагина check_snmp , либо использовать / написать плагин, который проверяет строковые значения. Вот почему существуют сотни вариантов подключаемых модулей SNMP для конкретного оборудования. Этот OID предназначен для QNAP NAS, верно?

Обычно вы обнаружите, что кто-то уже сделал эту работу за вас. Вероятно, вы можете использовать один из этих подключаемых модулей как есть или выполнить их форк:

1
ответ дан 3 December 2019 в 11:43

Если вам нужны имена вместо чисел (OID), вам нужно преобразовать эти OID в MIB. Загрузите необходимые mib-файлы для данной цели (жесткий диск, интерфейс маршрутизатора, службы и т. Д.). После загрузки попробуйте использовать для этой цели сценарий с заданным именем. например, если мне нравится использовать check_snmp для проверки времени безотказной работы, я сделаю следующее: ./ check_snmp -H iphosts -P 2c -C public -o sysUpTime.0 вы можете затем заменить номер OID именем mibs ... вот и все

0
ответ дан 3 December 2019 в 11:43

Вы должны написать свой собственный сценарий.

В этом сценарии вы можете использовать следующие параметры плагина check_snmp:

-s, --string = STRING: Возвращает состояние ОК (для этого OID), если СТРОКА является точным совпадением
-r, --ereg = REGEX: Возвращает состояние ОК (для этого OID), если расширенное регулярное выражение REGEX соответствует
-R, - -eregi = REGEX: Возвращает состояние ОК (для этого OID), если соответствует расширенному REGEX без учета регистра - invert-search: Инвертировать результат поиска (КРИТИЧЕСКИЙ, если найден)

Например, мне нужно проверить состояние 3 жестких дисков на моем сервере с указанным OID. Этот OID возвращает строку «Нормальный», когда все в порядке, и «Критическое», когда есть проблема, поэтому моя команда:

./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"

Она вернется, когда все в порядке:

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

и когда возникнет проблема:

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

Если вы хотите использовать числа вместо строк, вы должны изменить результаты, которые ваш скрипт будет отправлять в nagios. В моем случае мне нужен текст с нормальным выходом check_snmp и значением 1 для нормального состояния и 0 для критического значения для perfdata. Итак, в моем сценарии я сделал следующее:

...    
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

Выход из вашего сценария будет:

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

С слева от "|" текст будет отображаться в nagios, а справа - значения для perfdata по диску.

nagios определяют состояние службы в зависимости от значения, возвращаемого функцией exit

0
ответ дан 3 December 2019 в 11:43

У меня была та же проблема, как только мне пришлось установить предупреждение или критическое как строку, поэтому я просто использовал ее с параметрами --invert-search и --ereg, например:

./check_snmp -P 3 -U monitoring_icinga -L authPriv -a SHA -x AES -A 'secr3t' --privpasswd='secr3t' 10.155.0.1 -o .1.3.6.1.4.1.25461.2.1.2.1.11.0 -r Non-functional --invert-search; echo $?
SNMP OK - "active" | 
0
./check_snmp -P 3 -U monitoring_icinga -L authPriv -a SHA -x AES -A 'secr3t' --privpasswd='secr3t' 10.155.0.1 -o .1.3.6.1.4.1.25461.2.1.2.1.11.0 -r active --invert-search; echo $?
SNMP CRITICAL - *"active"* | 
2

попробуйте это:

./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 --ereg GOOD --invert-search
0
ответ дан 20 August 2020 в 07:36

Теги

Похожие вопросы