设为首页 收藏本站
查看: 1327|回复: 0

[经验分享] JAVA访问Zabbix API

[复制链接]

尚未签到

发表于 2015-9-9 08:35:23 | 显示全部楼层 |阅读模式
package com.mz.zabbix;  
  import java.io.BufferedReader;
  import java.io.DataOutputStream;
  import java.io.InputStreamReader;
  import java.net.HttpURLConnection;
  import java.net.URL;
  import java.util.Date;
  import java.util.HashMap;
  import java.util.Map;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.JSONArray;
  import com.alibaba.fastjson.JSONObject;
  

  public>  private static String URL      = "http://IP:port/api_jsonrpc.php";
  private static String AUTH     = null;
  private static String USERNAME = "u";
  private static String PASSWORD = "p";
  
  
  /**
  * 向Zabbix发送Post请求,并返回json格式字符串
  *
  * @param param 请求参数
  * @return
  * @throws Exception
  */
  private static String sendPost(String param) throws Exception {
  HttpURLConnection connection = null;
  DataOutputStream out = null;
  BufferedReader reader = null;
  StringBuffer sb = null;
  try {
  //创建连接
  URL url = new URL(URL);
  connection = (HttpURLConnection) url.openConnection();
  connection.setDoOutput(true);
  connection.setDoInput(true);
  connection.setUseCaches(false);
  connection.setInstanceFollowRedirects(true);
  connection.setRequestMethod("POST");
  connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式  
  connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式  
  
  connection.connect();
  
  //POST请求
  out = new DataOutputStream(connection.getOutputStream());
  out.writeBytes(param);
  out.flush();
  
  //读取响应
  reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
  String lines;
  sb = new StringBuffer("");
  while ((lines = reader.readLine()) != null) {
  lines = new String(lines.getBytes(), "utf-8");
  sb.append(lines);
  }
  
  } catch (Exception e) {
  e.printStackTrace();
  } finally {
  if (out != null) {
  out.close();
  }
  if (reader != null) {
  reader.close();
  }
  if (connection != null) {
  connection.disconnect();
  }
  }
  return sb.toString();
  
  }
  
  
  /**
  * 通过用户名和密码设置AUTH,获得权限
  *
  * @throws Exception
  */
  private static void setAuth() throws Exception {
  Map params = new HashMap();
  params.put("user", USERNAME);
  params.put("password", PASSWORD);
  Map map = new HashMap();
  map.put("jsonrpc", "2.0");
  map.put("method", "user.login");
  map.put("params", params);
  map.put("auth", null);
  map.put("id", 0);
  String param = JSON.toJSONString(map);
  String response = sendPost(param);
  JSONObject json = JSON.parseObject(response);
  AUTH = json.getString("result");
  }
  
  
  /**
  * 获得主机hostid
  *
  * @param host Zabbix中配置的主机hosts
  * @return 返回hostid
  * @throws Exception
  */
  private static String getHostid(String host) throws Exception {
  Map filter = new HashMap();
  filter.put("host", host);
  Map params = new HashMap();
  params.put("output", "hostid");
  params.put("filter", filter);
  Map map = new HashMap();
  map.put("jsonrpc", "2.0");
  map.put("method", "host.get");
  map.put("params", params);
  map.put("auth", AUTH);
  map.put("id", 0);
  String param = JSON.toJSONString(map);
  String response = sendPost(param);
  JSONObject json = JSON.parseObject(response).getJSONArray("result").getJSONObject(0);
  String hostid = json.getString("hostid");
  return hostid;
  }
  
  
  /**
  * 获得某主机的某个监控项id
  *
  * @param host 主机
  * @param item 监控项
  * @return 监控项itemid
  * @throws Exception
  */
  private static String getItemid(String host, String item) throws Exception {
  Map search = new HashMap();
  search.put("key_", item);
  Map params = new HashMap();
  params.put("output", "itemids");
  params.put("hostids", getHostid(host));
  params.put("search", search);
  Map map = new HashMap();
  map.put("jsonrpc", "2.0");
  map.put("method", "item.get");
  map.put("params", params);
  map.put("auth", AUTH);
  map.put("id", 0);
  String param = JSON.toJSONString(map);
  
  String response = sendPost(param);
  JSONObject json = JSON.parseObject(response).getJSONArray("result").getJSONObject(0);
  String itemid = json.getString("itemid");
  return itemid;
  }
  
  
  /**
  * 获取某主机某监控项在一段时间内的数据
  *
  * @param host 主机
  * @param item 监控项
  * @param time_from 起始时间
  * @param time_till 结束时间
  * @throws Exception
  */
  public static void getDatas(String host, String item, Date time_from, Date time_till)
  throws Exception {
  Map params = new HashMap();
  params.put("output", "extend");
  params.put("history", 0);
  params.put("itemids", getItemid(host, item));
  params.put("time_from", time_from.getTime() / 1000);
  params.put("time_till", time_till.getTime() / 1000);
  Map map = new HashMap();
  map.put("jsonrpc", "2.0");
  map.put("method", "history.get");
  map.put("params", params);
  map.put("auth", AUTH);
  map.put("id", 0);
  String param = JSON.toJSONString(map);
  String response = sendPost(param);
  JSONArray json = JSON.parseObject(response).getJSONArray("result");
  System.out.println(json);
  }
  
  
  public static void main(String[] args) throws Exception {
  setAuth();
  long time_till = new Date().getTime();
  long time_from = time_till - 5 * 60000;
  getDatas("GZ-FastDFS-15.16", "system.cpu.util[,idle]", new Date(time_from), new Date(
  time_till));
  }
  }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-111205-1-1.html 上篇帖子: zabbix(二) 下篇帖子: zabbix监控项
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表