Главная » Мониторинг » Скрещивание ежа и ужа. Мониторинг доступности сайта с помощью WhatsUp Gold.

Скрещивание ежа и ужа. Мониторинг доступности сайта с помощью WhatsUp Gold.

Тема мониторинга всегда была и будет актуальной. Регулярная проверка доступности служб, загруженности серверов, скорости ответа приложений и других параметров IT-сервисов, позволяет составить общую картину работы IT-инфраструктуры, выявить ее узкие места и оперативно обнаружить аварию. На рынке присутсвует достаточное количество систем мониторинга. В данной статье я опишу способ мониторинга работы веб приложения с помощью системы WhatsUp Gold.

В этой системе есть готовые мониторы, который позволяют выполнять различные проверки доступности веб-приложений, однако, иногда возникает задача, проверить механизм авторизации на сайте. И тут уже приходится идти на различные хитрости. В частности, штатный монитор, позволяющий мониторить контент веб-приложения, не умеет работать с формами авторизации. То есть, например, если на сервере используется basic-авторизация, он сможет ее пройти, а вот в случае, когда мы имеем дело с формами, он уже не поможет. В таком случае, на помошь может прийти свой самописный монитор. WhatsUp позволяет для этого использовать скрипты написанные на vbs и js (то есть, фактически штатный WSH). Признаюсь честно, написать на vbs парсер страницы с авторизацией у меня не хватило ни навыка, ни усидчивости и я решил посмотреть в сторону готовых решений.

После непродолжительного поиска, мне попался на глаза весьма интересный модуль — http://exchange.nagios.org/directory/Plugins/Websites,-Forms-and-Transactions/check-form-mechanize/details . Данный скрипт умеет проходить авторизацию и проверять контент на странице. Правда, есть одна загвоздка — он написан на питоне и предназначен для Nagios. Попробуем заставить его работать с нашей системой мониторинга 🙂

Для начала, необходимо немного подправить структуру скрипта. В частности, стоит убрать лишнее из вывода результата проверок, поскольку достаточно лишь численного значения, для характеристики состояния. Для это нужно поправить определение функции checks(). В таком виде, с выводом скрипта будет проще работать, поскольку результат его работы нам придется обрабатывать повторно. Достаточно будет привести вывод к виду:

        if elapsed >= args.critical:

print «%s» % (errorarray[3]),

return(2)

Помимо этого, необходимо добавить конструкцию try-catch, при обращении к веб приложению, чтобы корректно обрабатывать ситуацию, когда веб-приложение недоступно. В таком случае, при невозможности открыть страницу авторизации, скрипт выведет в качестве результата код недоступности сайта, вместо того, чтобы выдавать ошибку приложения.

try:

br.open(args.url)

except:

print «%s» % (errorarray[4]),

sys.exit(retcode)

(Окончательный вариант скрипта приведен в конце статьи).

Теперь, настало время подключить получившийся скрипт к WhatsUp. Напрямую это сделать не получится, поскольку WhatsUp не может использовать скрипты на питоне. Однако, можно сделать обвязку на vbs, для нашего скрипта.

Первым делом необходимо установить саму среду исполнения python. Для этого необходимо загрузить продукт компании ActiveState — ActivePython http://www.activestate.com/activepython . Установка проста и проходит в штатном режиме. После того, как она закончится появится возможность исполнять скрипты написанные на питоне. Сам интерпритатор, по умолчанию, располагается в директории C:\Python26\.

