zabbix java api

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

Zabbix功能

概观

  • Zabbix是一个高度集成的网络监控解决方案,在单个软件包中提供了多种功能。

数据采集

  • 可用性和性能检查
  • 支持SNMP(捕获和轮询),IPMI,JMX,VMware监控
  • 定制检查
  • 以定制的间隔收集所需的数据
  • 由服务器/代理和代理执行

灵活的阈值定义

  • 您可以定义非常灵活的问题阈值,称为触发器,从后端数据库引用值

高度可配置的警报

  • 可以为升级计划,收件人,媒体类型定制发送通知
  • 使用宏变量可以使通知变得有意义和有用
  • 自动操作包括远程命令

实时绘图

  • 使用内置的图形功能立即绘制被监视的项目

Web监控功能

  • Zabbix可以按照网站上模拟鼠标点击的路径,并检查功能和响应时间

    广泛的可视化选项

  • 能够创建可以将多个项目组合成单个视图的自定义图形

  • 网络地图
  • 自定义屏幕和幻灯片,以显示仪表板风格的概述
  • 报告
  • 监控资源的高级(业务)视图

历史数据存储

  • 存储在数据库中的数据
  • 可配置历史
  • 内置内务程序

轻松配置

  • 将监控的设备添加为主机
  • 主机被拾取用于监视,一次在数据库中
  • 将模板应用于受监控设备

使用模板

  • 在模板中分组检查
  • 模板可以继承其他模板

网络发现

  • 自动发现网络设备
  • 代理商自动注册
  • 发现文件系统,网络接口和SNMP OID

快速的Web界面

  • PHP中的基于Web的前端
  • 可从任何地方访问
  • 你可以点击你的方式
  • 审核日志

Zabbix API

  • Zabbix API为Zabbix 提供了可编程接口,用于大规模操作,第三方软件集成和其他目的。

权限系统

  • 安全的用户认证
  • 某些用户可以限于某些视图

全功能和易于扩展的代理

  • 部署在监测目标上
  • 可以部署在Linux和Windows上

二进制程序

  • 写在C中,用于性能和小内存占用
  • 容易携带

准备复杂的环境

  • 通过使用Zabbix代理,远程监控变得容易

zabbix最近问题列表

pom.xml

1
2
3
4
5
<dependency>
<groupId>io.github.hengyunabc</groupId>
<artifactId>zabbix-api</artifactId>
<version>0.0.1</version>
</dependency>

zabbix获取最近问题列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
JSONObject jo = new JSONObject();
jo.put("value", 1);
jo.put("priority", new String[]{"2", "3", "4", "5"});
Request request = RequestBuilder.newBuilder().method("trigger.get")
.paramEntry("output", new String[]{"description", "priority", "lastchange"})
.paramEntry("selectHosts", new String[]{"host", "name", "hostid"})
.paramEntry("selectDependencies", "extend")
.paramEntry("expandData", "host")
.paramEntry("skipDependent", "1")
.paramEntry("monitored", "1")
.paramEntry("active", "1")
.paramEntry("expandDescription", "1")
.paramEntry("sortfield", "priority")
.paramEntry("sortorder", "DESC")
.paramEntry("filter", jo)
.build();

