【问题标题】:Monitoring URLs with Nagios使用 Nagios 监控 URL
【发布时间】:2012-02-12 05:00:35
【问题描述】:

我正在尝试使用 Nagios 监控实际 URL,而不仅仅是主机,因为我与多个网站运行共享服务器,我认为仅监控基本 HTTP 服务是不够的(我包括在这个问题的最底部,对我的设想进行了一个小解释)。

(旁注:请注意,我在 CentOS 系统的 chroot 中安装并运行了 Nagios。我从源代码构建了 nagios,并使用 yum 将所有需要的依赖项安装到此根目录中,等等...)


我首先找到了check_url,但在将其安装到 /usr/lib/nagios/libexec 后,我一直收到“255 的返回码超出范围”错误。那是我决定开始写这个问题的时候(但是等等!我决定先尝试另一个插件!)

在查看了This Question 之后,我在 check_url 中遇到了几乎相同的问题,我决定就该主题提出一个新问题,因为 a) 我没有在此检查中使用 NRPE b)我尝试了对我链接到的早期问题提出的建议,但没有一个有效。比如……

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

返回“0”(表示检查成功)

然后我按照Nagios Support 上的调试说明创建了一个名为 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. 根据用户在 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 无法在 @INC 中找到 utils.pm(@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 的文件,它是我所有服务定义所在的位置(想象一下!)。

下面是我的服务定义文件的sn-p,是我写的使用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
}

【问题讨论】:

    标签: monitoring nagios


    【解决方案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 的更好方法是使用可与 nagios 一起使用的 webinject。

      下面的问题是由于你没有perl包utils尝试安装它的原因。

      bash-4.1# ./check_url_status -U mydomain.com 在@INC 中找不到utils.pm(@INC 包含:

      【讨论】:

        【解决方案3】:

        你可以制作一个脚本插件。这很简单,您只需使用以下内容检查 URL:

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

        $URL 是您通过参数传递给脚本命令的内容。

        然后检查结果:如果您的代码大于 399,则说明有问题,否则...一切正常!然后是正确的退出模式和 Nagios 的消息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多