我正在尝试使用 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
。您的示例的正确路径是:JSON 的结果将是
["this_is_my_name"]
,而不仅仅是this_is_my_name
,因此您需要正则表达式\["(.+)"\]
从结果中检索纯值。可以直接测试:
将您的项目存储为
Text
,然后您可以为其添加触发器。