java - Rest Api Zabbix(方法:item.get)如何获取指标的全名
问题描述
我从 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?
解决方案
当前的item API不能自动扩展宏,它是一个特性实现,例如在trigger API(expandComment,expandDescription,expandExpression)中。
您可以对此功能请求进行投票。
您可以对 进行第一次查询"Incoming network traffic on $1"
,这将返回一个匹配项的数组,在您的情况下,每个网络接口都有一个。
然后您可以过滤'key_'
具有真实接口名称的字段。
一个小python示例:
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']
推荐阅读
- javascript - 如何提取由 NVDA 聚焦的图像的 src?
- python - 我如何制作使我的玩家在 Pygame 中移动的功能
- php - 复选框无论是否被选中都显示
- java - 任务集上的 DefaultTaskContainer#NamedDomainObjectProvider.configure(Action) 无法在当前上下文中执行
- flutter - Flutter 网页背景图片
- python - Selenium,了解 xPath;输入与选择;循环遍历元素
- reactjs - react-spring:如何在过滤和删除项目之前在列表中显示复选框的勾选
- mongodb - 提高搜索 mongodb 的数据库性能
- python - 如何使用 os 模块删除脚本的父目录?
- php - 我想同时在 laravel livewire 中进行多个输入,但我遇到了问题