我刚刚在服务器上安装了 nagios,却发现 HTTP 服务出现了严重错误。
错误是
HTTP CRITICAL - Socket timeout after 10 seconds
我搜索check_http
对于这个错误,我得到了以更长的超时时间运行的建议。所以我-t 20
在文件中附加了commands.cfg
“check_http”命令旁边的内容。重新启动了nagios,但仍然收到错误(对于新的超时)。
然后搜索了一些更多的。这个错误看起来很常见,所以我开始思考我可能遇到了其他问题。
我尝试自己运行 check_http:
root@srv$ /usr/libexec/nagios/check_http -H localhost -N -p 80 -t 1
HTTP OK: HTTP/1.1 200 OK - 846 bytes in 0.003 second response time |time=0.003080s;;;0.000000 size=846B;;;0
响应似乎还好,但我对 http 了解甚少。
有什么线索吗?
check_http
编辑:取自 /etc/nagios/objects/commands.cfg的命令定义是
# 'check_http' command definition
define command{
command_name check_http
command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
}
我不确定如何检查变量 $HOSTADDRESS$ 和更重要的 $ARG1$ 的值。
那么服务的定义是
define service{
use local-service ; Name of service template to use
host_name localhost
service_description HTTP
check_command check_http
notifications_enabled 1
}
发行版是slackware 14.0 64bit。
答案1
您的检查命令与您的手动测试不匹配。
如果您希望 Nagios 以与手动测试相同的方式执行检查,那么您的服务定义必须是这样的,因为您的检查命令的定义方式如下:
define service{
use local-service
host_name localhost
service_description HTTP
check_command check_http!-N -p 80 -t 1
notifications_enabled 1
}
...并且您还必须将“localhost”作为该主机的地址。
(但是 1 秒的超时时间有点短。)
答案2
check_http 插件的作用相当于尝试从外部 IP 加载网页。请检查以确保您可以在浏览器中加载网页,并且该插件在命令行中可以使用您在配置文件中指定的完全相同的主机定义(FQDN 或 IP 号码)。
如果您确实要检查 localhost,请尝试使用 127.0.0.1,并尝试使用 wget 之类的工具来检查 localhost 是否确实被允许从其自身加载网页 ( wget http://127.0.0.1
)。 这也适用于其他网站 ( wget http://www.yourdomain.com
)。
答案3
您询问的变量 $HOSTADDRESS$ $HOSTNAME$ 等类似于询问 HOST 定义的字段 ADDRESS,对于 $SERVICEXXXX$ 也是如此。如前所述,$ARG1$ 是命令定义中 ! 之后所期望的内容。
在这个特定案例中:
check_command check_http!-N -p 80 -t 1
$ARG1$ = -N -p 80 -t 1 //-p 80 不是必需的,因为 80 是 http 的默认值。
希望这有助于您了解 Nagios Macros。