一、监控系统介绍

 1.1 为什么要监控?

 1.2 监控什么?

 1.3 监控方式/功能

 1.4 监控通道/数据采集通道

 1.5 监控工具介绍

 1.6 监控系统使用的数据库类型

二、Zabbix的架构

 2.1 Zabbix的宏观架构

 2.2 Zabbix的逻辑架构

三、Zabbix程序的构成

四、Zabbix特性



一、监控系统介绍


1.1 为什么要监控?

在生产环境中,不允许未经监控的硬件、软件、服务进程等上线。


1.2 监控什么?

硬件、软件、业务指标。


1.3 监控方式/功能

①采样:对监控的某一个指标进行周期性地获取数据。

②告警:对采集到的数据进行分析,一旦数据超出合理范围,则进行警告。

③存储:对采集到的数据进行存储。

④展示:将存储在数据库中的数据通过一个应用程序(通常基于web的PHP程序等)直观地展示出来。


1.4 监控通道/数据采集通道

监控系统通常称为NMS(Network Management System,网络管理系统),监控系统通过监控通道可以向被监控系统采集数据,而监控通道有以下几种。

①ssh/telnet:监控系统和被监控系统之间基于ssh/telnet协议进行连接,以获取采集数据。

②snmp:simple network management protocol,简单网络管理协议。几乎所有操作系统都内置有snmp的agent端。如果被监控系统的snmp的agent进程启动,并且在监控系统上已安装snmp的服务端,则监控系统可以基于snmp协议向被监控系统发起请求。snmp只支持数据采集(不能做到周期性采集),而不支持数据存储功能。snmp版本如下。

v1
无认证功能,通信过程无加密。
v2c'c'指的是'community',即加入了身份认证机制(只要是同一社区的系统就可以进行数据采集)
v3
引入了安全认证、通信过程传输加密机制。

③agent:是zabbix功能最强大的监控方式,但不是所有的系统都支持安装agent,例如交换机和路由器。

④IPMI:Intelligent Platform Management Interface,智能平台管理接口,做到了在硬件级别上对被监控系统进行监控,需要有硬件支持。


总体来说,采集数据的协议(通道)可以分为两种:专用客户端采集(适用于各监控工具的agent)和公用协议采集(snmp、ssh、telnet等)。


1.5 监控工具介绍

①Cacti:前面提到snmp只支持对数据进行采集(不能做到周期性采集),而不支持存储功能。Cacti则提供一个简单的配置接口,利用snmp进行周期性地采集数据(借助于周期性计划任务),并将采集到的数据存储于RRD(Round Robin Database,轮询数据库)上。Cacti能够实现采集、存储、展示功能,但告警功能很薄弱,可结合告警功能强大的Nagios使用。

②Nagios:告警功能很强大,但无法存储、展示数据,可结合Cacti使用。

③Zabbix:是一款集合采集、存储、展示、告警功能的监控工具,并且还支持告警升级机制。

④Ganglia:有很强大的数据聚合功能,能够将多个主机的数据整合并一起展示,适用于集群系统。


1.6 监控系统使用的数据库类型

对于监控系统来讲,其存储的数据为时间序列数据(随时间流逝而产生的数据),对每个监控指标采集到的数据对应于一个时间序列上的数据。这种时间序列数据可存储在多种数据库中,如下。

①关系型数据库(SQL,如MySQL, PGSQL, Oracle, SQLite, DB2等)

②轮询数据库(RRD)

③时间序列数据库(非关系数据库的一种,专用于存储时间序列数据)

④其它非关系数据库(NoSQL)



二、Zabbix的架构


Zabbix的版本大致可分为:1.0、1.1、1.4、1.6、1.8、2.0、2.2、3.0、3.2、3.4这几大发行版,其中2.2和3.0为LTS(Long Term Support,长期支持维护版)。

wKioL1mwtBbw8Km8AAEyd2oirQM721.jpg

上图来自《Zabbix企业级分布式监控系统》。


2.1 Zabbix的宏观架构

Zabbix的通用架构为Client/Server架构,分布式架构为Client/Proxy/Server(简称C/P/S,表示客户端/代理端/服务器端)或Client/Node/Server架构,如下图(第一张宏观架构图来自《Zabbix企业级分布式监控系统》)。

wKioL1mwttuAOLPDAAKhiCD2UFE444.jpg

其中,zabbix_server进程启动时读取的配置文件是zabbix_server.conf,该进程运行过程中产生的日志信息记录在zabbix_server.log文件中。Zabbix-Server将采集到的数据持久地存储到数据库中,并用前端UI接口直观友好地将数据展示给用户,同时该前端UI接口还可供用户进行配置管理zabbix。


同理,zabbix_agentd进程启动时读取的配置文件是zabbix_agentd.conf,该进程运行过程中产生的日志信息记录在zabbix_agentd.log文件中。zabbix_proxy进程启动时读取的配置文件是zabbix_proxy.conf,该进程运行过程中产生的日志信息记录在zabbix_proxy.log中。


