zabbix API的调用以及获取监控项信息_获取交换机的监控信息api

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>io.github.hengyunabc</groupId>
            <artifactId>zabbix-api</artifactId>
            <version>0.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    </dependencies>

2.2项目整体结构

然后我们项目的整体结构如下:

其中InsertDataToMysql这个文件是我们没有用到的,这里就不删啦,大家自行忽略。测试类是我们所需要的,后续会详细说明,大家不要忽略。

2.3 ZabbixConfig配置文件

ok,我们继续展示代码,按照项目结构顺序来,首先,config包下ZabbixConfig这个文件:

@Component
@ConfigurationProperties(prefix = "zabbix.config")
@Data
public class ZabbixConfig {

    private String url;
    private String username;
    private String password;
}

以上的配置类代码用于读取以 zabbix.config 前缀开头的配置属性。我们在appliocation.yaml文件中进行了相关配置,读取配置文件中以 zabbix.config 为前缀的属性,并将其映射到对应的变量上。appliocation.yaml文件中代码如下:

2.4 application.yaml文件

zabbix:
  config:
    url: http://xx.xx.xx.xx/zabbix/api_jsonrpc.php
    username: Admin
    password: zabbix

这里的url是如我第一篇配置zabbix的那个url,username以及password都是zabbix默认的,如果大家配置时有修改则要对应修改,“/api_jsonrpc.php”这个后缀是我阅读了zabbix API官方文档后加上的,加上才能正确连接。zabbix API官方文档链接给大家附上:https://www.zabbix.com/documentation/5.0/zh/manual/ap(这个文档很重要,大家可以仔细阅读,后续,函数参数的选择等,也会用到这个文档)

2.5AbstractZabbixService 抽象类

接下来:AbstractZabbixService这个抽象类,其中包含了使用Zabbix API进行请求的方法和处理错误的方法。代码如下:

public abstract class AbstractZabbixService {


    protected JSONObject zabbixRequest(ZabbixApi zabbixApi,Request request) throws Exception {
        JSONObject response = zabbixApi.call(request); // 使用ZabbixApi对象调用call方法发起请求,并将响应存储在JSONObject对象中
        return response; // 返回响应结果
    }

    protected void zabbixError(JSONObject response) throws Exception {
        if (!isBlank(response.getString("error")))
            throw new Exception("向Zabbix请求出错了!" + JSON.parseObject(response.getString("error")).getString("data"));
    }

}

该抽象类封装了与Zabbix API的交互逻辑。zabbixRequest方法用于发送Zabbix API请求并返回响应结果。它接受一个ZabbixApi对象和一个Request对象作为参数,通过调用ZabbixApi对象的call方法发送请求,并将响应结果存储在JSONObject对象中,最后返回该对象。

zabbixError方法用于处理Zabbix API的错误响应。它接受一个JSONObject对象作为参数,通过判断响应中是否存在"error"字段且不为空,如果存在错误,则抛出一个Exception异常,错误信息为 “向Zabbix请求出错了!” 加上从错误响应中解析出的"data"字段的值。

2.6 ZabbixService

接下来,就是我们的重中之重了(我们先跳过InsertDataService),这个Service层包含了我们对zabbix所要做的所有操作,代码如下:

@Service
public class ZabbixService  extends AbstractZabbixService{

    @Autowired
    private ZabbixUtil zabbixUtil;

    //获取主机列表
    public String getHostList() throws Exception {
        ZabbixApi zabbixApi = zabbixUtil.getZabbixApi();
        Request request = RequestBuilder.newBuilder().method("host.get")
                .paramEntry("output", new String[]{"host", "name", "description", "hostid"})
                .paramEntry("selectGroups", "extend")
                .build();
        JSONObject response = zabbixRequest(zabbixApi,request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }

    //获取监控项
    public String getMonitorItems(String hostId) throws Exception {
        ZabbixApi zabbixApi = zabbixUtil.getZabbixApi();
        Request request = RequestBuilder.newBuilder().method("item.get")
                .paramEntry("output", new String[]{"extend", "name"})
                .paramEntry("hostids", hostId)
                .build();
        JSONObject response = zabbixRequest(zabbixApi, request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");

        List<String> desiredItems = Arrays.asList("Interface eth0(): Bits received");

        JSONArray filteredResult = new JSONArray();
        for (int i = 0; i < result.size(); i++) {
            JSONObject item = result.getJSONObject(i);
            String name = item.getString("name");
            if (desiredItems.contains(name)) {
                filteredResult.add(item);
            }
        }

        return filteredResult.toJSONString();
    }

    //获取监控项历史数据,paramEntry根据zabbixAPI设置,limit==481设定获取从timeform开始的为时一天的历史数据
    public String getHistory(String itemId, long timeform) throws Exception {
        ZabbixApi zabbixApi = zabbixUtil.getZabbixApi();
        Request request = RequestBuilder.newBuilder().method("history.get")
                .paramEntry("output", "extend")
                .paramEntry("itemids", itemId)
                .paramEntry("time_from", timeform)
//                .paramEntry("time_till", 1675424400)
                .paramEntry("sortfield","clock")
                .paramEntry("sortorder","ASC")
                .paramEntry("limit",481)
                .build();
        JSONObject response = zabbixRequest(zabbixApi, request);
        zabbixError(response);


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/f77e8816395ec40ce4a1cf0c4de7c7cc.png)
![img](https://img-blog.csdnimg.cn/img_convert/ecd7607e0760d74c8caf11e5e4bf3736.png)
![img](https://img-blog.csdnimg.cn/img_convert/41a37284a11f578dc44b5dfeb727d482.png)
![img](https://img-blog.csdnimg.cn/img_convert/a55046a0342e7ea260e7690709b3b344.png)
![img](https://img-blog.csdnimg.cn/img_convert/6e0270cbef69a35b2c976133f2f43dbb.png)
![img](https://img-blog.csdnimg.cn/img_convert/696e1cebd9cdf54cc6e3ebfbbcdc7215.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)**
![img](https://img-blog.csdnimg.cn/img_convert/ffb68dbed82a188756a3ccf4cb032f5b.png)

年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)**
[外链图片转存中...(img-nruXBJK2-1712870532718)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值