Скрипт мониторинга зависит от двух дополнительных модулей — argparse и mechanize. Установить их достаточно легко. Необходимо загрузить их (в случае argparse по адресу — http://code.google.com/p/argparse/downloads/list (я использовал argparse-1.1.zip ), а в случае mechanize, по адресу http://wwwsearch.sourceforge.net/mechanize/download.html (я загружал mechanize-0.2.5.zip)) и после этого распаковать. Теперь достаточно открыть командную строку, перейти в каталог, где распакован нужный модуль и выполнить команду C:\Python26\python.exe setup.py install. Поступив так с каждым из модулей, получаем готовую среду для исполнения.

Теперь, для того, чтобы выполнить проверку работы веб-приложения, достаточно выполнить команду:

C:\Python26\python.exe C:\Python26\check_form.py -u https://domain.ru -f WebLogon -n «Username=user&Password=password» -e «Content»  -w 10 -c 20

Тут все достаточно просто: -u задает адрес веб-приложения (с указанием протокола), -f задает название формы, -n задает строку авторизации (для правильного задания имени формы и строки авторизации не обходимо посмотреть названия соответсвующих элементов в коде страницы), -e задает строку, поиск которой мы осуществляем на странице, в случае удачной авторизации, а -w и -c время отклика, при котором выдается предупреждение или критическая ошибка.

Осталось, только добиться выполнения этого скрипта в среде системы мониторинга.

Тут уже на помошь приходит обвязка в виде vb-скрипта. vb-скрипт позволяет создавать объект исполняющий указанную ему программу.

Для этого достаточно совершить вызов:

Set sh = CreateObject(«WScript.Shell»)

cmd = «command»

Set exec =  sh.Exec(cmd)

batchOutput = exec.StdOut.ReadAll()

ExecuteWithTerminalOutput = exec.Status

Где вместо «command» необходимо подставить значение выполняемой команды.

В строке «Set exec =  sh.Exec(cmd) » происходит исполнение указанной команды, а последующие две строки считывают результат выполнения.

Таким образом, разбирая результат вывода команды можно определить реакцию на результаты ее выполнения.

Тут, правда, есть одна тонкость. В результат попадает перевод строки. То есть напрямую сравнивать результат с искомым значением нельзя — они априори будут не равны. Для того, чтобы сравнение велось корректно, можно воспользоваться следующей уловкой:

Str0 = «0» + Chr(13) + Chr(10)

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

В итоге, срикпт принимает такой вид:

Set sh = CreateObject(«WScript.Shell»)

cmd = «C:\Python26\python.exe C:\Python26\check_form.py -u https://domain.ru -f WebLogon -n » & Chr34 & «Username=user&Password=password» & Chr34 &

» -e » & Chr34 & «Content» & Chr34 & » -w 10 -c 20″

Set exec = sh.Exec(cmd)

batchOutput = exec.StdOut.ReadAll()

ExecuteWithTerminalOutput = exec.Status

Str0 = «0» + Chr(13) + Chr(10)

Str1 = «1» + Chr(13) + Chr(10)

Str2 = «2» + Chr(13) + Chr(10)

Str3 = «3» + Chr(13) + Chr(10)

Str4 = «4» + Chr(13) + Chr(10)

If StrComp(CStr(Str0),CStr(batchOutput)) = 0 Then

Context.LogMessage «Recieved expect string»

Context.SetResult 0, «No error»

End If

If StrComp(CStr(Str1),CStr(batchOutput)) = 0 Then

Context.LogMessage «host slow responding»

Context.SetResult 0, «host slow responding»

End If

If StrComp(CStr(Str2),CStr(batchOutput)) = 0 Then

Context.LogMessage «Failed to retrieve expect string»

Context.SetResult 1, «Failed to retrieve expect string»

End If

If StrComp(CStr(Str3),CStr(batchOutput)) = 0 Then

Context.LogMessage «host critical response time»

Context.SetResult 1, «host critical response time»

End If

If StrComp(CStr(Str4),CStr(batchOutput)) = 0 Then

Context.LogMessage «could not connect to portal»

Context.SetResult 1, «could not connect to portal»

End If

(использование » & Chr34 & » вместо кавычек в команде объясняется необходимостью экранирования кавычек внутри команды)

Как видно, получившийся скрипт весьма прост. Он выполняет среду python с нашим скриптом мониторинга, а затем разбирает результат вывода, в зависимости от которого и присваивает статус нашему мониору. Например, если скрипт вернул значение 0, то все хорошо и сайт работает нормально. А если скрипт вернул 4, то значит все плохо, и веб-приложение даже не отвечает или же, если скрипт вернул 2, то значит что приложение работает, а вот авторизация не проходит. (именно для этих целей и редактировался вывод скрипта мониторинга, чтобы не приходилось разбирать не нужную дополнительную информацию).

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

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

Окончательный скрипт мониторинга — check_form.py я выложил отдельно на скайдрайве, чтобы не перегружать саму статью. Ссылка для загрузки.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s