如何使用 Nagios 的 check_http 检查包含 Hash 的 URI 的内容?

如何使用 Nagios 的 check_http 检查包含 Hash 的 URI 的内容?

试图

check_http -H www.example.com -f follow -p 8080 -u /hello/#/world -s "content"

结果

HTTP WARNING: HTTP/1.1 404 Not Found - X bytes in 0.00X second response time |time=0.00XYZ

分析

尽管已经阅读了多个来源[1234] 和 Wget,即wget www.example.com:8080/hello/#/world返回 OK,目前尚不清楚是否check_http不起作用。

也许这#是导致问题的原因。根据本文档#一个锚点,意味着如果var xx#/world但这无助于解决问题。

使用 wget下载www.example.com并随后检查world按钮,表明此按钮与 javascript 源相关联。这一发现也无助于解决问题。


第二次尝试

check_http -H www.example.com -f follow -p 8080 -u /hello/\#/world -v

结果二

GET /hello/#/world HTTP/1.1
User-Agent: check_http/vX (nagios-plugins X)
Connection: close
Host: www.example.com:8080


http://www.example.com:8080/hello/#/world is X characters
STATUS: HTTP/1.1 404 Not Found
**** HEADER ****
Server: Apache-Coyote/X
Content-Type: text/html;charset=utf-8
Content-Length: X
Date: Thu, Day Month Year Time GMT
Connection: close
**** CONTENT ****
<html><head><title>ApplicationServer - Error report</title><style></style> </head><body><h1>HTTP Status 404 - /hello/#/world</h1><p><b>type</b> Status report</p><p><b>message</b> <u>/hello/#/world</u></p><p><b>description</b> <u>The requested resource (/hello/#/world) is not available.</u></p><h3>ApplicationServer</h3></body></html>
HTTP WARNING: HTTP/1.1 404 Not Found - X bytes in 0.00X second response time |time=0.00Xs;;;0.000000 size=XB;;;0

分析二

功能

如果你想查看http://www.example.com:8080/hello/#/world,必须导航至http://www.example.com:8080/hello并点击world按钮。点击按钮后,可以使用 firebug 查看和检查内容。

技术的

该 URL 使用 Wget 下载。该页面包含多个代表按钮的 JavaScript 源,例如:

<script src="button.js"></script>
<script src="world.js"></script>

功能视图和技术视图之间存在差异。使用 Wget 下载的页面省略了可以使用 Firebug 查看和检查的内容。

答案1

check_http插件只能看到 wget/curl 显示的内容,因此它无法检查您想要检查的内容。

如果你想要一个可以实际运行客户端 javascript 的检查,你需要研究类似Web注入check_webinject检查硒(如讨论的那样这个帖子), 或者可能佐日沙库利

答案2

#在锚点中,没错。这些是由客户端而不是服务器解释的。锚点是网站的一部分,因此必须加载整个网站并在其中搜索锚点。

您应该使用以下检查:

check_http -H www.example.com -f follow -p 8080 -u /hello/

稍后您可以添加-s world在 HTML 内容中搜索“world”(如果它存在并且不是通过另一层 JavaScript 添加的)。

答案3

我发现 phantomjs-nagios 插件(check_http_load_time.rb)在这种需要呈现带有 JavaScript 的 Web 应用程序的场景中非常有用。

该插件在后台使用 phantomjs 来渲染整个页面,从而模拟最终用户的浏览器。它将输出总渲染时间,并显示请求数和加载的 dom 元素数:

$ ./check_http_load_time.rb -u "https://myapp.example.com/#load" -P -w 5 -c 10
OK: https://myapp.example.com/#load load time: 1.14 | load_time=1142.0ms size=428013 requests=39 dom_elements=55 load_time_initial_req=194ms

该插件还支持阈值,例如,您可以定义加载元素、请求或总大小的阈值范围。

https://github.com/hggh/phantomjs-nagios/blob/master/check_http_load_time.rb更多细节。

注1:Phantomjs不再开发。

注2:由于该插件依赖于Phantomjs,因此插件开发也已停止。

注意 3:Ubuntu 18.04 上的 Phantomjs 软件包已损坏,插件可能会给Could not parse JSON from phantomjs您带来麻烦。在这种情况下,请从https://phantomjs.org/download.html并告诉插件使用参数使用 phantomjs 的替代路径-p

相关内容