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']