Rest Api Zabbix (method : item.get) 如何获取指标的全名
Rest Api Zabbix (method : item.get) how to get full names of the metrics
我从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 returns 参数化指标名称时会出现问题。
例如,如果您请求一个指标:
Incomming network traffic on lan900
我的方法returns出错,因为网络接口上的数据参数化了。
如果我从 zabbix 请求主机上的所有指标,那么例如必要的 "Incomming network traffic on" 将匹配名称:
Incomming network traffic on
如何构建查询以从指标和主机的全名中找到 itemid?
当前项API无法自动展开宏,这是触发器API(expandComment, expandDescription, expandExpression)中的一个特性实现。
您可以为 this 功能请求投票。
您可以对 "Incoming network traffic on "
进行第一个查询,这将 return 一组匹配项,每个匹配项对应您的案例中的每个网络接口。
然后您可以在 'key_'
字段上使用真实接口名称进行过滤。
小python样本:
f = { 'name' : 'Incoming packet on ' }
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']
我从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 returns 参数化指标名称时会出现问题。
例如,如果您请求一个指标:
Incomming network traffic on lan900
我的方法returns出错,因为网络接口上的数据参数化了。
如果我从 zabbix 请求主机上的所有指标,那么例如必要的 "Incomming network traffic on" 将匹配名称:
Incomming network traffic on
如何构建查询以从指标和主机的全名中找到 itemid?
当前项API无法自动展开宏,这是触发器API(expandComment, expandDescription, expandExpression)中的一个特性实现。
您可以为 this 功能请求投票。
您可以对 "Incoming network traffic on "
进行第一个查询,这将 return 一组匹配项,每个匹配项对应您的案例中的每个网络接口。
然后您可以在 'key_'
字段上使用真实接口名称进行过滤。
小python样本:
f = { 'name' : 'Incoming packet on ' }
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']