第2章 Zabbix基础架构
前面已经解释了Zabbix是什么,包括Zabbix的组件、Zabbix可以实现的功能,以及一些Zabbix常识性的东西。接下来剖析一下Zabbix系统最核心的内容,即Zabbix的基础架构,如图2-1所示。
图2-1
经过这么多年的发展,Zabbix已经有了一套非常成熟的架构体系。
在Zabbix的使用过程当中,我们通常会根据实际环境的网络、监控规模、监控项数量等构建不同的架构,从架构图(见图2-1)当中可以看到,Zabbix主要提供的架构分为两种模式。
(1)直连(Server-Client)模式。
(2)分布式(Server-Proxy-Client)模式。
从整个架构图中不难看出,Zabbix整套架构采用模块化机制,符合Linux系统的设计原则,是整个Zabbix架构运行的基础。中间为Zabbix的主体部分,包括Zabbix frontend(前端)、Zabbix server(主服务程序)、Backend Databaes(后端数据库);外围4部分围绕着整个主体进行工作,包括Zabbix agent(Zabbix采集客户端)、Zabbix proxy(代理采集)、Agent Less(无客户端采集),Visualization(可视化),Notification(告警通知),Zabbix API(Zabbix接口)。
2.1 可拆分的主体架构
如图2-2所示,整个Zabbix主体部分是一个可拆分的模式,Zabbix frontend、Zabbix server、后端数据库可以部署在同一台物理服务器上,也可以分别部署在3台物理服务器上。一般最常见的拆分部署模式是Zabbix frontend和Zabbix server部署在同一台物理服务器上,后端数据库单独部署在一台物理服务器上,这样可以根据监控规模和各模块使用的性能负载情况规划部署主体部分。
图2-2
2.2 直连模式架构
直连模式架构是Zabbix最简单的架构模式,如图2-3所示,被监控的主机与Zabbix不经过任何Zabbix proxy,直接在Zabbix server与Zabbix agent之间进行数据交互,适用于网络环境比较简单、设备量比较少的监控场景。
图2-3
2.3 分布式架构
Zabbix原生提供了一种分布式解决方案:Zabbix server ←→Zabbix proxy(多个)←→Zabbix agent(或其他被监控设备)。
Zabbix proxy可替代Zabbix server收集性能和可用性数据,然后把数据传送给Zabbix server,并在一定程度上分担了Zabbix server的压力。
分布式架构是目前最简单、最有效的提升Zabbix整体性能的架构。
Zabbix proxy的用途如下。
(1)监控远程区域(不同机房)的设备。
Zabbix proxy适用的场景:公司有多个机房,其中的设备都处于不同的IP地址段,此时,在其中一个机房部署了一套Zabbix系统来监控所有机房的设备,这将涉及网络策略配置问题,如果A机房的Zabbix要监控B机房的设备,则需要逐个开通网络策略以保证双方通信正常,这将相当烦琐。
此时,Zabbix proxy就起到了非常大的作用,只需在各个机房都部署一个Zabbix proxy并与Zabbix server相连,由Zabbix proxy替代Zabbix server收集监控数据,同时只需开通Zabbix proxy与Zabbix server之间的网络策略即可实现需求。
(2)监控本地网络不稳定的区域。
场景同上,若B机房的网络不稳定,但因Zabbix server与Zabbix proxy不在同一机房,所以哪怕是B机房的网络瘫痪,也不会影响整个Zabbix系统的监控功能,Zabbix依然可以正常监控其他区域的设备。
(3)当Zabbix压力较大时,使用Zabbix proxy来减轻Zabbix server的压力。
前面提到,Zabbix proxy可替代Zabbix server收集性能和可用性数据,Zabbix proxy中含有大部分与Zabbix server相同的组件。
Pollers:用于被动模式监控项抓取数据。
Trappers:用于捕获主动模式监控项上报的数据。
PollersUnreachable:用于处理不支持的监控项。
Pingers:用于为主机提供ping监控。
Discoverers:用于自动发现的组件。
另外,还有很多组件,这里就不一一列举了。
对于Zabbix server和Zabbix proxy的配置文件,大部分组件的配置都是相同的,Zabbix server中用于主动(对于设备)收集数据、被动(对于设备)监控的组件,Zabbix proxy中都会有,因此,Zabbix proxy可以替代Zabbix server完成监控并收集数据的工作。
正因为Zabbix proxy可替代Zabbix server完成大部分的监控工作,所以可以极大地减轻Zabbix server的压力。
(4)降低分布式架构的运维成本。
相较于Zabbix server,Zabbix proxy的安装相对简单,无须配置Web组件,也不用配置告警等,因此降低了很多看不见的运维成本。
2.3.1 分布式组件
若要搭建分布式的Zabbix监控系统,需要以下组件。
(1)Apache/Nginx及PHP(用于前端显示)。
(2)Zabbix server.
(3)Zabbix proxy.
(4)MySQL/MariaDB(推荐使用)。
搭建完成后,选择“Administration”→“Proxies”→“Create proxy”选项,为Zabbix server连接Zabbix proxy,如图2-4和图2-5所示。
图2-4
图2-5
此处需要注意的是,“Proxy name”必须和Zabbix proxy配置文件中的“Hostname”保持一致。
在创建好Zabbix proxy后,等待几分钟就可以验证Zabbix server与Zabbix proxy是否成功建立了连接,方法如下。
选择“Administration”→“Proxies”选项,如果如图2-6所示。
图2-6
这里有一个较为敏感的数据,就是“Last seen(age)”,即Zabbix proxy与Zabbix server最后通信的时间,一般数值为0~10s,将自动刷新。若一直显示“Never”,则说明此Zabbix proxy未连接到Zabbix server。
以上就是Zabbix分布式架构中最重要的Zabbix proxy组件与Zabbix server的连接。
2.3.2 分布式架构图
Zabbix分布式监控系统的简要架构如图2-7所示。
图2-7