Http
使用 Zabbix 記錄來自 REST api 的 JSON 輸出?是否可以
我正在嘗試使用 Zabbix (5.0) 來擷取來自 REST API 的響應。
如果我將以下內容粘貼到網路瀏覽器(或 wget / curl 等)
http://{username}:{password}@10.1.2.3:8443/api/metadata/
我得到了我期望的回應:
{"items":[{"name":"this_is_my_name"}]}
我試圖捕捉
name
到 zabbix 的價值。
web scenario
我已經針對我的模板設置了一個,並且在該steps
部分中我有:Name: test_name URL: http://{username}:{password}@10.1.2.3:8443/api/metadata/ Raw Data Retrieve Mode: Body Timeout: 15s Required String: $.items:["name"] Required Status Code: 200
然後查看它的最新數據,我看到我有一個響應 conde
200
,但有一個錯誤:required pattern "$.items:["name"]" was not found on http://{username}:{password}@10.1.2.3:8443/api/metadata/
我在必填字元串欄位中嘗試了各種變體,結果始終相同。
我是否錯過了什麼,或者誤解了什麼。Zabbix 甚至會做我想做的事情嗎?
Web 場景無法評估 JSON,它只能使用正則表達式檢查純文字。
您可以設置
Required string
為this_is_my_name
,但這只會檢查字元串是否出現在伺服器的答案中,無論在哪裡。根據您的結果的其餘部分和您的案例,這可能有效,也可能無效。如果要從 JSON 中獲取特定欄位,則必須配置以下類型的項目
HTTP agent
:不要檢查
Convert to JSON
,這可能很誘人,但它旨在將非 JSON 答案轉換為 JSON。你已經有了 JSON,所以你不需要它。接下來,添加一個類型為的預處理步驟
JSONPath
。您的範例的正確路徑是:$.items[:1].name
JSON 的結果將是
["this_is_my_name"]
,而不僅僅是this_is_my_name
,因此您需要正則表達式\["(.+)"\]
從結果中檢索純值。可以直接測試:
將您的項目儲存為
Text
,然後您可以為其添加觸發器。