zabbix Api

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
import io.github.hengyunabc.zabbix.api.DefaultZabbixApi;
import io.github.hengyunabc.zabbix.api.Request;
import io.github.hengyunabc.zabbix.api.RequestBuilder;
import io.github.hengyunabc.zabbix.api.ZabbixApi;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* zabbix Api
* @author can
*/
public class ZabbixUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(ZabbixUtil.class);
private ZabbixApi zabbixApi;
public ZabbixUtil(String username, String password, String url) throws Exception {
if (StringUtils.isBlank(username) || StringUtils.isBlank(password) || StringUtils.isBlank(url)){
throw new Exception("ZabbixApi初始化失败!参数不全!");
}
login(username, password, url);
}
private ZabbixApi login(String username, String password, String url) throws Exception {
zabbixApi = new DefaultZabbixApi(url);
zabbixApi.init();
boolean login = zabbixApi.login(username, password);
if(!login){
LOGGER.info(username + " login in Zabbix " + (login ? "SUCCESS" : "FALURE") + " !");
}
return zabbixApi;
}
/**
* 获取zabbix中所以的主机群组列表
* @return 主机群组列表json
*/
public String getHostGroupList() throws Exception {
Request request = RequestBuilder.newBuilder().method("hostgroup.get")
.paramEntry("output", "extend")
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
public String getHostList() throws Exception {
Request request = RequestBuilder.newBuilder().method("host.get")
.paramEntry("output", new String[]{"host", "name", "description", "hostid"})
.paramEntry("selectGroups", "extend")
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
/**
* 获取主机ID
* @param hostIp
* @return 主机ID
*/
public String getHostByGroupid(Integer groupid) throws Exception {
Request request = RequestBuilder.newBuilder().method("host.get")
.paramEntry("groupids", groupid)
.paramEntry("output", new String[]{"host", "name", "description", "hostid"})
.paramEntry("selectGroups", "extend")
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
/**
* 获取zabbix报警列表
* @param timeFrom 仅返回在给定时间之后生成的警报。
* @return
*/
public String getAlertList(Long timeFrom) throws Exception {
Request request = RequestBuilder.newBuilder().method("alert.get")
.paramEntry("output", new String[]{"sendto", "subject", "clock", "message"})
.paramEntry("selectHosts", new String[]{"host"})
.paramEntry("time_from", timeFrom)
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
/**
* 获取zabbix报警列表
* @param timeFrom 仅返回在给定时间之后生成的警报。
* @return
*/
public String getAlertListByGroupids(Integer groupid, Long timeFrom) throws Exception {
Request request = RequestBuilder.newBuilder().method("alert.get")
.paramEntry("time_from", timeFrom)
.paramEntry("groupids", groupid)
.paramEntry("output", new String[]{"sendto", "subject", "clock", "message","triggerid"})
.paramEntry("selectHosts", new String[]{"host"})
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
/**
* 获取zabbix最近问题列表
* @return
* @throws Exception
*/
public String getTriggerInfoList() throws Exception {
JSONObject jo = new JSONObject();
jo.put("value", 1);
jo.put("priority", new String[]{"2", "3", "4", "5"});
Request request = RequestBuilder.newBuilder().method("trigger.get")
.paramEntry("output", new String[]{"description", "priority", "lastchange"})
.paramEntry("selectHosts", new String[]{"host", "name", "hostid"})
.paramEntry("selectDependencies", "extend")
.paramEntry("expandData", "host")
.paramEntry("skipDependent", "1")
.paramEntry("monitored", "1")
.paramEntry("active", "1")
.paramEntry("expandDescription", "1")
.paramEntry("sortfield", "priority")
.paramEntry("sortorder", "DESC")
.paramEntry("filter", jo)
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
/**
* 根据群组id和机器host获取触发器信息列表
* @param groupid
* @param host
* @return
* @throws Exception
*/
public String getTrigger(Integer groupid, String host) throws Exception {
Request request = RequestBuilder.newBuilder().method("trigger.get")
.paramEntry("groupids", groupid)
.paramEntry("host", host)
.paramEntry("monitored", 1)
.paramEntry("output", new String[]{"expression","description", "priority", "lastchange","status"})
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
/**
* 根据触发器id获取触发器信息
* @param triggerId
* @return
* @throws Exception
*/
public String getTriggerByTriggerId(Integer triggerId) throws Exception {
Request request = RequestBuilder.newBuilder().method("trigger.get")
.paramEntry("triggerids", triggerId)
.paramEntry("output", "extend")
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
public String getItemList() throws Exception {
Request request = RequestBuilder.newBuilder().method("item.get").paramEntry("output", "extend").paramEntry("monitored", "true").build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
public String getTriggerPrototypeByGroupid(Integer groupid) throws Exception {
Request request = RequestBuilder.newBuilder().method("triggerprototype.get")
.paramEntry("groupids", groupid)
.paramEntry("selectHosts", new String[]{"host", "hostid"})
.paramEntry("selectGroups", "extend")
.paramEntry("output", new String[]{"expression", "triggerid", "description", "priority", "status"})
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
public String getTriggerPrototypeByTriggerids(Integer triggerid) throws Exception {
Request request = RequestBuilder.newBuilder().method("triggerprototype.get")
.paramEntry("triggerids", triggerid)
.paramEntry("output", "extend")
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
public String getTriggerInfo(Integer groupid,Long lastChangeSince) throws Exception {
Request request = RequestBuilder.newBuilder().method("trigger.get")
.paramEntry("groupids", groupid)
.paramEntry("lastChangeSince", lastChangeSince)
.paramEntry("output", new String[]{"description", "priority", "lastchange"})
.paramEntry("selectHosts", new String[]{"host", "name", "hostid"})
.paramEntry("skipDependent", "1")
.paramEntry("monitored", "1")
.paramEntry("active", "1")
.paramEntry("expandDescription", "1")
.paramEntry("sortfield", "priority")
.build();
JSONObject response = zabbixRequest(request);
zabbixError(response);
JSONArray result = response.getJSONArray("result");
return result.toJSONString();
}
private JSONObject zabbixRequest(Request request) throws Exception {
JSONObject response = zabbixApi.call(request);
return response;
}
private void zabbixError(JSONObject response) throws Exception {
if (!StringUtils.isBlank(response.getString("error")))
throw new Exception("向Zabbix请求出错了!" + JSON.parseObject(response.getString("error")).getString("data"));
}

运行结果