如何使用 Nagios 的 check_http 檢查包含雜湊的 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
分析
儘管已經讀取了多個來源[1 , 2 , 3 , 4 ] 和一個 Wget,即
wget www.example.com:8080/hello/#/world
返回一個 OK ,但不清楚是否check_http
不起作用。也許這
#
導致了一個問題。根據這個文件the#
is an anchor 這意味著 ifvar x
thatx
is#/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 查看和檢查的內容。
該
check_http
外掛只會看到 wget/curl 向您顯示的內容,因此它無法檢查您希望它檢查的內容。如果您想要一個可以實際執行客戶端 javascript 的檢查,您需要研究類似WebInject和check_webinject,Selenium和check_selenium(如本文所述),或者可能是Sahi和Sakuli。
#
是在錨,這是正確的。這些將由客戶端解釋,而不是伺服器。錨點是站點的一部分,因此必須載入整個站點並在其中搜尋錨點。您應該改用以下檢查:
check_http -H www.example.com -f follow -p 8080 -u /hello/
稍後您可以添加
-s world
以在 HTML 內容中搜尋“世界”(如果它存在並且沒有通過另一層 JavaScript 添加)。