基于Zabbix平台的java开发总结(API简介)
前提:本人参与到一个关于调用zabbix API实现监控主机资源的项目。故将zabbixAPI的使用简单总结一下。有什么不对的地方还
请指正。
一、zabbix相关网站
Zabbix是企业级软件,专为实时监控从数以万计的服务器,虚拟机和网络设备收集的数百万个指标而设计。
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支持的参数类型:
【*-*2】通用参数简要说明
output参数:当传递的是 extend 时,返回所有字段,当我们只需要返回特定字段的时候,output的值只需传递一个 属性名称数组即可。下面示例中会有代码实例。
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();
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);
}
}
}
上一篇: Document对象
下一篇: 打包和资源文件的路径问题
推荐阅读
-
基于Java的Zabbix二次开发-----主机列表的获取
-
zabbix的使用:简介+安装+java api
-
基于java的zabbix4.4 API开发
-
Java 开源办公开发平台 O2OA V6.0 发布 | 全新的前端 API 手册上线
-
rk3288_7.1平台基于DRM框架的HDMI开发总结
-
基于Zabbix平台的java开发总结(API简介)
-
JeecgBoot 2.1.1 代码生成器AI版本发布,基于SpringBoot+AntDesign的JAVA快速开发平台
-
JeecgBoot 2.1.1 代码生成器AI版本发布,基于SpringBoot+AntDesign的JAVA快速开发平台
-
Java 开源办公开发平台 O2OA V6.0 发布 | 全新的前端 API 手册上线