Zabbix 架构一览

../_images/zabbix_arch.jpg
  1. Zabbix 是一套非常强大的 100% Enterprise-ready 老牌 开源 机房运维监控产品, 有着的极高的 稳定性 和超高的 性能

  2. 借用 Zabbix 官网的描述:Monitor anything, Zabbix 公司成立于1999年,迄今为止有着22年的技术积累。 在全世界都有着非常广泛的使用案例。

  • 架构说明

注解

  • 关于 Zabbix 所有的细节,本章节只是做了初步的概念介绍,具体的业务细节非常复杂,对于使用和开发 Zeus-IoT 的同学,只需要有一些概念理解就可以,不需要对 Zabbix 有深入的了解。

  • Zeus-IoT 业务已经完全屏蔽掉了 Zabbix 的配置细节,只需要熟悉 Zeus-IoT 的配置即可。

  • Zeus-IoT 以 Zabbix 为核心开发,各位同学学习掌握后,了解的不仅仅只是物联网的场景,针对各种运维监控,复杂设备、环境的取数分析都会有所掌握。

1. Zabbix Web UI

../_images/zabbix_ui.png

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 官方文档给出的描述:

../_images/zabbix_proxy.jpg

更加详细的文档,请访问 Zabbix 官方文档