首页 文章

使用Nagios监控URL

提问于
浏览
12

我正在尝试使用Nagios监视实际的URL,而不仅仅是主机,因为我操作了一个包含多个网站的共享服务器,我认为它不足以监视基本的HTTP服务(我包括在内这个问题的底部是我想象的一个小解释 .

(旁注:请注意我在CentOS系统上的chroot中安装并运行了Nagios . 我从源代码构建了nagios,并使用yum在这个root中安装了所有需要的依赖项等等 . )


我首先找到check_url,但在将其安装到/ usr / lib / nagios / libexec之后,我不断收到"return code of 255 is out of bounds"错误 . 那个_1568241的另一个插件我决定先试试!)

在审查了几乎几乎同样问题的This Question之后我没有使用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插件,并决定给它一个镜头 . 要做到这一点,这就是我做的:

  • 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无法在@INC中找到utils.pm(@INC包含:/ usr / lib / nagios / libexec / / usr / local / lib / perl5 / usr / local /在./check_url_status第34行,分享/ perl5 / usr / lib / perl5 / vendor_perl / usr / share / perl5 / vendor_perl / usr / lib / perl5 / usr / share / perl5.BEGIN失败 - 编译在./check_url_status行中止34 .


所以在这一点上,我放弃了,并提出了几个问题:

  • Which of these two plugins would you recommend? check_url or check_url_status? (在阅读了check_url_status的描述后,我觉得这个可能是更好的选择 . 你的想法?)

  • Now, how would I fix my problem with whichever plugin you recommended?


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

    我让事情变得太复杂了 .

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

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

    以下问题是由于您没有perl包utils尝试安装它的原因 .

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

  • 1

    你可以制作一个脚本插件 . 这很容易,您只需要检查URL,例如:

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

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

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

相关问题