使用了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里面,进一步做了封装,也提供了一些测试代码。本次实践就是在这个基础上进行实践的。
依赖的库如下
下面贴一下代码,代码里面做了比较详细的描述。
- 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<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:”
- + tmpItemObject.getLastvalue());
- System.out.println(”Lastclock:”
- + tmpItemObject.getLastclock());
- System.out
- .println(”——————————————”);
- }
- System.out
- .println(”*****************%%%%%%%%%%%%%%************”);
- }
- } catch (ZabbixApiException e) {
- e.printStackTrace();
- }
- }
- }