基于java的zabbix api调用实现数据共享

使用了zabbix进行监控后,往往因为项目的需求,需要对zabbix的数据,进行二次共享和开发。如何从zabbix获取数据是本次实践要解决的问题。

zabbix的数据共享有两个途径

1) 通过数据库查询,获取数据。 前提是对zabbbix数据库模型要有深入了解,并且在大量监控的时候,不能因为查询影响zabbix生身的运行

2) 通过zabbix的api,进行数据的获取,这种方式相对比较可靠

一、目标

通过java api实现zabbix的数据获取。

二、环境

在本机的虚拟机144上,安装了zabbix的服务端,分别在144,155上部署了监控agent。 都是centos系统

在本机使用eclipse进行数据的获取。 jdk 为 1.7

三、api的获取

http://zabbix.org/wiki/Docs/api/libraries 这网站列出了api的情况,如下图

基于java的zabbix api调用实现数据共享_第1张图片

点开这个后,可以看到java的api有三种

基于java的zabbix api调用实现数据共享_第2张图片

第一和第三都是连接zabbix server的api,第一个是最简单的api,需要自己构造json格式的参数。 第二个sender 是开发想server 输送数据的api。第三个才是这次实践关心的api,这个api里面,进一步做了封装,也提供了一些测试代码。本次实践就是在这个基础上进行实践的。

依赖的库如下

基于java的zabbix api调用实现数据共享_第3张图片

下面贴一下代码,代码里面做了比较详细的描述。

