基于Zabbix平台的java开发总结(API简介)

前提:本人参与到一个关于调用zabbix API实现监控主机资源的项目。故将zabbixAPI的使用简单总结一下。有什么不对的地方还 

请指正。

一、zabbix相关网站

Zabbix是企业级软件,专为实时监控从数以万计的服务器,虚拟机和网络设备收集的数百万个指标而设计。

官网地址:https://www.zabbix.com

zabbix中文社区:http://www.zabbix.org.cn/

zabbix api 官方文档地址:https://www.zabbix.com/documentation/3.0/manual/api

官方中文文档地址:https://www.zabbix.com/documentation/3.4/zh/manual/introduction/manual_structure

zabibix学习网站:https://blog.cactifans.com/archives/page/2/

二、项目中SDK的引入


	io.github.hengyunabc
	zabbix-api
	0.0.2

 

 三、 API接口说明(此次只是说明本项目中用到的接口,接口使用大同小异)

由于使用zabbixAPI必须进行用户登录验证,所以在调用接口之前,必须先部署一个zabbix后台,拿到一个用户信息(包括用户名和密码)。

DefaultZabbixApi zabbixApi = new DefaultZabbixApi("http://zabbix服务器的主机IP/zabbix/api_jsonrpc.php");
// init方法中创建CloseableHttpClient客户端
zabbixApi.init();
//进行权限验证
boolean loginResult = zabbixApi.login("Admin", "zabbix");
if (!loginResult) {
	System.out.println("login fail");
}

代码说明:

一般 API  调用规则都是:前缀 url+参数;

http://zabbix服务器主机IP/zabbix/api_jsonrpc.php  是调用API的统一前缀 url。 

由于 zabbixapi 已经封装好了传递参数的方法。所以我们只需要调用 login 方法即可,如下所示

zabbixApi.login("username", "password");

login 方法源码解析:

public boolean login(String user, String password)
    {
        this.auth = null;
        Request request = RequestBuilder.newBuilder().
                          paramEntry("user", user).
                          paramEntry("password", password).
                          method("user.login").build();
        JSONObject response = call(request);
        String auth = response.getString("result");
        if(auth != null && !auth.isEmpty())
        {
            this.auth = auth;
            return true;
        } else
        {
            return false;
        }
 }

username和password 传入后,会调用 user.login 方法,来获取 一个 auth .存放到本地 属性 auth。

    private CloseableHttpClient httpClient;
    private URI uri;
    private volatile String auth;

用户验证通过之后,便可以用上述创建的 zabbixApi 进行方法的调用。

【*-*1】ZabbixAPI支持的参数类型:

基于Zabbix平台的java开发总结(API简介)_第1张图片

【*-*2】通用参数简要说明

output参数:当传递的是 extend 时,返回所有字段,当我们只需要返回特定字段的时候,output的值只需传递一个 属性名称数组即可。下面示例中会有代码实例。

基于Zabbix平台的java开发总结(API简介)_第2张图片

filter 参数: 以下有示例代码。

示例1、获取所有主机组(hostgroup)

Request request = RequestBuilder.newBuilder().method("hostgroup.get").
				  paramEntry("output", "extend").build();

method("hostgroup.get")中填写的是调用的方法名,paramEntry("output", "extend")传递的是接口需要的参数,可同时设置多个paramEntry("paramName", "paramValue")。接下来的示例会有具体的代码。

示例2、获取所有主机(host)

Request request2 = RequestBuilder.newBuilder().method("host.get").
				   paramEntry("output", "extend").build();

示例3、获取报警信息(alert)

Request request3 = RequestBuilder.newBuilder().method("alert.get").
                    paramEntry("output","extend").
                    paramEntry("time_from",DateUtil.getTimeMs(6)/1000).//从某个时间点开始
                    paramEntry("time_till",DateUtil.getTimeMs(5)/1000).//截止某个时间点
		    paramEntry("hostids", new String[]{"10084","10109"}). build();

 api截图说明,

从截图中可以看出 hostids 参数可传递的值的类型 为 String,例如 “10084”;

也可以是 array ,所以示例中参数值传递的是一个string类型的数组 new String[]{"10084","10109"}。以下示例中同理

示例4、获取触发器信息(trigger)

//获取所有触发器信息
Request request123 = RequestBuilder.newBuilder().method("trigger.get").
		paramEntry("output","extend").build();
//获取 监控项id为 24028、24015 的触发器信息
Request request456 = RequestBuilder.newBuilder().method("trigger.get").
		paramEntry("output","extend").
		paramEntry("itemids", new String[]{"24028","24015"}). build();

示例5、获取监控项信息(item)

通过 Key 查询 Items

从key中具有“system”一词的ID为“10112”的主机检索所有监控项

JSONObject json = new JSONObject();
json.put("key_", new String[]{"system"});
Request request55 = RequestBuilder.newBuilder().method("item.get").
    paramEntry("output", new String[]{"hostid","key_","itemid","lastvalue","prevvalue"})
    .paramEntry("hostids", new String[]{"10112"})
	.paramEntry("filter",json).build();

===========================================================================

完整示例

public class za {
	public static void main(String[] args) {
		DefaultZabbixApi zabbixApi = new DefaultZabbixApi("http://zabbix服务器IP/zabbix/api_jsonrpc.php");
		zabbixApi.init();
                try{
		    boolean loginResult = zabbixApi.login("登录用户名", "密码");
		    if (!loginResult) {
			    System.out.println("login fail");
                return;                        
		    }
		    //查询所有主机
		    Request request = RequestBuilder.newBuilder().method     ("hostgroup.get").paramEntry("output", "extend").build();
		    //执行请求
		    JSONObject resJson = zabbixApi.call(request);
		    //处理结果
		    String error = String.valueOf(resJson.get("error"));
		    if (!StringUtils.isEmpty(error) && error != "null") {
			System.out.println("调用zabbix接口出错");
		    }else{
			JSONArray jsonArray = resJson.getJSONArray("result");
			String resultStr = jsonArray.toJSONString();
			System.out.println("结果:::::"+resultStr);
		    }
                }catch(Exception e){
                    e.printStackTrace();
                }finally {
                    if (zabbixApi!=null) {
		        zabbixApi.destroy();
		    }
                }    
	}
}

 

你可能感兴趣的:(日常开发)