我正在尝试使用 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
然后查看它的最新数据,我发现我的响应条件为200
,但错误为:
required pattern "$.items:["name"]" was not found on http://{username}:{password}@10.1.2.3:8443/api/metadata/
我已经尝试了必需字符串字段的各种变化,但结果总是相同的。
我是否遗漏了什么,或者误解了什么。Zabbix 是否能完成我想要做的事情?
答案1
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
,然后您可以为其添加触发器。