1. 引言
云计算、大数据、物联网、移动应用等新技术迅猛发展,基于网络的基础设施以及系统应用方式出现多样化、复杂化倾向 [1] 。面对数量众多、跨区域分布的各类网络设备、服务器、存储、以及各种软件应用,传统的手动管理和被动式的故障响应,已经不能满足信息化对可靠性的要求 [2] 。
应对当前系统管理的实际需求,考虑到定制可控性、可持续性、成本投入等因素,基于开源系统Zabbix [3] ,通过二次开发与实施,设计研发网络系统统一管理云服务,成功应用于分布式网络系统管理中,解决了分布于多个园区、从设备到系统到服务等多个层次的监控需求,实现监测数据集中存储,为系统管理提供了统一、可视化的管理界面,让网络系统的运维服务工作更便捷、高效。
2. 云服务与Zabbix
2.1. 云服务
云是指可以通过互联网访问到的计算资源、存储资源、软件服务资源、网络资源等资源的总称。云计算是支撑云的关键技术,是在整合的架构之下,基于IP网络的虚拟化资源平台,提供规模化ICT应用的实现方式 [4] 。
云服务则是云计算的商业化过程 [5] ,是指采用云计算技术的大规模服务器集群(云端)为用户提供的不必下载、不必安装、上网即用、操作方便、功能丰富、价格低廉的互联网服务 [6] 。云服务分为基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS) [7] 。
2.2. Zabbix
Zabbix是为监控IT组件可用性和性能而设计的基于WEB界面、支持分布式监控的企业级开源运维管理系统 [8] 。Zabbix为大型网络环境监控提出解决方案,可以从网络中搜集几乎所有类型的数据,以实现实时监控数以万计的服务器、虚拟机以及网络设备 [9] 。
Zabbix运维管理系统具有以下优势 [10] :1) Zabbix提供丰富的开源代码,不受厂商限制;2) 安装配置非常简单,容易落地;3) 具有兼容UNIX和Windows平台的客户端代理,提供强大有效的监控包容性;4) 监测数据统一存储,可进行二次开发;5) 直观的可视化界面和丰富的内置流程,让运维管理更加方便、快捷。
3. Zabbix云服务架构
3.1. Zabbix云服务架构
Zabbix由多个组件构成,其云服务架构示意图如图1:
Zabbix Server [11] :Zabbix Server是核心组件,用来接收Agent上报的可靠性、完整性信息以及统计数据,并且存储所有的配置信息、统计信息和操作数据。
Database Storage:数据库用来存储所有的配置信息以及Zabbix搜集到的所有数据。数据库可以是独立服务器,也可以安装在Zabbix server服务器上。
Web interface:Web界面为用户提供了便利的接入和操控,可以使用任何平台、在任何位置访问Zabbix,Web界面是Zabbix Server的一部分,两者通常(但不必须)安装在同一台物理服务器上。
Proxy:代理可以协助Zabbix Server搜集性能和可靠性数据,是Zabbix的可选组件;在大型网络环境或有分支机构的网络环境中,代理可实现分布式监控并分担Zabbix Server的负载。
Agent:客户端代理部署在目标主机上,用于实时监控目标主机的资源和运行状态,并将搜集到的数据上报给Zabbix Server。
Data flow:数据流是Zabbix内置的机制,将设备监控流程模板化,帮助管理员实现自动关联监控项和事件报警,提高工作效率。
SaaS:Zabbix Server、Data Storage、Web Interface三个组件部署在云平台(通常为私有云)上,用户可以在任意地点、使用任意设备通过互联网访问Zabbix服务,也就是软件即服务(SaaS)。

