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

    </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项目整体结构


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


![](https://img-blog.csdnimg.cn/direct/f1797fb652ea456c99fc1b7b9e428d29.png)



        其中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();
}

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

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

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

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

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

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

a5032a9919b755.jpeg)

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-wwrLzGux-1713031974674)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值