*************** Zabbix 架构一览 *************** .. image:: /_static/images/zabbix_arch.jpg :width: 800px 1. `Zabbix `_ 是一套非常强大的 **100% Enterprise-ready** 老牌 `开源 `_ 机房运维监控产品, 有着的极高的 ``稳定性`` 和超高的 ``性能``。 2. 借用 Zabbix 官网的描述:``Monitor anything``, Zabbix 公司成立于1999年,迄今为止有着22年的技术积累。 在全世界都有着非常广泛的使用案例。 - **架构说明** .. note:: - 关于 Zabbix 所有的细节,本章节只是做了初步的概念介绍,具体的业务细节非常复杂,对于使用和开发 Zeus-IoT 的同学,只需要有一些概念理解就可以,不需要对 Zabbix 有深入的了解。 - Zeus-IoT 业务已经完全屏蔽掉了 Zabbix 的配置细节,只需要熟悉 Zeus-IoT 的配置即可。 - Zeus-IoT 以 Zabbix 为核心开发,各位同学学习掌握后,了解的不仅仅只是物联网的场景,针对各种运维监控,复杂设备、环境的取数分析都会有所掌握。 **1. Zabbix Web UI** .. image:: /_static/images/zabbix_ui.png :width: 600 Zabbix UI 采用PHP开发,实现了 Web 控制台 和 API 接口 功能。 ``Zabbix UI 虽然采用 PHP 开发,但是和我们实际开发 Zeus IoT 没有任何技术关联,平台层也只是调用了 PHP 开发的接口`` 简单说明下几个重要的 Zabbix 核心概念: - `主机 ( HOST )` : 就是具体的一个监控对象,某一个被监控的实例,可以是一个数据库,也可以是一个操作系统。 - `模板 ( Template )`:定义了具体一类监控对象的抽象,比如 Windows 模板,就是用来专门在监控Windows的时候,直接选择这个模板就可以实现开箱即用的数据采集。 - `监控项 ( ITEM )`:监控项定义了具体的某一项采集指标,比如 CPU使用率,设备温度等,采集方式可以是多种支持的采集协议。 - `触发器 ( Trigger )`:触发器是基于监控项存在的,通过WEB页面定义触发器表达式创建。比如 CPU温度大于90度,可以定义为:`last(/zabbix_server/cpu_temp) > 90` - `动作 ( Action )`:动作是基于触发器存在的,创建动作时可以选择具体的某个触发器,当触发器表达式满足要求时,会触发对应的Action执行,具体的动作定义可以执行 JavaScript,Shell脚本 等。 **2. Zabbix Server** ``Zabbix Server 是 C 语言开发的 Zabbix 服务端,有着 强悍的采集和计算性能,而且资源使用率很低。主要的功能如下:`` - 定时读取 Zabbix 数据库,同步 Zabbix UI 配置的信息到缓存,下发到 Zabbix Agent 或者 Zabbix Proxy。 - 对于被动采集(`主动和被动是从设备侧角度来看的`), Zabbix Server 会有专门的 Poller 线程去采集数据,可以定义特定的时间区间或者特定的频率。 - 对于主动采集,就是Agent或者设备主动上报数据,Zabbix Server 也会有专门的 Trapper 线程来接收数据,时间间隔或者频率取决于设备侧或者Agent上报配置。 - 接收到的历史数据(来自于 Agent、Proxy、设备侧),Zabbix Server 会缓存下来,进行告警表达式计算,进行动作触发,最终会同步到数据库的历史记录表,history开头的表。 **3. Zabbix Proxy** Zabbix Proxy 其实就是一个简化版的Zabbix Server,具备除了 Zabbix Server 有的告警相关的功能,其他的都是 Proxy 具备的, Zabbix Proxy 会定时把采集到的数据上报到 Zabbix Server,Zabbix Server 具备全量的数据,才可以做告警计算,复杂的告警计算可以跨设备。 - 针对大型监控采集环境,可以 ``通过 Proxy 来实现分布式采集`` ,可以非常有效的减轻 Zabbix Server 的采集压力。 - 针对 ``弱网环境`` ,就是网络质量不高的现场环境,Proxy 可以在本地采集,缓存本地,不断重试给Server发送数据,直到发送成功为止,可以大大降低现场的采集失败率。 - Zabbix Proxy 需要依赖数据库,搭配 SQLite 结合 Jdk aarch64 版本发布 IoT Server 就可以使用 Arm 64 工控机部署在边缘端。 Zabbix 官方文档给出的描述: .. image:: /_static/images/zabbix_proxy.jpg 更加详细的文档,请访问 `Zabbix 官方文档 `_ 。