Zabbix监控系统开发(2):JSON多维数组筛选字段是否包含字符串的解决方案

Zabbix监控系统设备出现故障,即提示停机和告警信息时,是在triggers字段的中完成的。而triggers字段是一个数组对象,triggers[0]代表停机,triggers[1]代表告警。

  1. triggers[0].value为0正常,为1停机;
  2. triggers[1].value0正常,为1告警;

triggers数据结构

[
    {
        "triggerid": "23025",
        "expression": "{34226}=0",
        "description": "百度 Ping 不可达 / 安防设备",
        "url": "",
        "status": "0",
        "value": "0",
        "priority": "4",
        "lastchange": "1660602885",
        "comments": "",
        "error": "",
        "templateid": "0",
        "type": "0",
        "state": "0",
        "flags": "4",
        "recovery_mode": "0",
        "recovery_expression": "",
        "correlation_mode": "0",
        "correlation_tag": "",
        "manual_close": "0",
        "opdata": "",
        "event_name": "",
        "uuid": ""
    },
    {
        "triggerid": "23029",
        "expression": "{34230}>1",
        "description": "百度 Ping 延迟大于 1000 毫秒 / 安防设备",
        "url": "",
        "status": "0",
        "value": "0",
        "priority": "2",
        "lastchange": "1660360605",
        "comments": "",
        "error": "",
        "templateid": "0",
        "type": "0",
        "state": "0",
        "flags": "4",
        "recovery_mode": "0",
        "recovery_expression": "",
        "correlation_mode": "0",
        "correlation_tag": "",
        "manual_close": "0",
        "opdata": "",
        "event_name": "",
        "uuid": ""
    }
]

项目需求

在数据传递到大屏时,如果出现停机或告警信息时,状态灯由绿变红。
在这里插入图片描述

项目分析

  • 每个设备都对应一组数据,每组数据都有对应的状态展示,即triggers[0]和triggers[1];
  • 当API接口传递N个设备时,意味着数据对应N个triggers[0]和triggers[1];
  • 在N个triggers[0]和triggers[1]数据中,有一个出现1,则表明故障,将状态灯调整即可。

解决思路

将上面的项目分析,转化为技术底层逻辑。
传过来的json数据,单独过滤出triggers,将过滤出的triggers重新组合成一个新的数组。只要判断在新的数组中,包含“1”即表明当前设备中存在故障设备,调整状态灯即可。

核心代码

获取API数据

 $.when(
        $.getJSON('api/api.php?act=getZabAlert&token=3cab7ce4142608c0f40c785b5ab5ca24', {keys: '安防设备'})
    ).done(function (res1) {
    //数据处理区
 });

数据处理区

   /*状态灯判断*/
        var lightStatus = [];
        for (var j = 0; j < res1.length; j++) {
        lightStatus.push([res1[j].triggers[0].value, res1[j].triggers[1].value]);
        }

        if (lightStatus.toString().indexOf("1") > -1) {
            // 状态灯处理
        }

将lightStatus数组通过.toString()方法转为字符串,然后使用indexOf方法判断是否包含"1"这个字符传。如果包含,则调用状态灯。

状态灯处理

 $("#wStatus").removeClass().addClass("alert1");

状态灯CSS

/*告警状态*/
.alert1 {
    display: inline-block;
    width: 10px;
    height: 10px;
    line-height: 10px;
    border-radius: 50%;
    background: #e60000; /*FF0087*/
    margin: auto 5px;
}

.alert2 {
    display: inline-block;
    width: 10px;
    height: 10px;
    line-height: 10px;
    border-radius: 50%;
    background: #40f453;
    margin: auto 5px;
}

.alert3 {
    display: inline-block;
    width: 10px;
    height: 10px;
    line-height: 10px;
    border-radius: 50%;
    background: #FFBF00;
    margin: auto 5px;
}

话题延伸

如何单独判断当前设备是停机还是告警状态?

    var light1 = [], light2 = [];
    for (var j = 0; j < res1.length; j++) {
        light1.push([res1[j].triggers[0].value]);
        light2.push([res1[j].triggers[1].value]);
    }

    if (light1.toString().indexOf("1") > -1 && light2.toString().indexOf("1") > -1) {
        // 停机&告警
    }

    if (light1.toString().indexOf("1") > -1) {
        // 停机
    }

    if (light2.toString().indexOf("1") > -1) {
        // 告警
    }

@lockdata.cn

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Zabbix监控系统是通过在系统中部署一系列程序来实现的。其中包括常见的五个程序:zabbix_server、zabbix_agent、zabbix_proxy、zabbix_get和zabbix_sender。\[1\]Zabbix server是主要的监控服务器,负责接收来自zabbix_agent的数据,并将其存储到数据库中。用户可以通过Zabbix WEB界面查看监控数据的图像展示。\[2\]Zabbix agent安装在被监控的主机上,定期收集客户端本地的各项数据,并将其发送至Zabbix server。当被监控的指标超过设定的阈值时,Zabbix会触发相应的动作,如发送信息(邮件、微信、短信)或执行命令(shell命令、重启等)。\[2\]此外,还可以通过创建自定义的监控项配置文件来添加自定义的监控项。可以将这些配置文件创建在zabbix_agent2.d目录中,并在zabbix_agent2.conf中进行引用。\[3\]自定义监控项的格式为UserParameter=<key>,<shell command>,可以通过这种方式添加自定义的监控项。\[3\] #### 引用[.reference_title] - *1* [Zabbix监控系统详解及配置](https://blog.csdn.net/weixin_58544496/article/details/127866357)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [zabbix监控系统](https://blog.csdn.net/weixin_57837701/article/details/120547176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漏刻有时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值