数据采集的工作模式可以分为被动模式(服务器端到客户端采集数据)和主动模式(客户端主动上报数据到服务器端)。通常大多数监控系统都能同时支持两种模式。其中,被动模式对服务器的开销较大,适合小规模的监控环境,而主动模式对服务器的开销较小,适合大规模的监控环境。


在主动模式下,可由zabbix_agentd进程通过zabbix_sender工具将采集数据主动推送给代理端(zabbix_proxy)或服务器端(zabbix_server);在被动模式下,可由代理端(zabbix_proxy)或服务器端(zabbix_server)通过zabbix_get工具向zabbix_agentd发起数据采集请求。


Zabbix的另一张分布式监控的宏观架构图如下(手绘)。

wKioL1mxChTxoohZAAKuX500Lbk704.jpg

对于不同的数据采集方式(如IPMI、SNMP、SSH、Telnet、Agent等)而言,Zabbix服务器端或代理端会分别启用不同种类的数据采集子进程来采集数据。一般各种采集方式都支持主动模式和被动模式,但使用JMX监控通道进行采集时,只支持单向采集数据(为被动模式)。


2.2 Zabbix的逻辑架构

以下为Zabbix的逻辑架构图(图片来自互联网)。

wKioL1mwz0fgozvLAABaZyDluHI119.gif

接下来对该图进行解释。

该逻辑架构图只展示了Zabbix工作在被动模式下的工作原理。首先,Zabbix Poller代表服务器端,它可以通过各种监控通道对被监控系统进行监控(如Internal(內建机制)、SNMP、Zabbix Agent等),需要监控时得先添加监控主机。其次,需要为添加的监控主机配置Item(监控项),Item是整个逻辑架构图的核心。接着,Zabbix Poller根据配置的Item对监控主机发起数据采集请求,而监控主机收到请求后,先在其本地采集数据,接着将采集到的数据发送给服务器端(即返回给Item)。然后,Item将会把采集到的数据存储到数据库中,但在存储之前会先将数据交给Triggers(触发器)分析,一旦采集到的数据超出合理范围,则触发一个Events(事件),而Events可以被Actions订阅,再做出动作处理:执行远程脚本(script)或告警(notification)。


当然,Event和Event之间可以具有依赖关系,例如当Event1被Event2依赖时,则当发生Event1时,Event2必定会发生,但此时只有Event1被Action订阅,而Event2不会被Action订阅。这样的好处是显而易见的,例如当被监控的网关路由设备出现故障时,Zabbix服务器端很有可能会发现网关出现故障,并且需要经由该网关转发报文的多个服务器主机也必定被认为出现故障(网关坏了,自然连不进网关背后的主机),此时应该只告警网关设备出现故障,而不是告警网关背后的主机出现故障。另外,当进行程序版本变更时,需要将部分服务器主机下线,此时监控到数据不正常时也无需告警,这是Maintenance的功能。


为了快速部署Host(主机)、Item(监控项)、Trigger(触发器)、图形展示方式(Graphs、Map、Screen、Slide Show)等,可以使用Template(模板)。可以将多个Host组成一个或多个HostGroups(主机组),然后对各个HostGroup中的每个Host链接至指定的Template,而在Template中已有定义好的Item、Trigger、图形展示方式等,从而实现快速部署监控系统的功能。



三、Zabbix程序的构成


①zabbix_server:服务器守护进程。

②zabbix_agentd:agent端守护进程。

③zabbix_proxy:代理服务器,可选组件。

④zabbix_get:命令行工具,手动测试向agent端发起数据采集请求。

⑤zabbix_sender:命令行工具,运行于agent端,手动向server端发送数据。

⑥zabbix_java_gateway:java网关,用于监控运行在jvm上的相关程序。



四、Zabbix特性


(1)数据采集

  • 支持SNMP、SSH、Telnet、Agent、IPMI、JMX等管理接口。

  • 自定义检测机制(通过UserParameter实现)。

  • 自定义指定时间间隔。


(2)实时绘图功能

  • 支持的绘图方式有:graph、map、screen、slide show(幻灯片)。

  • 监控项将数据实时绘制展示在图形上。


(3)高度可定制的告警

  • notification:可以发送通知(notificaiton),可定制包括告警级别、动作升级、收件人和媒体类型。

  • script:自动处理功能包括远程命令的自动调用和执行(script)。


(4)数据存储

  • 数据存储在数据库中(如mysql、pgsql等)。

  • 数据的存储周期可自定义设置。

  • 可以定期清除过期的数据(housekeeper)。


(5)使用模板

  • 模板可以分组,具有可继承性,基于模板可实现快速监控配置。


(6)网络自动发现

  • 支持自动发现网络设备和服务器(可通过自动配置自动发现服务规则实现)。

  • 支持Agent自动注册。

  • 支持自动发现(Low level discover)实现动态监控项的批量监控(支持自定义)。


(7)分布式监控的支持

  • 通过Zabbix-Proxy来实现:server <--> proxy <--> Agent/SSH/Telnet/IPMI等,因此支持大型监控环境。


(8)API功能

  • 应用API可以方便地和其他系统结合,包括手机客户端的使用。