我正在尝试使用Nagios来监控实际的URL,而不仅仅是主机,因为我在运行带有多个网站的共享服务器时,我认为它不足以监控基本的HTTP服务(我包括在内这个问题的底部是我想象的一个小解释。
(旁注:请注意我在CentOS系统上的chroot中安装并运行了Nagios。我从源代码构建了nagios,并使用yum在这个root中安装了所有需要的依赖项等等。)
我首先找到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插件,并决定给它一个镜头。要做到这一点,这就是我做的:
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行中止。
所以在这一点上,我放弃了,并提出了几个问题:
在这个问题的开头,我提到我会对我想象的内容做一个小小的解释。我有一个名为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
}
我让事情变得太复杂了。
内置/安装的默认插件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$
}
监控网址的更好方法是使用可与nagios一起使用的webinject。
以下问题是由于您没有perl包utils尝试安装它的原因。
bash-4.1#。/ check_url_status -U mydomain.com无法在@INC中找到utils.pm(@INC包含:
你可以制作一个脚本插件。这很容易,您只需要检查URL,例如:
`curl -Is $URL -k| grep HTTP | cut -d ' ' -f2`
$ URL是您通过param传递给脚本命令的内容。
然后检查结果:如果你的代码大于399你就有问题,否则......一切都OK!这是一个正确的退出模式和Nagios的消息。