我正在使用Zabbix PHPAPI,我遇到了问题!
如何在同一个字段中找到两个值?例如:
$items[$h]=$zbx->itemGet(array (
'filter' => ['hostid' => $arr[$h]['hostid']],
'output' => ['itemid', 'LASTVALUE', 'name', 'key_']
'search' => ['key_' => 'system.cpu.util', 'key_'=>'system.cpu.util [all]'],
));
我参加了考试但总是考虑最后一个参数key_
答案 0 :(得分:1)
在PHP中,如果创建指定多个相同键的关联数组,则仅使用最后一个键。在您的示例中,['key_' => 'system.cpu.util', 'key_' => 'system.cpu.util[all]']
创建与['key_' => 'system.cpu.util[all]']
相同的数组。因此,其中一个问题是PHP语法没有得到正确使用。
但是,如果您要直接在JSON中格式化请求,则会发生相同的情况。例如,如果你要指定" params"请求的字段如下,它还将使用" key _"的最后一个值。您指定的(" system.cpu.util [,iowait]"在示例中),因为JSON对象也不能有重复键:
{
"output": "extend",
"hostids": "10001",
"search": {
"key_": "system.cpu.util[,user]",
"key_": "system.cpu.util[,system]",
"key_": "system.cpu.util[,iowait]"
}
}
回答你的真实问题,应该使用"过滤"搜索确切的值和"搜索"不准确的价值观。因此,为了使用Zabbix API搜索多个精确密钥,您需要使用" filter"字段并传递一个带有值的数组,如下所示:
{
"output": "extend",
"hostids": "10001",
"filter": {
"key_": [
"system.cpu.util[,user]",
"system.cpu.util[,system]",
"system.cpu.util[,iowait]"
]
}
}
或者,可以使用"搜索"带有通配符的字段,如下所示:
{
"output": "extend",
"hostids": "10001",
"search": {
"key_": "system.cpu.util[,*]"
},
"searchWildcardsEnabled": true
}
这可能会返回比你需要的更多的项目,你必须在客户端进行进一步的过滤。
有关详细信息,请参阅item.get和general "get" parameter参考。
答案 1 :(得分:1)
我最近也遇到过这个问题。我这样做。没关系!
{
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"output": "extend",
"hostids": hostid,
"sortfield": "name",
'search': {
'key_': ['system.cpu.util[,user]','system.cpu.util[,system]', 'vm.memory.size'],
},
'searchByAny': True
},
"auth": "something your auth code",
"id": 1
}
答案 2 :(得分:0)
{
hostids: [10309, 10274],
search: {
key_: ['system.cpu.load[percpu,avg1]', 'vfs.fs.size[/,pfree]']
},
searchByAny: true,
output: ['name', 'lastvalue', 'units', 'key_']
}
searchByAny 为我工作