zabbix获取流量监控数据(之前有问题,修正了下)
zabbix没有提供监控流量数据的api(至少我没有找到),历史表有一部分数据,但是不全,所以只能从趋势数据表里获取。流量数据是隔段时间保存一次的,每次保存的是截止该时间点的总流量,所以要获取某时间点的瞬时流量或者平均流量,都得自己计算。
以下是我总结网上的方法,找到的一个思路,每一步的http请求的body总结如下,请求地址是http://127.0.0.1/zabbix/api_jsonrpc.php,ip换成你的zabbix服务器ip即可。参数列表还有很多个性化参数,例如排序字段,筛选等,具体参考zabbix api:https://www.zabbix.com/documentation/3.4/manual/api/reference/item/get
第一步:登陆认证,拿到auth { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "user", "password": "passwd" }, "id": 1, "auth": null } |
第二步:获取hostId { "jsonrpc": "2.0", "method": "host.get", "params": { "output": ["hostid","host"], "selectInterfaces": ["interfaceid","ip"] }, "id": 1, "auth": "9658680f149ed8c699e223a7ef9a03b2" } |
第三步: 获取itemid { "jsonrpc": "2.0", "method": "item.get", "params": { "output": "extend", "hostids": [10170,10171,10172,10173,10174,10175,10176], "search": { "key_": "net.if.in" #in为入流量,out为出流量# }, "sortfield": "name" }, "auth": "9658680f149ed8c699e223a7ef9a03b2", "id": 1 } |
第四步: 从趋势表查询clock,value { "jsonrpc": "2.0", "method": "trend.get", "params": { "output": [ "itemid", "clock", "num", "value_min", "value_avg", "value_max" ], "itemids": [ "25025" ], "limit": "50", "sortfield": "clock"
}, "auth": "2991836a40e28b6fd2d32c41a563570f", "id": 1 } |
注意:
1. 请求不是rest风格的,以上参数应放在body中
2. clock字段是从1970-01-01 00:00:00到存储时间的秒数,注意是秒不是毫秒(java,js构造器用的都是毫秒)
3. 数据表示的是截止某时间点的总流量,要获取每秒的数据,就得根据时间间隔计算
4. 返回数据都是json格式的字符串,按自己的需求进行解析即可