Мониторинг URL-адресов с Nagios

Я пытаюсь отслеживать фактические URL-адреса, а не только хосты с Nagios, поскольку я управляю общим сервером с несколькими веб-сайтами, и я не думаю, что его достаточно просто контролировать базовый HTTP-сервис (я включаю в самом низу этого вопроса небольшое объяснение того, что я предполагаю).

(Обратите внимание: обратите внимание, что Nagios установлен и запущен внутри chroot в системе CentOS. Я построил nagios из исходного кода и использовал yum для установки в этот корень всех необходимых зависимостей и т.д.)


Сначала я нашел check_url, но после установки его в /usr/lib/nagios/libexec я продолжал получать "возврат код 255 за пределами границ". Это, когда я решил начать писать этот вопрос (но подождите! Там еще один плагин решил сначала попробовать!)

После рассмотрения этого вопроса, у меня была почти такая же проблема, с которой я столкнулся с check_url, я решил открыть новый вопрос по этому вопросу, a) Я не использую NRPE с этой проверкой б) Я пробовал предложения по более раннему вопросу, к которому я связался, но никто из них не работал. Например...

./check_url some-domain.com | echo $0

возвращает "0" (что указывает, что проверка прошла успешно)

Затем я выполнил инструкции по отладке Nagios Suppor t для создания временного файла debug_check_url и поместил в него следующее (затем вызывается по определению моей команды):

#!/bin/sh
echo `date` >> /tmp/debug_check_url_plugin
echo $*  /tmp/debug_check_url_plugin
/usr/local/nagios/libexec/check_url $*

Предполагая, что я не в режиме отладки, мое определение команды для запуска check_url выглядит следующим образом (внутри command.cfg):

'check_url' command definition
define command{
       command_name    check_url
       command_line    $USER1$/check_url $url$
}

(Кстати, вы также можете просмотреть, что я использовал в моем конфигурационном файле службы, в самом конце этого вопроса)


Прежде чем опубликовать этот вопрос, я решил сделать еще один выстрел в поисках решения. Я нашел плагин check_url_status и решил сделать это одним выстрелом. Чтобы сделать это, вот что я сделал:

  • mkdir/usr/lib/nagios/libexec/check_url_status/
  • загрузили как check_url_status, так и utils.pm
  • За комментарий пользователя/обзор на странице плагина check_url_status я изменил "lib" на соответствующий каталог /usr/lib/nagios/libexec/.
  • Выполните следующее:

    ./check_user_status -U some-domain.com. Когда я запускаю указанную выше команду, я продолжал получать следующую ошибку:

bash -4.1 #./check_url_status -U mydomain.com Не удается найти utils.pm в @INC (@INC содержит:/usr/lib/nagios/libexec//usr/local/lib/perl5/usr/local/share/perl5/usr/lib/perl5/vendor_perl/usr/share/perl5/vendor_perl/usr/lib/perl5/usr/share/perl5) в строке. /check _url_status 34. BEGIN failed - компиляция прервана на. /check _url_status строке 34.


Итак, в этот момент я сдаюсь и задаю пару вопросов:

  • Какой из этих двух плагинов вы бы порекомендовали? check_url или check_url_status? (Прочитав описание check_url_status, я чувствую, что это может быть лучшим выбором. Ваши мысли?)
  • Теперь, как я могу исправить мою проблему с помощью какого-либо плагина, который вы рекомендовали?

В начале этого вопроса я упомянул, что буду включать небольшое объяснение того, что я предполагаю. У меня есть файл, называемый services.cfg, где есть все определения моих сервисов (представьте, что!).

Ниже приведен фрагмент моего файла определения сервиса, который я написал для использования check_url (потому что в то время я думал, что все работает). Я создам службу для каждого URL, который хочу отслеживать:

###
# Monitoring Individual URLs...
#
###
define service{
        host_name                       {my-shared-web-server}
        service_description             URL: somedomain.com
        check_command                   check_url!somedomain.com
        max_check_attempts              5
        check_interval                  3
        retry_interval                  1
        check_period                    24x7
        notification_interval           30
        notification_period             workhours
}

Ответ 1

Я делал вещи слишком сложными.

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

Определение моего сервиса:

  define service{
            host_name                       myers
            service_description             URL: my-url.com
            check_command                   check_http_url!http://my-url.com
            max_check_attempts              5
            check_interval                  3
            retry_interval                  1
            check_period                    24x7
            notification_interval           30
            notification_period             workhours
    }

Определение моей команды:

define command{
        command_name    check_http_url
        command_line    $USER1$/check_http -I $HOSTADDRESS$ -u $ARG1$
}

Ответ 2

Лучший способ отслеживания URL-адресов - использовать webinject, который можно использовать с nagios.

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

bash -4.1 #./check_url_status -U mydomain.com Не удается найти utils.pm в @INC (@INC содержит:

Ответ 3

Вы можете создать плагин script. Это легко, вам нужно только проверить URL-адрес с чем-то вроде:

`curl -Is $URL -k| grep HTTP | cut -d ' ' -f2`

$URL - это то, что вы передаете команде script по параметру.

Затем проверьте результат: если у вас есть код больше 399, у вас есть проблема, иначе... все в порядке! Это правильный режим выхода и сообщение для Nagios.