[java] view plain copy
print ?
  1. package com.zabbix4j.apitest;  
  2.   
  3. import com.zabbix4j.ZabbixApi;  
  4. import com.zabbix4j.ZabbixApiException;  
  5. import com.zabbix4j.ZabbixApiParamter;  
  6. import com.zabbix4j.host.*;  
  7. import com.zabbix4j.hostinteface.HostInterfaceObject;  
  8. import com.zabbix4j.item.ItemObject;  
  9. import com.zabbix4j.usermacro.Macro;  
  10.   
  11. import java.util.ArrayList;  
  12. import java.util.List;  
  13.   
  14. public class Zabbix4jSampleGetHost extends ZabbixApiTestDummyMethodBase {  
  15.   
  16.     public Zabbix4jSampleGetHost(ZabbixApi zabbixApi) {  
  17.     super(zabbixApi);  
  18.     }  
  19.   
  20.     // 这里配置zabbix的url,帐号和密码  
  21.     public static final String ZBX_URL = “http://192.168.136.144/zabbix/api_jsonrpc.php”;  
  22.     public static final String USERNAME = “admin”;  
  23.     public static final String PASSWORD = “zabbix”;  
  24.   
  25.     // 调用api的host get方法的封装  
  26.     public HostGetResponse getHost() throws ZabbixApiException {  
  27.   
  28.     Integer targetHostId = 10105;  
  29.     HostGetRequest request = new HostGetRequest();  
  30.     HostGetRequest.Params params = request.getParams();  
  31.   
  32.     ArrayList hostIds = new ArrayList();  
  33.     hostIds.add(targetHostId);  
  34.     // params.setHostids(hostIds);  
  35.     // 这里可以设指定的id值,也可以不设值。设值的话,取指定的内容,不设的话,获取全部的host  
  36.     params.setHostids(null);  
  37.   
  38.     params.setSelectDiscoveryRule(ZabbixApiParamter.QUERY.extend.name());  
  39.     params.setSelectGroups(ZabbixApiParamter.QUERY.extend.name());  
  40.     params.setSelectItems(ZabbixApiParamter.QUERY.extend.name());  
  41.     params.setSelectApplications(ZabbixApiParamter.QUERY.extend.name());  
  42.     params.setSelectDiscoveries(ZabbixApiParamter.QUERY.extend.name());  
  43.     params.setSelectGraphs(ZabbixApiParamter.QUERY.extend.name());  
  44.     params.setSelectHostDiscovery(ZabbixApiParamter.QUERY.extend.name());  
  45.     params.setSelectHttpTests(ZabbixApiParamter.QUERY.extend.name());  
  46.     params.setSelectInterfaces(ZabbixApiParamter.QUERY.extend.name());  
  47.     params.setSelectInventory(ZabbixApiParamter.QUERY.extend.name());  
  48.     params.setSelectMacros(ZabbixApiParamter.QUERY.extend.name());  
  49.     params.setSelectParentTemplates(ZabbixApiParamter.QUERY.extend.name());  
  50.     params.setSelectScreens(ZabbixApiParamter.QUERY.extend.name());  
  51.     params.setSelectTriggers(ZabbixApiParamter.QUERY.extend.name());  
  52.   
  53.     System.out.println(”parames setting complete…”);  
  54.     HostGetResponse response = zabbixApi.host().get(request);  
  55.   
  56.     return response;  
  57.     }  
  58.   
  59.     public static void main(String[] args) {  
  60.   
  61.     try {  
  62.         // login to Zabbix  
  63.         System.out.println(”beging…”);  
  64.         ZabbixApi zabbixApi = new ZabbixApi(ZBX_URL);  
  65.         zabbixApi.login(USERNAME, PASSWORD);  
  66.   
  67.         System.out.println(”create new get host instance…”);  
  68.         Zabbix4jSampleGetHost myGetHost = new Zabbix4jSampleGetHost(  
  69.             zabbixApi);  
  70.   
  71.         System.out.println(”Get host beging…”);  
  72.         HostGetResponse response = myGetHost.getHost();  
  73.   
  74.         System.out.println(”Get host end…let’s print result”);  
  75.   
  76.         // 对response进行处理  
  77.         for (int i = 0; i < response.getResult().size(); i++) {  
  78.   
  79.         //response 返回的信息非常大,可以赋值给HostObject,也可以其他对象  
  80.         HostObject myHostObject = response.getResult().get(i);  
  81.         //response 返回的信息非常大,可以赋值给ItemObject,也可以其他对象  
  82.         List myItemObjectList = response.getResult().get(i)  
  83.             .getItems();  
  84.   
  85.         //打印host信息  
  86.         if (null == myHostObject)  
  87.             System.out.println(”Get host null, program will exit”);  
  88.         else {  
  89.             System.out.println(”++++++Print Result ” + i  
  90.                 + ” HostObject+++++++++++”);  
  91.             System.out.println(myHostObject.getHost());  
  92.             System.out.println(myHostObject.getName());  
  93.             System.out.println(myHostObject.getAvailable());  
  94.             System.out.println(myHostObject.getHostid());  
  95.             System.out.println(myHostObject.getStatus());  
  96.         }  
  97.   
  98.         //打印这个host下的item信息  
  99.         for (int j = 0; j < myItemObjectList.size(); j++) {  
  100.             if (j == 0)  
  101.             System.out.println(”++++++Print ItemObject List ”  
  102.                 + ”+++++++++++”);  
  103.             ItemObject tmpItemObject = myItemObjectList.get(j);  
  104.             System.out.println(”Itemid:” + tmpItemObject.getItemid());  
  105.             System.out.println(”Templateid:”  
  106.                 + tmpItemObject.getTemplateid());  
  107.             System.out.println(”Hostid:” + tmpItemObject.getHostid());  
  108.             System.out.println(”Name:” + tmpItemObject.getName());  
  109.             System.out.println(”Key:” + tmpItemObject.getKey_());  
  110.             System.out.println(”Lastvalue:”  
  111.                 + tmpItemObject.getLastvalue());  
  112.             System.out.println(”Lastclock:”  
  113.                 + tmpItemObject.getLastclock());  
  114.             System.out  
  115.                 .println(”——————————————”);  
  116.   
  117.         }  
  118.   
  119.         System.out  
  120.             .println(”*****************%%%%%%%%%%%%%%************”);  
  121.   
  122.         }  
  123.   
  124.     } catch (ZabbixApiException e) {  
  125.         e.printStackTrace();  
  126.     }  
  127.     }  
  128. }  
最后贴一下执行的结果

基于java的zabbix api调用实现数据共享_第4张图片



转载来源: http://blog.csdn.net/csolo/article/details/53202823

你可能感兴趣的:(运维开发)