Мониторинг URL с помощью Nagios - PullRequest
12 голосов
/ 12 февраля 2012

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

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


Сначала я нашел check_url , но после установки его в / usr / lib / nagios/ libexec, я продолжал получать сообщение об ошибке «Код возврата 255 выходит за границы».Именно тогда я решил начать писать этот вопрос (но подождите! Есть еще один плагин, который я решил попробовать первым!)

После просмотра Этот вопрос , у которого была практически та же проблема, что и у меняс check_url я решил открыть новый вопрос по этому вопросу, потому что а) я не использую 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 и решил попробовать его.Чтобы сделать это, вот что я сделал:

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

    ./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 не удалось - компиляция прервана в строке ./check_url_status 34.


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

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

В начале этого вопроса я упомянул, что приведу небольшое объяснение того, что я предполагаю.У меня есть файл с именем 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
}

Ответы [ 3 ]

25 голосов
/ 21 февраля 2012

Я делал вещи СЛИШКОМ слишком сложными.

Встроенный / установленный по умолчанию плагин 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 голосов
/ 25 июля 2012

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

Следующая проблема связана с тем, что у вас нет пакета perl, который пытается установить его.1004 * bash-4.1 # ./check_url_status -U mydomain.com Не удается найти utils.pm в @INC (@INC содержит:

1 голос
/ 21 января 2016

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

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

$ URL - это то, что вы передаете команде скрипта с помощью параметра.

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

...