Java使用zabbix示例
来源:互联网 发布:淘宝衣服搭配在哪里 编辑:程序博客网 时间:2024/05/19 05:33
1、创建类ZabbixRequest
public class ZabbixRequest {String jsonrpc = "2.0";String method;String auth;Integer id;public String getJsonrpc() {return jsonrpc;}public void setJsonrpc(String jsonrpc) {this.jsonrpc = jsonrpc;}public String getMethod() {return method;}public void setMethod(String method) {this.method = method;}public String getAuth() {return auth;}public void setAuth(String auth) {this.auth = auth;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}}
2、创建类ZabbixRequestObject
public class ZabbixRequestObject extends ZabbixRequest {private Object params;public Object getParams() {return params;}public void setParams(Object params) {this.params = params;}}
3、创建类ZabbixRequestParams
import java.util.HashMap;import java.util.Map;public class ZabbixRequestParams extends ZabbixRequest {private Map<String, Object> params = new HashMap<String, Object>();public Map<String, Object> getParams() {return params;}public void setParams(Map<String, Object> params) {this.params = params;}public void putParam(String key, Object value) {params.put(key, value);}public Object removeParam(String key) {return params.remove(key);}}
4、创建类ZabbixRequestBuilder
import java.util.concurrent.atomic.AtomicInteger;public class ZabbixRequestBuilder { private static final AtomicInteger nextId = new AtomicInteger(1); ZabbixRequest request ; ZabbixRequestObject obj= new ZabbixRequestObject(); ZabbixRequestParams param = new ZabbixRequestParams(); private ZabbixRequestBuilder(String str){if("obj".equals(str)){this.request= obj;}else{this.request = param;}} static public ZabbixRequestBuilder newBuilder(String str){return new ZabbixRequestBuilder(str);}static public ZabbixRequestBuilder newBuilder(){return new ZabbixRequestBuilder("param");}public ZabbixRequest build(){if(request.getId() == null){request.setId(nextId.getAndIncrement());}return request;}public ZabbixRequestBuilder version(String version){request.setJsonrpc(version);return this;}public ZabbixRequestBuilder paramEntry(String key, Object value){if(request instanceof ZabbixRequestParams){((ZabbixRequestParams) request).putParam(key, value);}return this;}/** * Do not necessary to call this method.If don not set id, ZabbixApi will auto set request auth.. * @param auth * @return */public ZabbixRequestBuilder auth(String auth){request.setAuth(auth);return this;}public ZabbixRequestBuilder method(String method){request.setMethod(method);return this;}/** * Do not necessary to call this method.If don not set id, RequestBuilder will auto generate. * @param id * @return */public ZabbixRequestBuilder id(Integer id){request.setId(id);return this;}public ZabbixRequestBuilder object(Object obj){if(request instanceof ZabbixRequestObject){((ZabbixRequestObject)request).setParams(obj);}return this;}}
5、公用方法
public class ZabbixShare {private static final Logger logger = LoggerFactory.getLogger(ZabbixShare.class);@Autowired Environment env;private String auth; public String getAuth() {return auth;}public void setAuth(String auth) {this.auth = auth;}public boolean login() throws URISyntaxException { String uname =env.getProperty("ZABBIX_UNAME"); String upwd =env.getProperty("ZABBIX_UPWD") ; ZabbixRequest request = ZabbixRequestBuilder.newBuilder().paramEntry("user",uname ).paramEntry("password",upwd ).method("user.login").build();JSONObject response = call(request);String auth = response.getString("result");if (auth != null && !auth.isEmpty()) {this.setAuth(auth);logger.info("login zabbix success!");return true;}logger.info("login zabbix failed!");return false;}/** * 查询ITEMS * @param hostName hostIP * @param searchKey 查询KEY * @param groupName group名 * @return item列表 * @throws Exception 异常 */public JSONObject queryItems(String hostName,String searchKey,String groupName)throws Exception{JSONObject response = null;JSONObject search = new JSONObject();logger.info("queryItems--searchKey: "+searchKey+" hostName:"+hostName+" groupName: "+groupName); search.put("key_", searchKey);ZabbixRequest request = ZabbixRequestBuilder.newBuilder().method("item.get").paramEntry("output", "extend").paramEntry("host", hostName).paramEntry("search", search)//.paramEntry("group", groupName).build(); response = call(request);return response;}/** * 查询HOST * @param hostName hostIP * @return HOST列表 * @throws Exception 异常 */public JSONObject queryHost(String hostName)throws Exception{JSONObject response = null;if(login()){logger.info("queryHost--hostName: "+hostName); JSONObject search = new JSONObject(); search.put("host", hostName);ZabbixRequest request = ZabbixRequestBuilder.newBuilder().method("host.get").paramEntry("output", "extend").paramEntry("filter",search).build(); response = call(request);}return response;}/** * 查询Applications * @param hostId hostId * @param name 查询名 * @return Applications列表 * @throws Exception 异常 */public JSONObject queryApplications(String hostId,String name)throws Exception{JSONObject response = null;JSONObject search = new JSONObject();search.put("key", name);logger.info("queryApplications--hostId: "+hostId);ZabbixRequest request = ZabbixRequestBuilder.newBuilder().method("application.get").paramEntry("output", "extend").paramEntry("hostids",hostId).paramEntry("filter",search).build(); response = call(request); logger.info(String.format("queryApplications response:%s", response.toJSONString()));return response;}/** * hostinterface.get * @param hostId hostid * @return hostinterface list * @throws Exception */public JSONObject queryHostInterface(String hostId)throws Exception{JSONObject response = null;logger.info("queryHostInterface--hostId: "+hostId);ZabbixRequest request = ZabbixRequestBuilder.newBuilder().method("hostinterface.get").paramEntry("output", "extend").paramEntry("hostids",hostId).build(); response = call(request); logger.info(String.format("queryHostInterface response:%s", response.toJSONString()));return response;}public JSONObject call(ZabbixRequest request) throws URISyntaxException {if (request.getAuth() == null) {request.setAuth(auth);}String url =env.getProperty("ZABBIX_URL");try {HttpUriRequest httpRequest = org.apache.http.client.methods.RequestBuilder.post().setUri(new URI(url.trim())).addHeader("Content-Type", "application/json").setEntity(new StringEntity(JSON.toJSONString(request),"utf-8")).build();CloseableHttpClient httpClient=HttpClients.custom().build();CloseableHttpResponse response = httpClient.execute(httpRequest);HttpEntity entity = response.getEntity();byte[] data = EntityUtils.toByteArray(entity);return (JSONObject) JSON.parse(data);} catch (IOException e) {throw new RuntimeException("DefaultZabbixApi call exception!", e);}} /** * 将入参转为需要的格式 * @param user_time * @return * @throws Exception */ public static String dateToTimestamp(String time_from) throws Exception { Calendar calendar = Calendar.getInstance(); switch (time_from) { case "d": calendar.add(Calendar.DAY_OF_YEAR, -1); break; case "w": calendar.add(Calendar.WEEK_OF_YEAR, -1); break; case "m": calendar.add(Calendar.MONTH, -1); break; case "h": calendar.add(Calendar.HOUR,-12); break;default:calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1);break;} String re_time = null; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d; d = sdf.parse(sdf.format(calendar.getTime())); long l = d.getTime(); String str = String.valueOf(l); re_time = str.substring(0, 10); return re_time; }/** * 根据监控项id和主机id查询监控项 * @param monitorKeys (必须)监控项keys * @param hostids 主机ids * @param outputs 输出栏位名称 * @return 符合条件的items json * @throws MonitorException */public JSONObject queryItemsByKeysHostids(Collection<String> monitorKeys, Collection<String> hostids,String... outputs) throws MonitorException {try {JSONObject filter = new JSONObject();filter.put("key_", monitorKeys);if (CollectionUtils.isNotEmpty(hostids)) {filter.put("hostid", hostids);}ZabbixRequestBuilder builder = ZabbixRequestBuilder.newBuilder().method("item.get")//.paramEntry("output", ArrayUtils.isEmpty(outputs) ? "extend" : outputs)//.paramEntry("filter", filter)//.paramEntry("selectInterfaces", new String[]{"interfaceid", "hostid", "ip", "type"}).paramEntry("selectTriggers", new String[]{"triggerid", "expression", "state", "status", "value"}).paramEntry("selectHosts", new String[] { "host", "hostid" });//ZabbixRequest request =builder.build();logger.info(String.format("queryItemsByKeysHostids >>>>request:%s", ToStringBuilder.reflectionToString(request)));JSONObject json = call(request);logger.info(String.format("queryItemsByKeysHostids <<<response:%s", json.toJSONString()));return json;} catch (Exception e) {logger.error("查询监控信息失败!", e);throw new MonitorException("监控信息不存在!");}}/** * 根据监控项key查询模板监控项 * @param monitorKeys * @param outputs * @return * @throws MonitorException */public JSONObject queryTemplateItemsByKeys(Collection<String> monitorKeys, String... outputs) throws MonitorException{try {JSONObject filter = new JSONObject();filter.put("key_", monitorKeys);ZabbixRequestBuilder builder = ZabbixRequestBuilder.newBuilder().method("item.get")//.paramEntry("output", ArrayUtils.isEmpty(outputs) ? "extend" : outputs)//.paramEntry("filter", filter)//.paramEntry("templated", true);//ZabbixRequest request =builder.build();logger.info(String.format("queryTemplateItemsByKeys >>>>request:%s", ToStringBuilder.reflectionToString(request)));JSONObject json = call(request);logger.info(String.format("queryTemplateItemsByKeys <<<response:%s", json.toJSONString()));return json;} catch (Exception e) {logger.error("查询监控信息失败!", e);throw new MonitorException("监控信息不存在!");}}/** * 根据主机名称查询主机 * @param hostNames 主机名称 * @param outputs 输出栏位名称 * @return 符合条件的主机 * @throws MonitorException */public JSONObject queryHostsByHostnames(Collection<String> hostNames, String... outputs) throws MonitorException {try {JSONObject jsonHostInterfaces = queryInterfacesByHostnames(hostNames, "hostid");JSONArray hostArray = jsonHostInterfaces.getJSONArray("result");Set<String> hostids = new HashSet<String>();for(int i = 0; i< hostArray.size(); i++){hostids.add(hostArray.getJSONObject(i).getString("hostid"));}if(CollectionUtils.isEmpty(hostids)){throw new MonitorException("主机不存在,HostNames : " + hostNames);}JSONObject filter = new JSONObject();filter.put("hostid", hostids);ZabbixRequest request = ZabbixRequestBuilder.newBuilder().method("host.get")//.paramEntry("filter", filter)//.paramEntry("selectInterfaces", new String[]{"interfaceid", "ip", "type", "hostid"})//.paramEntry("output", ArrayUtils.isEmpty(outputs) ? "extend" : outputs)//.build();logger.info(String.format("queryHostsByHostnames >>>>request:%s", ToStringBuilder.reflectionToString(request)));JSONObject json = call(request);logger.info(String.format("queryHostsByHostnames <<<response:%s", json.toJSONString()));return json;} catch (Exception e) {logger.error("host不存在:" + e.getMessage(), e);throw new MonitorException("主机信息不存在!");}}/** * 通过name,查询模板详情 * @param name * @return * @throws URISyntaxException */public JSONObject queryTemplateByName(String name) throws URISyntaxException{JSONObject response = null;if(login()){List<String> out = Arrays.asList(name);List<String> output = Arrays.asList("itemid","name","key_");Map<String,Object> filter = new HashMap<String, Object>();filter.put("host", out);ZabbixRequest request = ZabbixRequestBuilder.newBuilder().method("template.get").paramEntry("output", "extend").paramEntry("selectItems", output).paramEntry("filter", filter).build(); response = call(request);}return response;}/** * 通过itemid,查询模板详情 * @param name * @return * @throws URISyntaxException */public JSONObject queryTemplateByItemids(List<String> itemids, Collection<String> hostids, String...outputs) throws URISyntaxException{JSONObject response = null;ZabbixRequest request = ZabbixRequestBuilder.newBuilder().method("template.get").paramEntry("itemids", itemids).paramEntry("hostids", hostids).paramEntry("selectHosts", new String[]{"hostid", "host"}).paramEntry("output", ArrayUtils.isEmpty(outputs) ? "extend" : outputs).build();logger.info(String.format("queryTemplateByItemids >>>>request:%s", ToStringBuilder.reflectionToString(request)));response = call(request);logger.info(String.format("queryTemplateByItemids <<<response:%s", response.toJSONString()));return response;}private JSONObject queryInterfacesByHostnames(Collection<String> hostNames, String... outputs) throws MonitorException{try {JSONObject filter = new JSONObject();filter.put("ip", hostNames);ZabbixRequest request = ZabbixRequestBuilder.newBuilder().method("hostinterface.get")//.paramEntry("filter", filter)//.paramEntry("output", ArrayUtils.isEmpty(outputs) ? "extend" : outputs)//.build();logger.info(String.format("queryInterfacesByHostnames >>>>request:%s", ToStringBuilder.reflectionToString(request)));JSONObject json = call(request);logger.info(String.format("queryInterfacesByHostnames <<<response:%s", json.toJSONString()));return json;} catch (Exception e) {logger.error("host ip不存在:" + e.getMessage(), e);throw new MonitorException("主机 ip不存在!");}}}
api文档 https://www.zabbix.com/documentation/2.2/manual/api
0 0
- Java使用zabbix示例
- zabbix的使用:简介+安装+java api
- zabbix使用
- [zabbix]zabbix使用脚本监控
- java Socket使用示例
- java正则使用示例
- java NIO使用示例
- java BeanUtils 使用示例
- Java Quartz使用示例
- java ArrayBlockingQueue 使用示例
- java Jedis使用示例
- java Object使用示例
- java JTable使用示例
- java Jedis使用示例
- Java使用memcache示例
- Java使用示例
- java Jedis使用示例
- java socket使用示例
- ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
- 51nod 1106 质数检测
- 常用Qt类的继承图
- C语言的分支结构和循环结构(二)
- 数据库
- Java使用zabbix示例
- Spring 3.x 企业开发实战Chapter7 Part1
- linux部署dubbo服务可执行Jar和启动批处理命令编写
- 51nod 1108 距离之和最小 V2
- gcc代码优化
- 51nod 1110 距离之和最小 V3
- 关于元素高度的几个point
- bootbox.js实践总结(一)
- codevs1342 种树