使用Nagios监控URL

时间:2012-02-12 05:00:36

标签: monitoring nagios

我正在尝试监控实际的网址,而不仅仅是使用Nagios的主机,因为我操作了一个包含多个网站的共享服务器,我认为它不足以监控基本的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 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. 根据check_url_status插件页面上的用户评论/评论,我将“lib”更改为/ usr / lib / nagios / libexec /的正确目录。
  4. 运行以下命令:

    ./ check_user_status -U some-domain.com。 当我运行上面的命令时,我不断收到以下错误:

  5.   

    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. 现在,我如何使用您推荐的插件解决我的问题?

    3. 在这个问题的开头,我提到我会对我想象的内容做一个小小的解释。我有一个名为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 个答案:

答案 0 :(得分:25)

我让事情太复杂了。

内置/安装的默认插件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$
}

答案 1 :(得分:2)

监控网址的更好方法是使用可与nagios一起使用的webinject。

以下问题是由于你没有perl package utils尝试安装它。

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

答案 2 :(得分:1)

您可以制作脚本插件。这很容易,您只需要使用以下内容检查URL:

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

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

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