LinuxForum.Fans
Тема

Nagios + NRPE

Автор: enjoy1288 30 сообщений 4028 просмотров
#277256

Доброго времени суток господа линуксойды, прошу вашего совета, а то сам уже весь мозг сломал, не могу найти причину :(
Есть сервер с nagios, есть сервер с логами, на котором выполняется скрипт

text

#!/bin/bash                                                                                                                                                                                                    
exit_state=3                                                                                                                                                                                                   
STATE_OK=0                                                                                                                                                                                                     
STATE_CRITICAL=2                                                                                                                                                                                               
##################################                                                                                                                                                                             
                                                                                                                                                
                  sloterror=`/bin/cat /var/log/bd6808.log|tail -200| grep "CARD_HWFAIL"| wc -l`                                                                                                                
                  if (( $sloterror >= "1" ))                                                                                                                                                                   
                        then                                                                                                                                                                                   
                        echo "SLOT CRITICAL ERROR"                                                                                                                                                             
                            state=CRITICAL                                                                                                                                                                     
                                exit_state=$STATE_CRITICAL                                                                                                                                                     
                            else                                                                                                                                                                               
                        echo "BD slot OK"                                                                                                                                                                      
                                state=OK                                                                                                                                                                       
                                exit_state=$STATE_OK                                                                                                                                                           
                    fi                                                                                                                                                                                         
                                                                                                                                                                                                               
exit $exit_state                                                                                                                                                                                               
                    

Скрипт ищет ошибки в логе с текстом card_hwfail, считает сколько их штук и соответственно выводит результат, есть ошибки или нет, с ним все в порядке, т.е. считает все верно, но если на сервере с нагиосом выполнять этот скрипт по nrpe, то он постоянно показывает что ошибок нет

text
/usr/local/nagios/libexec/check_nrpe -H хх.хх.хх.хх -c check_slot
BD slot OK

Следовательно Nagios постоянно думает, что все работает нормально, подскажите пжста в какую сторону хоть копать

#277263

Может sloterror принимает какое-то неправильное значение?
Во-первых, замени | wc -l на -c. Ведь grep сам умеет считать число строк.
Во-вторых сделай отладочный вывод $sloterror, чтобы понять почему условие не выполняется.
В-третьих, не надо усложнять условия. >= "1" заменить бы на > 0.

#277265

Мне почему то кажется, что по NRPE не открывается лог, потому что если указать в скрипте $sloterror = 15; то я получаю желаемый результат, т.е. по NRPE sloterror принимает $STATE_CRITICAL
во первых и третих сейчас попробую, а отладочный вывод как сделать, подскажите пжста

#277268

Добавь вывод
echo "Debug sloterror: $sloterror"

#277272

На сервере получаем как и положено

text
SLOT CRITICAL ERROR
Debug sloterror: 21

на nagios получаем

text
BD slot OK
Debug sloterror: 0
#277276

Ну раз 0, значит ошибок нет.
Значит всё работает как и задумано.

Если же там должно быть не 0, то смотри что у тебя в этом выражении на каждой стадии получается
`sloterror=`/bin/cat /var/log/bd6808.log|tail -200| grep "CARD_HWFAIL"| wc -l`

#277277

Ну на сервере с логом я то получаю sloterror и ошибки в логе есть

#277278
enjoy1288 написал:
Ну на сервере с логом я то получаю sloterror и ошибки в логе есть

Что у тебя в этом выражении на каждой стадии получается?
`sloterror=`/bin/cat /var/log/bd6808.log|tail -200| grep "CARD_HWFAIL"| wc -l`

#277279

Сейчас пробую оставить только
sloterror=`/bin/cat /var/log/bd6808.log | grep "CARD_HWFAIL" -c`
на сервере ошибка есть, а по NRPE ее нет

#277322

Что выдаёт /bin/cat /var/log/bd6808.log ?

#277340

Как и должно, содержимое файла bd6808.log

#277341

Ну а это?
/bin/cat /var/log/bd6808.log | grep "CARD_HWFAIL"

P.S. Что ж всё клещами вытягивать надо?

#277347

Наверное мы друг друга немного недопоняли:)
есть сервер "А", на котором находится этот скрипт и работает как надо, т.е. выполняет то, что от него требуется
есть сервер "B", на котором находится nagios и который по NRPE запускает вышесказанный скрипт, но результаты на А и В разные, т.е.
на А результат = "SLOT CRITICAL ERROR"
при запуске на В
/usr/local/nagios/libexec/check_nrpe -H **.**.**.** -c check_slot
результат = "BD slot OK"


/bin/cat /var/log/bd6808.log | grep "CARD_HWFAIL" как и положено ищет все строки в которых встречается CARD_HWFAIL

#277349

Ну так добавь больше отладочных выводов. Вот гляди, ты говоришь, что

/bin/cat /var/log/bd6808.log | grep "CARD_HWFAIL" как и положено ищет все строки в которых встречается CARD_HWFAIL

Но при этом вывод /bin/cat /var/log/bd6808.log | grep "CARD_HWFAIL" -c у тебя равен 0. Так не может быть!!!
Если вывод первого не пусто, то вывод второго не равен нулю. Противоречие. Разберись где ты запутался.

#277355

запутался....
на сервере А сейчас есть строки с CARD_HWFAIL и результат скрипта >0
Давайте попробуем заново разобрать скрипт

text

# открываем лог, в последних 200 строках ищем строку в которой имеется "CARD_HWFAIL"  и выводим количество таких строк
                          sloterror=`/bin/cat /var/log/bd6808.log|tail -200| grep "CARD_HWFAIL" -c`                                                                                                               
 # если количество строк больше 0, тогда статус CRITICAL ERROR             
             if (( $sloterror > "0" ))                                                                                                                                                                    
                        then                                                                                                                                                                                   
                        echo "SLOT CRITICAL ERROR"                                                                                                                                                             
                            state=CRITICAL                                                                                                                                                                     
                                exit_state=$STATE_CRITICAL  
# иначе статус OK                                                                                                                                                   
                            else                                                                                                                                                                               
                        echo "BD slot OK"                                                                                                                                                                      
                                state=OK                                                                                                                                                                       
                                exit_state=$STATE_OK                                                                                                                                                           
                    fi           

верно я понимаю? вроде ж не совсем дурак...:(

#277356

Верно.

#277359
Vascom написал:

Но при этом вывод /bin/cat /var/log/bd6808.log | grep "CARD_HWFAIL" -c у тебя равен 0. Так не может быть!!!

равен 0 если запускаю на сервере B, а если на сервере А, то >0

#277361

Хорошо. Теперь запишем в файл вывод этого /bin/cat /var/log/bd6808.log | grep "CARD_HWFAIL" > /tmp/gebug_script.log
И посмотрим как он выглядит в обоих случаях.

#277365

на сервере А выдает это,

text
./check_slot: line 12: ((: > 0 : ������ ����������: ��������� ������� (error token is "> 0 ")
BD slot OK

в debug_script.log пусто в обоих случаях

#277368

Эээ, покажи скрипт, что-то ты там не так изменил.
Это
/bin/cat /var/log/bd6808.log | grep "CARD_HWFAIL" > /tmp/gebug_script.log
надо было просто добавить в скрипт не меняя других строк.

Войдите или зарегистрируйтесь, чтобы ответить.