是否可以使用 Zabbix 3.0 JSON-RPC API 执行 system.run[]?
Is it possible to execute system.run[] with Zabbix 3.0 JSON-RPC API?
我正在尝试在 Zabbix 的 system.run[]
request/item 中使用 systemctl
远程 stop/start 服务,但它似乎不起作用。
我正在使用 Zabbix 3.0 JSON-RPC API 并且我的 JSON 看起来像这样:
{
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"filter": {
"host": "host-name",
"key_": "system.run[sudo systemctl stop nginx.service]"
}
},
"id": 1,
"auth": "my-token"
}
结果:
{"jsonrpc":"2.0","result":[],"id":1}
但我不太确定此请求的有效性,因为到目前为止我在 system.run[]
上看到的所有信息都与 zabbix_get 相关。甚至可以这样执行 system.run[]
吗?我究竟做错了什么?
这显然只是过滤项目,但我不知道如何使用 Zabbix JSON-RPC API 复制 zabbix_get 所做的事情。我找不到关于此的信息。
这很适合收集数据,不过:
{
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"filter": {
"host": "host-name",
"key_": "vm.memory.size[used]"
}
},
"id": 1,
"auth": "my-token"
}
结果:
{
"jsonrpc": "2.0",
"result": [
{
"itemid": "455",
"type": "0",
"snmp_community": "",
"snmp_oid": "",
"hostid": "12241",
"name": "Used memory",
"key_": "vm.memory.size[used]",
"delay": "60",
"history": "90",
"trends": "365",
"status": "0",
"value_type": "3",
"trapper_hosts": "",
"units": "B",
"multiplier": "0",
"delta": "0",
"snmpv3_securityname": "",
"snmpv3_securitylevel": "0",
"snmpv3_authpassphrase": "",
"snmpv3_privpassphrase": "",
"formula": "1",
"error": "",
"lastlogsize": "0",
"logtimefmt": "",
"templateid": "106",
"valuemapid": "0",
"delay_flex": "",
"params": "",
"ipmi_sensor": "",
"data_type": "0",
"authtype": "0",
"username": "",
"password": "",
"publickey": "",
"privatekey": "",
"mtime": "0",
"flags": "0",
"interfaceid": "2",
"port": "",
"description": "",
"inventory_link": "0",
"lifetime": "30",
"snmpv3_authprotocol": "0",
"snmpv3_privprotocol": "0",
"state": "0",
"snmpv3_contextname": "",
"evaltype": "0",
"lastclock": "1466142275",
"lastns": "142277413",
"lastvalue": "3971121455",
"prevvalue": "3971001230"
}
],
"id": 1
}
如果有人设法使用 JSON-RPC API 执行 system.run[]
,请分享您的解决方案。
谢谢。
不对,好像有几处不对。首先,Zabbix API 是 JSON-RPC(不是 REST)。其次,item.get
方法主要用于从服务器获取item配置。
要从代理请求项目值(这就是使用 system.run
项目键实现远程命令的方式),您可以使用已经提到的 zabbix_get:
$ zabbix_get -s host-name -k "system.run[sudo systemctl stop nginx.service]"
请注意,当您说 "This works well for gathering data" 时,您并没有告诉 Zabbix 在那个时候收集数据 - 它只是 returns 您一些已经在数据库中的数据。在远程命令的情况下,您可以获得的最好结果是“1”,表示上次成功将此远程命令发送到代理。
我正在尝试在 Zabbix 的 system.run[]
request/item 中使用 systemctl
远程 stop/start 服务,但它似乎不起作用。
我正在使用 Zabbix 3.0 JSON-RPC API 并且我的 JSON 看起来像这样:
{
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"filter": {
"host": "host-name",
"key_": "system.run[sudo systemctl stop nginx.service]"
}
},
"id": 1,
"auth": "my-token"
}
结果:
{"jsonrpc":"2.0","result":[],"id":1}
但我不太确定此请求的有效性,因为到目前为止我在 system.run[]
上看到的所有信息都与 zabbix_get 相关。甚至可以这样执行 system.run[]
吗?我究竟做错了什么?
这显然只是过滤项目,但我不知道如何使用 Zabbix JSON-RPC API 复制 zabbix_get 所做的事情。我找不到关于此的信息。
这很适合收集数据,不过:
{
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"filter": {
"host": "host-name",
"key_": "vm.memory.size[used]"
}
},
"id": 1,
"auth": "my-token"
}
结果:
{
"jsonrpc": "2.0",
"result": [
{
"itemid": "455",
"type": "0",
"snmp_community": "",
"snmp_oid": "",
"hostid": "12241",
"name": "Used memory",
"key_": "vm.memory.size[used]",
"delay": "60",
"history": "90",
"trends": "365",
"status": "0",
"value_type": "3",
"trapper_hosts": "",
"units": "B",
"multiplier": "0",
"delta": "0",
"snmpv3_securityname": "",
"snmpv3_securitylevel": "0",
"snmpv3_authpassphrase": "",
"snmpv3_privpassphrase": "",
"formula": "1",
"error": "",
"lastlogsize": "0",
"logtimefmt": "",
"templateid": "106",
"valuemapid": "0",
"delay_flex": "",
"params": "",
"ipmi_sensor": "",
"data_type": "0",
"authtype": "0",
"username": "",
"password": "",
"publickey": "",
"privatekey": "",
"mtime": "0",
"flags": "0",
"interfaceid": "2",
"port": "",
"description": "",
"inventory_link": "0",
"lifetime": "30",
"snmpv3_authprotocol": "0",
"snmpv3_privprotocol": "0",
"state": "0",
"snmpv3_contextname": "",
"evaltype": "0",
"lastclock": "1466142275",
"lastns": "142277413",
"lastvalue": "3971121455",
"prevvalue": "3971001230"
}
],
"id": 1
}
如果有人设法使用 JSON-RPC API 执行 system.run[]
,请分享您的解决方案。
谢谢。
不对,好像有几处不对。首先,Zabbix API 是 JSON-RPC(不是 REST)。其次,item.get
方法主要用于从服务器获取item配置。
要从代理请求项目值(这就是使用 system.run
项目键实现远程命令的方式),您可以使用已经提到的 zabbix_get:
$ zabbix_get -s host-name -k "system.run[sudo systemctl stop nginx.service]"
请注意,当您说 "This works well for gathering data" 时,您并没有告诉 Zabbix 在那个时候收集数据 - 它只是 returns 您一些已经在数据库中的数据。在远程命令的情况下,您可以获得的最好结果是“1”,表示上次成功将此远程命令发送到代理。