我从zabbix获取id指标的方法:
protected String getItemId(String host, String zabbixHostItemName) {
JSONObject hostItemsFilter = new JSONObject();
hostItemsFilter.put("name", new String[]{zabbixHostItemName});
return connectZabbix.zabbixAPI.call(RequestBuilder.newBuilder()
.method("item.get")
.paramEntry("filter", hostItemsFilter)
.paramEntry("host", host)
.build()).getJSONArray("result").getJSONObject(0).getString("itemid");
}
以下请求正文生成的内容:
{
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"filter": {
"name": [
"myItem"
]
},
"host": "myHost"
}
}
它几乎总能奏效。
当Zabbiks返回参数化的度量标准名称时,会发生此问题。
例如,如果您请求指标:
Incomming network traffic on lan900
我的方法返回错误,因为网络接口上的数据已参数化 如果我从zabbix请求主机上的所有指标,那么例如必要的“Incomming network traffic on”将匹配名称:
Incomming network traffic on $1
如何构建一个可以从指标和主机的全名中找到itemid的查询?
答案 0 :(得分:1)
当前项API无法自动扩展宏,它是触发器API中的一个功能实现(expandComment,expandDescription,expandExpression)。
您可以提升this功能请求。
您可以对"Incoming network traffic on $1"
进行第一次查询,该查询将返回一系列匹配项,一个针对您的案例中的每个网络接口。
然后,您可以使用真实的接口名称过滤'key_'
字段。
一个小蟒蛇样本:
f = { 'name' : 'Incoming packet on $1' }
hostname = 'somehostname'
itemObj = zapi.item.get(filter=f, host=hostname, output=['itemids', 'name', 'key_'] )
for item in itemObj:
if re.search('eth0', item['key_']):
print item['itemid']