欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-18 19:47:39
...

前提:本人参与到一个关于调用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的引入

<dependency>
	<groupId>io.github.hengyunabc</groupId>
	<artifactId>zabbix-api</artifactId>
	<version>0.0.2</version>
</dependency>

 

 三、 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简介)

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

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

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

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

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截图说明,

基于Zabbix平台的java开发总结(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();
		boolean loginResult = zabbixApi.login("登录用户名", "密码");
		if (!loginResult) {
			System.out.println("login fail");
		}
		//查询所有主机
		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);
		}
	}
}

 

相关标签: zabbix