我正在尝试使用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插件,并决定给它一个镜头.要做到这一点,这就是我做的:
运行以下命令:
./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行中止.
所以在这一点上,我放弃了,并提出了几个问题:
在这个问题的开头,我提到我会对我想象的内容做一个小小的解释.我有一个名为services.cfg的文件,这是我所有服务定义所在的位置(想象一下!).
以下是我的服务定义文件的片段,我写的是使用check_url(因为当时我认为一切正常).我将为我想要监控的每个URL构建一个服务:
###
# Monitoring Individual URLs...
#
###
define service{
host_name …Run Code Online (Sandbox Code Playgroud) 我已经通过EPEL存储库在新安装的CentOS 7上部署了Nagios的新实例。因此Nagios Core版本是3.5.1。
安装完nagios和nagios-plugins-all(通过yum)之后,我创建了许多主机和服务定义,使用测试了我的配置nagios -v /etc/nagios/nagios.cfg,并启动了Nagios并使其运行!
不幸的是,我的主机检查失败(尽管我的服务检查工作正常)。
在Nagios Web GUI /仪表板中,如果我向下钻取带有“主机状态信息”的“主机”页面,则会看到此报告是“状态信息”(已删除IP地址):
状态信息:/ usr / bin / ping -n -U -w 30 -c 5 {my-host-ip-address}
严重-无法解释ping命令的输出

因此,在故障排除中,我深入到了Nagios插件目录(/ usr / lib64 / nagios / plugins),并使用与check_host-alive运行命令的方式一致的check_ping插件进行了测试(请参阅下面的检查内容-host-alive命令定义):
./check_ping -H {my-ip-address} -w 3000.0,80% -c 5000.0,100% -p 5
Run Code Online (Sandbox Code Playgroud)
此check_ping命令返回以下输出:
PING OK-数据包丢失= 0%,RTA = 0.63 ms | rta = 0.627000ms; 3000.000000; 5000.000000; 0.000000 pl = 0%; 80; 100; 0
我没有更改check_ping的工作方式的定义,并且可以确认只要以与check-host-alive运行命令相同的方式运行该命令,就可以得到“ PING OK”的信息,因此我无法弄清楚发生了什么上!
以下是check-host-alive和check_ping的命令定义。
# 'check-host-alive' command definition
define command{
command_name check-host-alive
command_line $USER1$/check_ping -H $HOSTADDRESS$ …Run Code Online (Sandbox Code Playgroud)