`
arpenker
  • 浏览: 357469 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java连接Zabbix

阅读更多

下面例子我们通过调用Zabbix的API获取到我们Zabbix所产生的告警信息。

Zabbix Api官方手册:https://www.zabbix.com/documentation/3.0/en/manual/api

要想获取到Zabbix上的其他信息,可以参考我们的Zabbix Api进行配置!

导入相关maven

复制代码
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5-20081211</version>
</dependency>
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.76</version>
</dependency>
复制代码
实现类

复制代码
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zabbix.dao.ZabbixDao;
import com.zabbix.dao.ZabbixDaoImpl;
import com.zabbix.utils.EditTool;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;

/**
* @author
* @since
*/
public class ZabbixUtil {

    private static String       URL      = "http://192.168.111.131/zabbix/api_jsonrpc.php";   //Zabbix访问地址

    private static String       AUTH     = null;  

    private static final String USERNAME = "Admin";   //登录Zabbix的用户名

    private static final String PASSWORD = "zabbix";  //密码


    /**
     * 向Zabbix发送Post请求,并返回json格式字符串
     *
     * @return
     * @throws Exception
     */
    private static String sendPost(Map map) {
        String param = JSON.toJSONString(map);
        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);
            //中文用户名需设置UTF-8,out.write(param.getBytes("UTF-8"));
            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) {
                try {
                    out.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                connection.disconnect();
            }
        }
        return sb.toString();

    }


    /**
     * 通过用户名和密码设置AUTH,获得权限
     */
    private static void setAuth() {

        Map<String, Object> params = new HashMap<String, Object>();
        params.put("user", USERNAME);
        params.put("password", PASSWORD);

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("jsonrpc", "2.0");
        map.put("method", "user.login");
        map.put("params", params);
        map.put("id", 0);
        map.put("auth", null);


        String response = sendPost(map);
        JSONObject json = JSON.parseObject(response);
        AUTH = json.getString("result");
    }

    private static String getAuth() {
        if (AUTH == null) {
            setAuth();
        }
        return AUTH;
    }


    /**
     * 通过IP获得主机hostid
     *
     * @return 返回hostid @
     */
    private static String getHostIdByIp(String ip) {
        Map<String, Object> filter = new HashMap<String, Object>();
        filter.put("ip", ip);
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("output", "extend");
        params.put("filter", filter);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("jsonrpc", "2.0");
        map.put("method", "host.get");
        map.put("params", params);
        map.put("auth", getAuth());
        map.put("id", 0);

        String response = sendPost(map);
        JSONArray result = JSON.parseObject(response).getJSONArray("result");
        if (result.size() > 0) {
            JSONObject json = result.getJSONObject(0);
            String hostId = json.getString("hostid");
            return hostId;
        } else {
            return null;
        }
    }


    /**
     * 通过IP获取主机名称
     *
     * @return 返回hostname @
     */
    private static String getHostname(String ip) {
        Map<String, Object> filter = new HashMap<String, Object>();
        filter.put("ip", ip);
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("output", "extend");
        params.put("filter", filter);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("jsonrpc", "2.0");
        map.put("method", "host.get");
        map.put("params", params);
        map.put("auth", getAuth());
        map.put("id", 0);

        String response = sendPost(map);
        JSONArray result = JSON.parseObject(response).getJSONArray("result");
        if (result.size() > 0) {
            JSONObject json = result.getJSONObject(0);
            String hostname = json.getString("host");
            return hostname;
        } else {
            return null;
        }
    }
    /**
     * 通过主机IP获取告警信息
     *
     * @return 返回mailMap @
     */
    private static List actionById(String ip) {
        List list=new ArrayList();
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("output", "extend");
        params.put("hostids", getHostIdByIp(ip));
        params.put("selectFunctions","extend");

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("jsonrpc", "2.0");
        map.put("method", "trigger.get");
        map.put("params", params);
        map.put("auth", getAuth());
        map.put("id", 1);

        JSONObject json = null;
        String response = sendPost(map);
        JSONArray result = JSON.parseObject(response).getJSONArray("result");
        if (result.size() > 0) {
            for (int i = 0; i < result.size(); i++) {
                json = result.getJSONObject(i);
                Map warnMap=new HashMap();
                warnMap.put("description",json.getString("description"));
                warnMap.put("value",json.getString("value"));
                warnMap.put("priority",json.getString("priority"));
                list.add(warnMap);
            }
            return list;
        } else {
            return null;
        }
    }


    @Override
    public void run(){
        setAuth();
        String ip = "192.168.111.130";  //要获取信息的主机IP地址

        //获取数据库接口
        ZabbixDao dBtest = new ZabbixDaoImpl();
        //获取主机名称
        String hostName = getHostname(ip);
        //通过主机id获取告警信息
        List list = actionById(ip);
        //获取告警具体某字段信息
        if(list != null && !list.isEmpty()){
            for(int i=0;i<list.size();i++){
                Map warnMap=(Map)list.get(i);
                String warn_content= String.valueOf(warnMap.get("description"));
                String warn_type= String.valueOf(warnMap.get("priority"));
                String warn_status= String.valueOf(warnMap.get("value"));
            }
        }
    }
}
复制代码
分享到:
评论

相关推荐

    zabbix-java-gateway.tar.zip

    配置Zabbix Java Gateway涉及到设置JMX连接参数、定义监控项和触发器,以及调整数据采集频率。优化则包括合理设置缓存策略、减少不必要的数据传输,以及调整服务的并发处理能力,以确保性能和稳定性。 5. **安全...

    Zabbix通过JMX方式监控java中间件

    4. **多线程处理**:Zabbix Server端有一个特殊的进程StartJavaPollers用于连接Java-gateway。Java-gateway可以通过配置文件中的START_POLLERS参数启动多个线程来处理请求。需要注意的是,StartJavaPollers的值应该...

    Zabbix通过JMX监控java中间件.docx

    Zabbix-Java-gateway 是 Zabbix 服务器的一个代理,它可以连接到 Java 应用程序,并从中获取监控数据。Zabbix 服务器可以通过 Zabbix-Java-gateway 来监控 Java 应用程序的性能指标,例如内存使用情况、CPU 使用率、...

    zabbix api 源码

    1. **ZabbixApi类**:这是整个库的核心,它初始化了与Zabbix服务器的连接,并提供了所有API调用的入口点。你需要提供服务器地址、用户名和密码来实例化ZabbixApi对象,然后就可以调用它的方法执行各种操作。 2. **...

    java中zabbix常用参数与指令_.docx

    根据提供的文档信息,本文将详细解释Java环境中Zabbix的常用参数与指令,这些知识点主要集中在网络监控工具iftop的应用上,因为文档中的示例和参数均与iftop有关。值得注意的是,虽然文档标题和描述中提及了“Java中...

    monitor源码java-zabbix_java:ZabbixJavaGateway源已更新,以允许进行jmx.discovery,jbos

    监控原始Java Zabbix Java网关 描述 这是Zabbix Java Gateway的源代码,已更新为允许 jmx.discovery项(使用Mbeans自动发现) JBoss JMX Weblogic T3协议 它是如何工作的 您必须在JMX项目中指定一个用户名,例如“ ...

    zabbix监控系统 PDF 下载

    Zabbix可以通过JMX连接到Java应用服务器,如Tomcat、JBoss等,获取内存使用、线程状态、Garbage Collection等关键信息。 在Java环境中,集成Zabbix监控通常包括以下步骤: 1. **启用JMX**:在Java应用服务器的启动...

    zabbix常用模板集合

    Tomcat是Apache软件基金会的一个开源Java应用服务器。此模板关注Tomcat的JVM内存使用、线程池状态、请求处理时间和错误率,有助于确保Web应用的稳定运行。 5. **zabbix php-fpm模块.xml**: PHP-FPM(FastCGI ...

    ZABBIX搭建

    1. **连接ZABBIX**:使用API连接到ZABBIX服务器。 2. **获取数据**:获取监控项的值,如CPU利用率、磁盘空间等。 3. **发送事件**:模拟设备事件,触发ZABBIX的警报机制。 4. **配置模板**:通过API动态创建或更新...

    zabbix监控tomcat模版及jar包

    本篇文章将详细介绍如何使用Zabbix监控Tomcat,特别是通过JMX(Java Management Extensions)来监控Tomcat,并涉及到相关的jar包和Zabbix模板。 首先,让我们了解一下`cmdline-jmx`和`catalina-jmx`这两个标签所指...

    zabbix_tomcat_template , zabbix模板

    本文将深入探讨名为"zabbix_tomcat_template"的Zabbix模板,它是专门用于监控Java应用服务器Tomcat的一款模板。 1. **模板介绍** "zabbix_tomcat_template"是Zabbix针对Apache Tomcat服务器设计的监控模板,它包含...

    zabbix-3.2.6.tar.gz

    本文将详细介绍如何利用Zabbix 3.2.6的安装包进行安装,包括Zabbix-Server、Zabbix-Agent以及Zabbix-Java-Gateway的部署,帮助您构建起一个全面、高效的监控系统。 首先,我们需要了解Zabbix的组件。在Zabbix 3.2.6...

    zabbix2.2.8安装与基本配置

    测试数据库连接是否正常: ```bash # mysql -u zabbix -pzabbix zabbix ``` 最后,导入Zabbix的数据库结构和初始数据: ```bash # mysql -u zabbix -pzabbix zabbix &lt;/usr/local/src/zabbix-2.2.8/database/mysql...

    离线安装zabbix.pdf

    标题中提到的“离线安装Zabbix”,指的是在没有互联网连接的环境中安装和配置Zabbix监控系统。Zabbix是一款基于Web的开源监控工具,它可以帮助用户监控网络、服务器、应用等资源的性能和可用性。 描述中提到的...

    Zabbix3.0使用手册

    在 `/etc/zabbix/zabbix_server.conf` 文件中设置数据库连接参数: ```plaintext DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=password ``` **3. 启动 Zabbix 服务** - 启动 Zabbix Server 和...

    zabbix监控tomcat

    本文将深入探讨如何使用Zabbix来监控Apache Tomcat,一个流行的Java应用服务器。 首先,让我们理解Zabbix监控Tomcat的重要性。Tomcat是许多基于Java的Web应用程序的首选平台,包括但不限于Spring Boot应用、RESTful...

    Zabbix监控培训视频.rar

    │ 01- 01-zabbix的安装.mp4,网盘文件,永久连接 │ 02 - 02-为什么需要监控.mp4 │ 03 - 03-常用的监控命令.mp4 │ 04 - 04-zabbix的监控架构.mp4 │ 05 - 05-添加一台监控主机.mp4 │ 06- 06-自定义一个监控项.mp4...

    zabbix监控redis集群

    这里以Zabbix 6.2.8为例,首先从阿里云镜像站下载`zabbix-6.2.8-release1.el9.src.rpm`安装包,并安装依赖包,包括net-snmp、curl、java、OpenIPMI、libssh2、libevent、mysql、go、libxml2、openldap等。...

    zabbix模板

    Zabbix模板可以监控MySQL的关键指标,如查询速率、连接数、缓存命中率、InnoDB锁等待等,以便及时发现并解决性能问题。 2. **Tomcat监控**: Tomcat是Java Servlet和JavaServer Pages的开源应用服务器。Zabbix模板将...

    zabbix培训.doc

    部署Zabbix Server时,需要连接到之前部署的MySQL数据库,并指定Java Gateway的位置。命令如下: ```bash docker run --name zabbix-server-mysql -t \ -e DB_SERVER_HOST="mysql-server" \ -e MYSQL_DATABASE=...

Global site tag (gtag.js) - Google Analytics