## 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: ```java @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 ,就可以获取这些参数,然后执行取数动作,上报数据。(具体参考协议开发指南) 3. **如果我想学习Zabbix,怎么学习?** - 可以加群参与讨论和提问,群号:`736541577`