我想在 Apache Web 服务器中监控/测试多个虚拟主机,此外,我希望这些检查在 Nagios -> HTTP 中显示为一个服务。如果其中一个 Web/URL 失败,则该服务显示为失败/警报。我不知道这是否可行。
我已经在另一台服务器上安装了 Nagios,我想检查网站是否响应状态代码 200。
那么,问题是,nagios 可以配置为在同一服务中检查多个网站吗?是否可以在一个服务中设置多个 check_command?
check_command check_httpv!google.com
check_command check_httpv!gmail.com
您如何在 nagios 中监控虚拟主机?您是否为每个网站创建服务?
谨此致以问候并提前致谢!
答案1
check_http 一次只能检查一个站点。如果您需要在一次服务检查中检查多个站点,则需要编写自己的检查来实现逻辑。这可以在一个简单的 shell 脚本中轻松完成,该脚本为每个虚拟主机调用 check_http,如果任何 check_http 执行失败,则向 Nagios 返回相应的失败代码。这样的脚本可能如下所示。
#!/bin/sh
for HOST in $* ; do
check_http -H $HOST [...other args...] >/dev/null
if [ $? -ne 0 ] ; then
echo "$HOST not responding"
exit 2
fi
done
echo "All hosts ok"
exit 0
或者,您也可以使用Nagios 的服务依赖关系实现您的目标。假设您希望检查所有 Apache 虚拟主机,但如果 Apache 进程不可用,则不希望每个虚拟主机都收到通知。这样您就可以查看每个虚拟主机的状态详细信息,允许更细粒度的报告,并让您拥有不同的通知和时间段选项。
为了实现这一点,您需要为每个虚拟主机创建一个服务检查,然后为 Apache 创建一个检查,大概是使用 check_http 通过 IP 地址进行检查,并确保某些东西正在监听端口 80。
接下来,您将为每个虚拟主机的服务检查创建服务依赖关系,并将其配置为依赖于 Apache 检查。如果 Apache 检查失败,则所有虚拟主机检查(依赖于 Apache 检查)将停止发送通知和/或执行检查,直到 Apache 检查恢复。
答案2
编写一个 bash 脚本,对传递的每个参数多次调用 check_http.pl。
将其配置为您自己的服务类型即可开始使用。
我对 bash 不够熟悉,无法立即做到这一点,但是一些基本的 bash 教程可以帮助您轻松完成所有这些操作。
答案3
执行此操作的“正确”方法是使用 check_multi:
http://my-plugin.de/wiki/projects/check_multi/start
配置 check_multi 以一次调用多个 check_http 检查(请参阅 check_http --help 并查看 -H 和 -I 标志)。您可以为其指定需要警告/严重性检查的阈值,直到多服务被警告/严重性检查为止,等等。它非常强大且灵活。
您也可以使用 check_cluster(这是一种老式的方法,会导致 nagios web UI 中出现大量额外服务)。如果您想采用这种方式,可以阅读有关监控集群的官方文档:
答案4
是的,有可能,我已发表于博客关于它。在这里复制核心内容。
您需要 (1) 一个脚本,该脚本获取 URL 列表,检查它们并根据需要返回状态代码,(2) 一个使用该脚本的 Nagios 命令,(3) 一个使用该命令进行检查的主机定义。
放剧本在/etc/nagios3/check_urls
。
在中定义命令/etc/nagios3/conf.d/commands.cfg
:
define command {
command_name check_urls
command_line /etc/nagios3/check_urls $_HOSTURLS$
}
在以下位置定义主机/etc/nagios3/conf.d/hosts.cfg
:
define host {
host_name example-host
alias My Example
address 123.123.123.123
check_command check_urls
_urls my-blog.com,my-api.com/check
}