3. 为什么选择Zabbix

  1. 为什么选择 Zabbix ?

    • Zabbix 是一款真正的 企业级工业级 监控采集平台,具备了22年开发积累,得到了全世界的行业认可。

    • Zabbix 架构设计精良,C 语言开发的 Server 和 Proxy 具备了极致的性能 和 工业级的稳定性。

    • 物联网基础平台 的本质就是 数据多协议多设备采集 + 数据分析 + 数据存储 + 数据基础展现,这都和 Zabbix + Gafrana 高度匹配。

    • Zabbix 对多种格式的数据处理非常强大,有数据预处理,依赖项计算项 等多种处理逻辑。

    • Zabbix 告警分析功能非常强大,可以跨设备,多条件组合告警,且告警计算函数多达90+个

    • Zabbix 完全开源,遵循 GPL 2.0 协议,我们不修改一行 Zabbix 代码。Zabbix UI 有着极其完善的 API 接口,基于API,就可以完美驱动Zabbix。

    • 我们有一只精通 Zabbix 开发的团队,从产品、开发、测试、运维 等都对 Zabbix 有着非常深刻的理解。在 Zeus-IoT 之前我们已经开发过一款成熟的 机房运维监控平台,得到了市场认可。

      数据预处理:在一段字符串数据进入Zabbix后,可以进行转换,截取等,比如 十六进制转十进制、截取前面5位等多达 十几种函数,也可以通过JS脚本直接处理,这些都可以通过 页面UI 进行配置。

      依赖项:举例说明,比如 A属性 数据为:{a:3,b:4}, 那么可以创建一个 依赖项属性B,依赖A属性,然后直接创建B的预处理 jsonpath 比如:$.a 就可以获取值:3。

      计算项:举例说明,比如 A属性为 当前容量,B属性为 总容量,可以直接配置出 C属性为: A/B ,得出 当前容量的百分比。

  2. Zeus-IoT 相比较于其他品牌的物联网基础平台有什么优势或者特点?

    • Zeus-IoT 基于 Zabbix 开发 和 扩展,天生继承了 Zabbix 的特性,有着极强的稳定性 且 天生具备 分布式 采集功能,而不是 Nginx 来实现负载均衡。

    • 基于 Zabbix 的分布式采集,结合 Zabbix Proxy 多点部署,可以实现 跨城市跨地区跨网络 的多点采集,即便是弱网环境,依旧可以实现数据稳定上报。

    • Zabbix 支持平台主动采集的方式去采集设备信息,且性能非常优异。曾经的案例:单机8C16G,跑 4000 多台设备,80万+ 指标,且一直持续稳定运行。

    • 架构简洁性: Zabbix 相对于 Zeus-IoT 来说,可以认为是一个黑盒设计,对于二开用户来说,完全不需要了解 Zabbix 本身,但是项目却具备了 Zabbix 的性能与稳定性。 而且我们的平台 Java 代码量才 4W 行左右,相对于其他物联网平台动辄 几十万行的 Java 代码,Zeus IoT 不管在 代码可读性 还是 架构简洁性 上都有巨大的优势,方便客户理解和二开。

    • 多租户设计: Zeus-IoT 的多租户设计采用 Proxy 隔离的机制,就是一个租户对应 一个或者多个Proxy,Proxy租户独享。把 租户和Proxy强制绑定,有利于平台的管理和租户数据采集的稳定性, 最大的一点就是不会端口冲突,因为 Proxy 可以部署在客户侧;其次协议层也是和 Proxy 绑定部署,所以不同的租户可以基于 IoT Server 开发不同的适配协议,自己部署就可以了,不需要平台层去做任何操作。

      平台主动采集:基于 Apache Camel 封装了 Zabbix Camel Client,一行代码就可以启动 Zabbix Java Agent:

   @Override
    public void configure() throws Exception {
        fromF("zabbix-agent:tcp://0.0.0.0:%d", zbxAgentReceiverConfig.getPort()).choice()
                .when(new ModbusMatch())
                .process(new ModbusProcess());
    }

ModbusMatch 就是判断逻辑,判断 当前属性key 是否满足要求,如果满足要求就走 process 逻辑。
设备属性 Key 的定义逻辑分两种:
第一种是单纯 key,比如设备温度: dev.temp ,一般这类 属性 为设备上报属性。
第二种可以带参数,但是这种 Key 一般都是配合 Agent 带参(一个或者多个)主动采集,比如 modbus 实时采集,需要传 指令码, 可以把指令码定义在 Key 里面。假设有三个参数,ip、port、code,那么key为: dev.temp[192.168.1.1, 7777, 03 03 00 00 00 02 C5 E9]
而且 key 里面的变量还可以通过宏传入,就是 产品、设备的变量,比如:dev.temp[{$ip}]
配合 Zabbix Camel Client ,就可以获取这些参数,然后执行取数动作,上报数据。(具体参考协议开发指南)

  1. 如果我想学习Zabbix,怎么学习?

    • 可以加群参与讨论和提问,群号:736541577