使用Nagios监控URL

Dav*_*d W 12 monitoring nagios

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

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


我首先找到了check_url,但是在将它安装到/ usr/lib/nagios/libexec后,我不断得到"返回代码255超出界限"错误.就在那时我决定开始写这个问题(但是等等!还有另一个插件,我决定先试试!)

在回顾了这个问题时,我遇到了几乎与check_url相同的问题,我决定打开一个关于这个问题的新问题因为a)我没有使用NRPE这个检查b)我尝试了对这个问题的建议我之前链接的问题,但没有一个有效.例如...

./check_url some-domain.com | echo $0
Run Code Online (Sandbox Code Playgroud)

返回"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 $*
Run Code Online (Sandbox Code Playgroud)

假设我没有处于"调试模式",我运行check_url的命令定义如下(在command.cfg中):

'check_url' command definition
define command{
       command_name    check_url
       command_line    $USER1$/check_url $url$
}
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,你也可以在我的服务配置文件中查看我在这个问题的最底部使用的内容)


然而,在发布这个问题之前,我决定再一次尝试找出解决方案.我找到了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的文件,这是我所有服务定义所在的位置(想象一下!).

以下是我的服务定义文件的片段,我写的是使用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
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*d W 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
    }
Run Code Online (Sandbox Code Playgroud)

我的命令定义:

define command{
        command_name    check_http_url
        command_line    $USER1$/check_http -I $HOSTADDRESS$ -u $ARG1$
}
Run Code Online (Sandbox Code Playgroud)