您的位置:首页 > 编程语言 > Java开发

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

2017-09-14 15:51 1216 查看
使用了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的api有三种



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

依赖的库如下



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

[java] view plain copy print?package com.zabbix4j.apitest;
&n
4000
bsp;
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<Integer> hostIds = new ArrayList<Integer>();
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<ItemObject> 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:”
 
8af3
; + tmpItemObject.getLastvalue());
System.out.println(”Lastclock:”
+ tmpItemObject.getLastclock());
System.out
.println(”——————————————”);

}

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

}

} catch (ZabbixApiException e) {
e.printStackTrace();
}
}
}

最后贴一下执行的结果



转载来源: http://blog.csdn.net/csolo/article/details/53202823
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