感谢本文作者董玉凡,ZCS Zabbix 中级认证工程师。
为了满足 agent 探针、协议等无法覆盖的监控需求,我们通常会使用 zabbix_sender 去发送数据到我们的 zabbix 服务器,除了 zabbix_sender 工具之外,在 zabbix7.0 中还推出了新的方法,它就是 history.push。
history.push 是从 Zabbix7.0.0 alpha4 版本中推出的一个 API 接口,后续将在 zabbix7.0LTS 版本中正式推出,它可以将监控项的历史数据推送到 zabbix 服务器。history.push 接口参数如下:
Parameter | Type | Description |
itemid | ID | ID of the related item. Parameter behavior: - required if |
host | string | Technical name of the host. Parameter behavior: - required if |
key | string | Item key. Parameter behavior: - required if |
value | mixed | Item value. Parameter behavior: - required |
clock | timestamp | Time when the value was received. |
ns | integer | Nanoseconds when the value was received. |
今天我们使用 Zabbix 7.0.0alpha7 版本进行测试,安装包下载地址:https://cdn.zabbix.com/zabbix/sources/development/7.0/zabbix-7.0.0alpha7.tar.gz,安装过程就不再一一赘述,安装成功如下:
创建一个用于测试的监控主机
创建一个 Zabbix trapper 类型的监控项
history.push 仅支持两种监控项类型的指标,分别是 Zabbix trapper 和 HTTP agent,我们先用 Zabbix trapper 类型指标进行测试。
Allowed hosts 配置项可以配置允许接收数据的主机,如果没有配置则它将允许接收所有主机发送的数据。
获取监控项的 itemid
打开 Monitoring > 搜索 test_item 监控项 > 点击 Graph
7.0 的版本中,在主机中点击监控项变成了一个窗口,没有办法在 item 的 url 获取它的 itemid,但是可以通过最新数据获取
通过调用 history.push 接口发送数据到 test_item 监控项
# vi send_zabbixapi.sh
#!/bin/bash
TOKEN=`curl --request POST \
--url 'http://xx.xx.xx.xx:xx/api_jsonrpc.php' \ ##替换成zabbix的IP地址
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"user.login","params":{"username": "Admin","password": "zabbix"},"id":1}'|awk -F '\"' '{print $8}' ##输入对应的账号密码,账号所在的User roles一定要开启了Access to API
`
curl --request POST \
--url 'http://xx.xx.xx.xx:xx/api_jsonrpc.php' \ ##替换成zabbix的IP地址
--header "Authorization: Bearer ${TOKEN}" \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"history.push","params": {"itemid": 46319,"value": "1"},"id":1}' ##替换itemid为自己需要测试的itemid
查看调用结果
添加 clock 字段发送一个数据
一次发送两个数据
创建一个 HTTP agent 类型的监控项
HTTP agent 类型监控项 URL 为必填项,这个随便填一个。
勾选 Enable trapping。
创建之后以同样方式获取监控项的 itemid
测试数据发送