zsyzhou 发表于 2015-9-9 08:35:23

JAVA访问Zabbix API

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]
查看完整版本: JAVA访问Zabbix API