我正在尝试使用Zabbix的systemctl
请求/项目中的system.run[]
远程停止/启动服务,但它似乎不起作用。
我正在使用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[]
,请分享您的解决方案。
谢谢。
答案 0 :(得分:2)
不,似乎有一些问题。首先,Zabbix API是JSON-RPC(不是REST)。其次,item.get
方法主要用于从服务器获取项目配置。
要从代理请求项目值(这是使用system.run
项密钥实现远程命令的方式),您可以使用已经提到的zabbix_get:
$ zabbix_get -s host-name -k "system.run[sudo systemctl stop nginx.service]"
请注意,当您说“这适用于收集数据”时,您并没有告诉Zabbix此时收集数据 - 它只返回数据库中已有的数据。对于远程命令,您可以获得的最佳值为“1”,表示上次将此远程命令成功发送到代理程序。