You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过单次Zabbix API调用根据主机IP获取监控项itemid?

问题原因

你构造的请求不生效的核心原因是:Zabbix item.get 接口的search、filter匹配规则默认仅作用于监控项(item)本身的原生字段,selectInterfaces属于关联查询的附属扩展字段,不会被搜索逻辑命中,因此无法直接通过IP搜索返回对应结果。

可行实现方案

方案1:两次API调用(兼容所有Zabbix版本,最稳定)

逻辑是先通过IP查到对应主机ID,再用主机ID查询关联的监控项ID:

  • 第一步:调用host.get,通过IP筛选拿到目标主机的hostid
    请求示例:
    {
        "jsonrpc": "2.0",
        "method": "host.get",
        "params": {
            "output": ["hostid"],
            "selectInterfaces": ["ip"],
            "filter": {
                "ip": "1.1.1.1"
            }
        },
        "auth": "038e1d7b1735c6a5436ee9eae095879e",
        "id": 1
    }
    
    正常返回结果中会包含匹配IP的主机ID,如果有多台主机配置了相同IP,会返回多个hostid,按需筛选即可。如果当前版本不支持直接在host.get中filter接口IP,可以去掉filter参数拉取所有主机的接口信息,本地匹配IP拿到对应hostid即可。
  • 第二步:调用item.get,传入拿到的hostid查询对应监控项的itemid
    请求示例:
    {
        "jsonrpc": "2.0",
        "method": "item.get",
        "params": {
            "output": ["itemid"],
            "hostids": ["上一步返回的hostid值"]
        },
        "auth": "038e1d7b1735c6a5436ee9eae095879e",
        "id": 2
    }
    

方案2:单API调用(仅支持Zabbix 6.0及以上版本)

6.0版本后API支持嵌套关联资源筛选,可以直接在item.get请求中嵌入主机IP的筛选条件,无需两次调用:
请求示例:

{
    "jsonrpc": "2.0",
    "method": "item.get",
    "params": {
        "output": ["itemid"],
        "host": {
            "filter": {
                "ip": "1.1.1.1"
            }
        }
    },
    "auth": "038e1d7b1735c6a5436ee9eae095879e",
    "id": 1
}
注意事项
  • 不建议使用search参数做精确匹配,search是模糊匹配逻辑,精确筛选字段请用filter参数
  • 如果Zabbix环境中存在Agent、SNMP等多类接口,建议在筛选IP时额外增加type字段限定接口类型,避免匹配到错误的主机接口
  • 若有多台主机配置了相同IP,两次调用方案下需要额外增加主机名、主机组等筛选条件锁定目标主机,避免返回非预期的监控项

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:18:25