Zabbix实践(五):基于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的情况,如下图

Zabbix实践(五):基于java的zabbix api调用实现数据共享_第1张图片

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

Zabbix实践(五):基于java的zabbix api调用实现数据共享_第2张图片

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

依赖的库如下

Zabbix实践(五):基于java的zabbix api调用实现数据共享_第3张图片

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

package com.zabbix4j.apitest;

import com.zabbix4j.ZabbixApi;
import com.zabbix4j.ZabbixApiException;
import com.zabbix4j.ZabbixApiParamter;
import com.zabbix4j.host.*;
import com.zabbix4j.hostinteface.HostInterfaceObject;
import com.zabbix4j.item.ItemObject;
import com.zabbix4j.usermacro.Macro;

import java.util.ArrayList;
import java.util.List;

public class Zabbix4jSampleGetHost extends ZabbixApiTestDummyMethodBase {

    public Zabbix4jSampleGetHost(ZabbixApi zabbixApi) {
	super(zabbixApi);
    }

    // 这里配置zabbix的url,帐号和密码
    public static final String ZBX_URL = "http://192.168.136.144/zabbix/api_jsonrpc.php";
    public static final String USERNAME = "admin";
    public static final String PASSWORD = "zabbix";

    // 调用api的host get方法的封装
    public HostGetResponse getHost() throws ZabbixApiException {

	Integer targetHostId = 10105;
	HostGetRequest request = new HostGetRequest();
	HostGetRequest.Params params = request.getParams();

	ArrayList hostIds = new ArrayList();
	hostIds.add(targetHostId);
	// params.setHostids(hostIds);
	// 这里可以设指定的id值,也可以不设值。设值的话,取指定的内容,不设的话,获取全部的host
	params.setHostids(null);

	params.setSelectDiscoveryRule(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectGroups(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectItems(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectApplications(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectDiscoveries(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectGraphs(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectHostDiscovery(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectHttpTests(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectInterfaces(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectInventory(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectMacros(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectParentTemplates(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectScreens(ZabbixApiParamter.QUERY.extend.name());
	params.setSelectTriggers(ZabbixApiParamter.QUERY.extend.name());

	System.out.println("parames setting complete...");
	HostGetResponse response = zabbixApi.host().get(request);

	return response;
    }

    public static void main(String[] args) {

	try {
	    // login to Zabbix
	    System.out.println("beging...");
	    ZabbixApi zabbixApi = new ZabbixApi(ZBX_URL);
	    zabbixApi.login(USERNAME, PASSWORD);

	    System.out.println("create new get host instance...");
	    Zabbix4jSampleGetHost myGetHost = new Zabbix4jSampleGetHost(
		    zabbixApi);

	    System.out.println("Get host beging...");
	    HostGetResponse response = myGetHost.getHost();

	    System.out.println("Get host end...let's print result");

	    // 对response进行处理
	    for (int i = 0; i < response.getResult().size(); i++) {

		//response 返回的信息非常大,可以赋值给HostObject,也可以其他对象
		HostObject myHostObject = response.getResult().get(i);
		//response 返回的信息非常大,可以赋值给ItemObject,也可以其他对象
		List myItemObjectList = response.getResult().get(i)
			.getItems();

		//打印host信息
		if (null == myHostObject)
		    System.out.println("Get host null, program will exit");
		else {
		    System.out.println("++++++Print Result " + i
			    + " HostObject+++++++++++");
		    System.out.println(myHostObject.getHost());
		    System.out.println(myHostObject.getName());
		    System.out.println(myHostObject.getAvailable());
		    System.out.println(myHostObject.getHostid());
		    System.out.println(myHostObject.getStatus());
		}

		//打印这个host下的item信息
		for (int j = 0; j < myItemObjectList.size(); j++) {
		    if (j == 0)
			System.out.println("++++++Print ItemObject List "
				+ "+++++++++++");
		    ItemObject tmpItemObject = myItemObjectList.get(j);
		    System.out.println("Itemid:" + tmpItemObject.getItemid());
		    System.out.println("Templateid:"
			    + tmpItemObject.getTemplateid());
		    System.out.println("Hostid:" + tmpItemObject.getHostid());
		    System.out.println("Name:" + tmpItemObject.getName());
		    System.out.println("Key:" + tmpItemObject.getKey_());
		    System.out.println("Lastvalue:"
			    + tmpItemObject.getLastvalue());
		    System.out.println("Lastclock:"
			    + tmpItemObject.getLastclock());
		    System.out
			    .println("------------------------------------------");

		}

		System.out
			.println("*****************%%%%%%%%%%%%%%************");

	    }

	} catch (ZabbixApiException e) {
	    e.printStackTrace();
	}
    }
}
最后贴一下执行的结果

Zabbix实践(五):基于java的zabbix api调用实现数据共享_第4张图片

你可能感兴趣的:(ZABBIX)