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