是否可以使用Zabbix 3.0 JSON-RPC API执行system.run []?

时间:2016-06-17 06:03:43

标签: json api json-rpc zabbix

我正在尝试使用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[],请分享您的解决方案。 谢谢。

1 个答案:

答案 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”,表示上次将此远程命令成功发送到代理程序。