Figure 1. Cloud Service architecture of Zabbix
图1. Zabbix云服务架构示意图
3.2. 关键技术研发与部署
3.2.1. 自动网络发现
由于基础网络设备数量较多,Zabbix提供有效和灵活的自动网络发现功能,通过此功能可以快速的实现网络设备监控、简化管理。目前,Zabbix网络发现功能暂不支持拓扑发现。
Zabbix网络发现功能是基于以下信息实现的:
· IP范围;
· 可用的外部服务(TP, SSH, WEB, POP3, IMAP, TCP等);
· Zabbix客户端代理;
· SNMP代理。
网络发现包含两部分:发现和触发动作。
1) 发现
Zabbix根据网络发现规则中定义的IP范围进行周期扫描,发现规则中定义了需要检查的服务。每个发现规则对应一个单独的发现进程,各发现进程互不影响,自动发现进程在每次检查的服务和主机后会形成一个发现事件,发现事件具体如表1 [11] :
2) 触发动作
发现事件是触发动作的基础,用户可以根据设备类型、IP地址、状态、离线/在线事件等配置相应的触发动作,Zabbix的触发动作主要有以下几种:
· 发送信息
· 添加/删除主机
· 激活/禁用主机
· 添加主机到组
· 从组中删除主机
· 关联/取消主机模板
· 执行远程脚本
3.2.2. 服务器和虚拟机监控
Zabbix通过Agent获取被监控服务器的数据,Agent监控分为主动和被动两种方式,可根据需要选择:
Zabbix agent:被动检查,不会主动向Zabbix Server提交数据;
Zabbix agent (Active):主动检查,自动向Zabbix Server提交监控数据。
Agent可以全方位监控服务器状态,比如:主机名、主机是否在线、网卡进出流量、TCP/UDP有关端口状态、CPU/内存使用状况、磁盘使用率、读写速度等,Zabbix可以自动使用这些数据绘制成图表。
Zabbix在2.2版本之后,可以自动发现并监控vCenter vSphere 4.1版本及以上的VMware主机及虚拟机,Zabbix可以自动搜索ESXi主机及主机上的虚拟机,并自动添加到Hosts中。
Zabbix通过两个步骤来实现虚拟机监控:首先,Zabbix的VMware搜集器进程(vmware.hv.discobery[{$URL}])采集虚拟机数据,这些进程是使用SOAP协议从VMware的web服务中取得需要的信息,预处理后存储在共享内存中。然后,这些数据被Zabbix结合VMware值再次轮询处理。
3.2.3. 数据库监控
数据库是数据中心数据存储的核心软件,其重要性不言而喻。通过ODBC技术及其驱动,Zabbix可以监控到所有关系型数据库的数据,比如:MySQL,PostgreSQL,Oracle和Microsoft SQL Server。搜集到的数据被Zabbix统一存储,方便用户制定图表、警告和通知信息。
除了使用ODBC之外,Zabbix还可以通过Agent搜集数据库数据。在使用Agent时,需要在被监控主机上添加监控脚本。Mysql数据库监控脚本内容如下:
#!/bin/sh
#MYSQL_SOCK=/tmp/mysqld.sock
#MYSQL_PWD=`cat /usr/local/zabbix-agent/alertscripts/.mysqlpassword`
ARGS=1
if [ $# -ne $ARGS ];then
echo Please input one arguement:
fi
case $1 in
Uptime)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent status|cut -f2 -d:|cut -f1 -dT`
echo $result
;;
Slow_queries)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent status |cut -f5 -d:|cut -f1 -dO`
echo $result
;;
Com_select)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent extended-status |grep -w Com_select|cut -d| -f3`
echo $result
;;
Com_update)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent extended-status |grep -w Com_update|cut -d| -f3`
echo $result
;;
Com_rollback)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent extended-status |grep -w Com_rollback|cut -d| -f3`
echo $result
;;
Com_insert)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent extended-status |grep -w Com_insert|cut -d| -f3`
echo $result
;;
Com_delete)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent extended-status |grep -w Com_delete|cut -d| -f3`
echo $result
;;
Com_commit)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent extended-status |grep -w Com_commit|cut -d| -f3`
echo $result
;;
Com_begin)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent extended-status |grep -w Com_begin|cut -d| -f3`
echo $result
;;
Questions)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent status|cut -f4 -d:|cut -f1 -dS`
echo $result
;;
Bytes_sent)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent extended-status |grep -w Bytes_sent |cut -d| -f3`
echo $result
;;
Bytes_received)
result=`/usr/local/mysql/bin/mysqladmin -uzabbix-agent extended-status |grep -w Bytes_received |cut -d| -f3`
echo $result
;;
*)
echo Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions)
;;
esac
3.2.4. WEB服务监控
通过Zabbix可以监控WEB站点的可用性及性能,取得站点的下载速度、响应速度等数据,这些数据会保存到Zabbix数据库中,最终将这些数据绘制到图形中,还可根据设定的触发条件进行报警。
监控项包含三个部分:方案(Scenario)、阶段(Steps)、认证(Authentication),其监控项和监控实例如表2和表3。
认证(Authentication)部分是对Web服务的SSL接入认证,其主要参数包括:认证方式、认证主机、认证文件、密钥和密码。
4. Zabbix云服务应用
数据中心是整个网络的核心节点,承载着整网的核心数据和业务。随着云计算、大数据、超融合等新技术新应用的不断涌现,数据中心服务器和应用服务的维护面临着越来越多的挑战。Zabbix为数据中心维护提出了解决方案,其能对数据库、虚拟化、Web服务等提供自动监控并发送问题警报。
4.1. 网络设备管理服务
4.1.1. 配置自动发现
首先,通过Configuration- > Discovery- > Create discovery rule创建发现策略,在策略中,需设定IP范围,并且选择需要检查的服务,具体参数如表4。对于基础网络设备,需要检查的服务为ICMP和SNMP,因此必须在网络设备上开启SNMPv2。策略中选择SNMP时,需要指定SNMP OID。
其次,通过Configuration- > Actions- > Create action创建触发动作。触发动作包括动作、条件、操作三部分。
· 动作(Action):只需指定名称即可,其他保持默认设置;

Table 3. Web monitoring step items
表3. Web阶段监控项

Table 4. Attributes of discovery rules
表4. 发现策略参数
· 条件(Conditions):可根据主机地址、代理、服务端口与类型、在线/离线时间等参数制定与或条件;
· 操作(Operations):是对符合条件的主机进行相应的操作,如:添加/移除主机、添加主机到组、发送信息、链接/取消模板等。
通过上述操作就可以自动发现所有的基础网络设备,并添加到相应的分组、链接SNMP设备模板、使用Zabbix内置的触发警报。
4.1.2. 添加拓扑图
拓扑图可以直观的看到基础网络的状态,提高监控效率和故障响应速度,由于Zabbix暂不能提供拓扑自动发现功能,因此需要手动添加。
通过Configuration- > Maps- > Create maps添加网络拓扑,网络拓扑包括以下几个关键参数:
· URLs:用于拓扑图上可以直接点击查看的链接,可以是设备图表链接,也可为空;
· Links:设备之间的互联线路,为设备互联线路的状态,默认正常为绿色,故障为红色;
· Link Label:设备互联线路标签,可以为静态名称,也可以通过ifInOctets[]和ifOutOctets[]函数显示设备之间的流量;
拓扑图添加完成之后,可以在Monitoring- > Maps下查看,如图2。
4.2. 服务器和虚拟机管理服务
使用Zabbix监控服务器,首先要在服务器上安装Agent。然后在Configuration- > Hosts- > Create host创建主机,创建时需要以下参数:
· Host name:填写一个唯一的名称;
· Groups:为被监控服务器选择一个群组,或者创建一个新的群组;
· Agent Interfaces:选择IP,在IP address中填写Agent端IP地址,端口为10050;
· Monitroed by proxy:选择no proxy;
· Enabled:勾选enabled,激活主机。
· Templates:根据被监控服务器的操作系统选择模板,如Templates OS Windows、Template OS Linux;
主机创建完成后,可以在主机列表里看到被监控主机,如果Agent状态正常,该主机的AVAILABILITY中ZBX显示为绿色,在Monitoring- > Last Data中会看到最新的主机信息,如:CPU、
内存、硬盘等,在Monitoring- > Graphs下可以看到被监控主机的监控数据图表,如图3是一个Windows服务器的CPU监控图表。
虚拟机被发现之后,在Graph中可以为虚拟机添加图表,Configuration- > Hosts,选择相应主机的Graphs- > Create Graph,在Items中可以添加需要的图表,如图4。
4.3. 数据库管理服务
下面以linux下MySQL数据库的监控为例,设置MySQL数据库的监控实例:
1) MySQL数据库服务器上安装Zabbix客户端代理,并在MySQL中为代理用户授权;
2) 在MySQL服务器上创建监控脚本,并调整用户属性和权限,脚本具体内容见上文;
3) 编辑zabbix_agentd.conf,添加用户参数:
UserParameter=mysql.version,mysql -V
UserParameter=mysql.status[*],/usr/local/zabbix-agent/alertscripts/checkmysql.sh $1
UserParameter=mysql.ping,mysqladmin -uzabbix-agent ping | grep -c alive
4) 在Configuration- > Hosts下,添加MySQL服务器主机,并连接Template App MySQL模板。
在Configuration- > Hosts下,添加MySQL服务器主机,并连接Template App MySQL模板。
设置完成之后,就可以添加相应的图表,图表中显示的是MySQL数据库增删查改的操作数,如图5。
4.4. WEB应用系统管理服务
Web监控建立好之后,在Monitoring- > Web下查看对应的图表,如图6是一个建立好的Web监控项的平均速度和响应时间的图形。
5. 结语
高效的运维管理与服务是网络信息系统服务的重要保障,基于开源Zabbix的网络管理云服务实现了对异地、多机构网络系统的分布式管理,并且可实现网络设备、服务器、存储、数据库和Web应用系统等多层次的全面监控管理,进而整合各种网络、计算、数据中心的系统健康服务。提供了完整的解决方案,提高了灵活、可靠的云服务模式,具有重要意义和应用价值。


Figure 6. Speed and Response time of Web service (1 h)
图6. Web服务的平均速度和相应时间
基金项目
国家自然科学基金资助项目(41676171, 30900213),中国科学院信息化项目(429111031, 529091031)。
NOTES
*通讯作者。