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
<dependency>
<groupId>io.github.hengyunabc</groupId>
<artifactId>zabbix-api</artifactId>
<version>0.0.1</version>
</dependency>
zabbix獲取最近問題列表
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
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"));
}
運行結果