深入理解Zabbix监控系统读后感

简介: 本书深入剖析Zabbix监控系统源码及功能,助力理解核心原理,提供二次开发参考。

第1章

Zabbix总体架构及演变

Zabbix是在全球被广泛应用的一种开源监控系统,是一种设计严谨的、基于多进程的分布式系统。Zabbix由多种组件构成,包括Zabbix服务器、Zabbix代理、Zabbix java gateway和Zabbix客户端。本章主要介绍Zabbix的总体架构。

1.1

监控系统概述

监控系统是一个非常宽泛的概念。根据监控对象和监控目标的不同,监控系统完成的任务千差万别。不过,归根到底,监控系统是一个数据采集和处理系统,它为了采集和处理各种监控数据而存在。Zabbix就是为了监控计算机及网络基础设施和软件而设计的。

当监控对象越来越多时,监控系统的规模会变得越来越庞大,因此监控系统要具备大规模扩展的能力。当监控的内容变得越来越细化时,监控系统需要能够以足够快的速度采集并处理数据。随着存储的监控数据越来越多,人们希望从监控数据中获得一些有用的信息,这就要求监控系统能够对监控数据进行深入的分析。

假如未来的某一天,全球所有汽车都实现了自动驾驶。当不需要人类驾驶员驾驶汽车时,人类就需要利用数据对汽车进行监管。虽然汽车自身可以在终端完成对大量数据的处理,但是每辆汽车在其行驶过程中仍然需要将一定量的数据传输到交通监管平台进行集中处理,这些数据可能用于监管车辆行驶状况、预测交通拥堵以及避免交通事故等。按照全球10亿辆汽车的保有量计算,即便存在1 000个监管平台,平均下来,每个平台仍然需要为逾100万辆汽车提供服务。行驶中的汽车可能会把每次急刹车、每次紧急并线、每次异常颠簸、每次抛锚和每次人类介入的数据都发送到监管平台。其中,有些数据是需要实时处理的,还有一些数据可能只需要持久化存储,另外一些数据可能需要经过简单处理以后再进行存储。这种场景对监控数据传输的可靠性、监控数据处理的实时性以及监控系统整体的可靠性都提出了很高的要求。

监控系统的意义在于,人们可以用数据更精确地描述事物的变化。在监控系统的帮助下,世界的模糊性得以降低,准确性大幅提升,人们可以减少根据感觉做出决策的不安感,而更多地依赖数据做出决策,人们甚至不需要做出决策,因为系统会代替人们做出决定。

1.2

Zabbix的总体架构

Zabbix包含多种组件,每种组件可以独立部署,组件内部采用多进程架构。这种结构设计使之非常便于实现分布式部署,也为架构调整打下了基础。Za-bbix各组件之间的典型部署架构往往采用分层扩展模式,即每个Zabbix服务器(server)连接多个Zabbix代理(proxy),每个Zabbix代理进一步连接大量客户端(agent)(包括Zabbix客户端、SNMP客户端、JMX客户端和IPMI客户端),具体如图1-1所示。

图1-1 Zabbix各组件的典型部署架构

监控系统本质上是一个数据采集和处理系统,如果采集的数据的规模相对稳定,不会频繁波动,那么采用多进程架构是合适的,因为监控系统在这种情况下不需要动态地扩容和缩容,也就避免了频繁的进程创建和销毁。如果采集的数据的规模存在很大的波动,希望能够对监控系统进行动态扩容和缩容,那么采用多进程架构显然不太合适,因为进程的创建和销毁是很重的操作,频繁操作会产生较大开销。

1.2.1 Zabbix服务器

Zabbix服务器是所有Zabbix组件中的核心,它负责最终接收监控数据并对数据进行计算,从而触发告警,并完成告警规则所触发的任务,包括发送通知和执行远程命令等,它还负责将监控数据写入数据库并进行持久化存储。

Zabbix服务器有多种进程,每种进程的数量可能是一个或者多个。Zabbix服务器的各个进程之间通过共享内存、Unix域套接字、信号、锁和信号量等机制进行协调和通信。代码清单1-1为某测试用Zabbix服务器的具体进程,每一个进程标题中的黑体部分为进程类型名,当同时存在多个同类型的进程时,进程类型名称后面会紧跟一个编号(例如timer #1)。在本例中,Zabbix共启动了21种进程。

版权:人民邮电出版社