Http

使用 Zabbix 記錄來自 REST api 的 JSON 輸出?是否可以

  • November 18, 2021

我正在嘗試使用 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 stringthis_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,然後您可以為其添加觸發器。

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