是否可以使用 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”,表示上次成功将此远程命令发送到代理。