Можно ли выполнить system.run[] с помощью JSON-RPC API Zabbix 3.0?

Я пытаюсь удаленно остановить / запустить службы, используя systemctl внутри Zabbix's system.run[] запрос / элемент, но это не похоже на работу.

Я использую JSON-RPC API Zabbix 3.0, и мой 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_get, используя Zabbix JSON-RPC API. Я не могу найти информацию об этом.

Это хорошо работает для сбора данных, хотя:

{
  "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
}

Если кому-то удалось выполнить system.run[] используя JSON-RPC API, поделитесь своим решением. Спасибо.

1 ответ

Решение

Нет, похоже, что-то не так. Во-первых, 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", которое указывает, что в прошлый раз эта удаленная команда была успешно отправлена ​​агенту.

Другие вопросы по тегам