Monitoring

如何使用 Nagios 的 check_http 檢查包含雜湊的 URI 的內容?

  • November 24, 2020

試圖

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

分析

儘管已經讀取了多個來源[1 , 2 , 3 , 4 ] 和一個 Wget,即wget www.example.com:8080/hello/#/world返回一個 OK ,但不清楚是否check_http不起作用。

也許這#導致了一個問題。根據這個文件the #is an anchor 這意味著 if var xthat xis #/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 源,例如:

&lt;script src="button.js"&gt;&lt;/script&gt;
&lt;script src="world.js"&gt;&lt;/script&gt;

功能視圖和技術視圖之間存在差異。在使用 Wget 下載的頁面中省略了可以使用 Firebug 查看和檢查的內容。

check_http外掛只會看到 wget/curl 向您顯示的內容,因此它無法檢查您希望它檢查的內容。

如果您想要一個可以實際執行客戶端 javascript 的檢查,您需要研究類似WebInjectcheck_webinjectSeleniumcheck_selenium(如本文所述,或者可能是SahiSakuli

#是在錨,這是正確的。這些將由客戶端解釋,而不是伺服器。錨點是站點的一部分,因此必須載入整個站點並在其中搜尋錨點。

您應該改用以下檢查:

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

稍後您可以添加-s world以在 HTML 內容中搜尋“世界”(如果它存在並且沒有通過另一層 JavaScript 添加)。

引用自:https://serverfault.com/questions/639196