使用 Zabbix 记录 REST api 的 JSON 输出?可以吗

使用 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

然后查看它的最新数据,我发现我的响应条件为200,但错误为:

required pattern "$.items:["name"]" was not found on http://{username}:{password}@10.1.2.3:8443/api/metadata/

我已经尝试了必需字符串字段的各种变化,但结果总是相同的。

我是否遗漏了什么,或者误解了什么。Zabbix 是否能完成我想要做的事情?

答案1

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,然后您可以为其添加触发器。

相关内容