林为伟
(福建师范大学)
随着云计算和大数据应用的飞速发展,服务行业的IT运力需求渐渐的转移到云服务中来,有鉴于云计算的各种优势,越来越多的企业也开始着手建立自主的云计算数据中心.云计算数据中心必须保障部署于虚拟机中各应用系统的正常运行,在虚拟机或者云计算基础硬件设备发生故障前能够及时发现并排除,以保证整个系统的正常运行,提高系统运行的质量和效率.这就需要有一个良好的监控和管理软件.开源监控软件Nagios具有跨平台、高度扩展性、接口标准化、松散耦合、可基于HTTP协议灵活访问等特点[1],可以完成对被监控服务或资源进行全天候不间断地智能监控,做到及时报警.大大减轻了网络管理员的工作量,并提高工作效率,是企业实施云计算数据中心监控的较好选择.
尽管Nagios作为一款网络管理监控的软件,功能很强大,但是其并没有自带监管功能[5]. Nagios是一款高度插件化的软件,具有很高的可扩展性,插件可以由Nagios官方提供的,也可以由用户自己开发.当插件每一次监测对象时,只需返回四种状态值中的一种,Nagios核心会根据反馈的状态值做出相应的动作.这四种状态值分别是:OK(正常)、WARNING(警告)、CRITICAL (非常严重的错误)、UNKNOWN(未知错误).Nagios的web界面默认情况下是每5 min自动刷新一次,但是对被监控对象的监控时间可以根据管理员的需要自己分配的.
监控软件Nagios运行在Linux或Unix环境下,并提供web浏览器直观展示监控状态信息. Nagios还附有功能非常强大的报警机制,支持手机短信报警、飞信报警、邮件报警等.
云计算的核心理念是基于互联网提供的计算服务,云计算建立在分散的服务器的基础之上实现计算需求,这里以业界流行的开源云计算框架OpenStack的云主机Nova物理架构[2]为例说明如何在云计算数据中心中部署Nagios监控.
图1 云计算物理架构图
如图1所示,云计算物理架构从网络上划分为管理网、数据网、存储网和公网.管理网控制计算节点、存储节点、网络节点以及控制节点的网络连接,计算节点与存储节点之间有大量的数据传输,所以通常需要千兆或者万兆高速交换网络实现连接;数据网连接虚拟机和网络节点,为虚拟机提供互联互访服务,同样需要千兆或者万兆的高速交换网络实现连接.Nagios监控服务器部署于管理网络中,实现了业务数据流量和管理流量的分离,这样由监控轮询产生的流量不会影响网络用户的业务流量.Nagios可以监控云计算数据中心各个虚拟机资源的CPU负荷、内存负载、磁盘利用率、自身提供服务(HTTP、SSH等)、当前用户数、上传下载数据包流量等,同时也可以监控网络中交换机和路由器的的运行状态、端口状态、端口流量等,确保了云计算数据中心的稳定可靠运行.
根据企业云计算数据中心布局和需求,管理员应该制作合理的监控策略.不是盲目对任何资源都进行监控,适当舍去非必要项,对监控资源进行分类,设置不同的优先级,从而保障整个监控机制的效率.首先,云计算数据中心各个虚拟机服务器在网络中充当着重要角色,比如企业中备份服务器、人事管理系统服务器、FTP服务器等.对于服务器主要监控CPU、内存、硬盘的使用情况、邮件传输、用户使用数、文件传送.对于交换机和路由器需要监控其CPU和内存的负载以及各个端口流量值,若是大数据流量可能会使端口“坏掉”.然后对这些被监控对象的参数给定合理的阀值,设置报警方案,一出现故障就发信息及时通知管理员.
Nagios监控主要基于SNMP协议,所以监控方式主要是轮询,轮询机制在数据采集时设置的频率应该定义一个合理的范围,时间间隔太短会消耗太多的网络资源,因此对于轮询间隔时间的选择就显得尤为重要.正常情况下应该根据不同企业的监控需求和监控对象的数量规模的实际情况选择不同的轮询间隔时间.但是对于一般情况下重要的监控参数可以配置成每隔5 min检测一次,在警告状态下每1分钟检测一次.连续检测5次是故障状态,必须立即发短信通知管理员.
如果按照一般的固定轮询间隔时间的方式进行监控数据的采集,整个管理系统会存在轮询时间长,效率低下,管理站负担过重,监控数据流量占用过大带宽等问题.因此需要对现有的轮询方式进行改进,这里提出一种基于优先级的条件控制的动态SNMP轮询间隔时间生成算法以实现对网络设备的更为高效的监控[3].
为了合理设置动态轮询时间间隔TimeInterval,提出了监控对象优先级的概念,采用了基于标准方差分析的方法,即在每一次轮询之后都会记录下结果,并将结果参与标准方差运算,然后观察轮询数据结果偏离统计的样本平均值的偏差,再根据偏差程度去设置优先级别的高低,最后根据优先级确定轮询间隔时间.如果对象轮询参数结果出现经常性的偏离样本平均值非常大的情况,就说明该对象可能会出现异常,可以设置较高的优先级,加快轮询的频率,方便管理服务器对其进行进一步的处理.基本方法如下:
(1)设置轮询间隔时间TimeInterval的初始值,通常可以取值为正常轮询间隔时间的中间值.
(2)根据统计原理计算取值偏离样本平均值的情况.
在公式(1)和(2)中Vi为每一次轮询获取的结果值;为历史轮询结果统计的样本平均值;Vj为历史轮询过程中每一次的获取的返回结果值,S(i)是每一次计算出的标准方差值.
(3)确定轮询时间间隔
这一步主要是根据上一步算出的轮询值偏差程度来确定其优先级别的大小.基本思路是:如果标准方差值比较高,则轮询值波动变化较大,说明该对象动态过程明显,可以设置较高的优先级,在进行轮询时,应该选择较短的轮询时间间隔.而如果标准方差值不高,则轮询值保持平稳,说明该轮询对象静态特征明显,可以设置较低的优先级,在处理的时候应该选择较长轮询时间间隔.关于函数F的选择可以根据具体轮询对象和用户需求而定.通过该基于优先级的条件控制的动态SNMP轮询间隔时间算法的控制后,大大提高了管理站的轮询效率,降低了网络负载.
Nagios服务器端必须安装在Linux或者Unix的操作系统环境下,下面简要说明一下安装流程.
(1)从Nagios官网中下载nagios-4.0.1.tar.gz并编译安装.
(3)安装 Nagios完成,随后安装 nagios插件.
(4)插件安装好后,在web页面的地址栏输入Nagios监控服务器IP地址.例:192.168.1. 11/nagios/.在弹出验证密码窗口上输入密码即可进入相关监控页码,如图2所示,目前只有Localhost的状态,说明安装成功.
图2 localhost状态图
这里以最常见的两种操系统Linux和Windows虚拟机服务器说明Nagios监控客户端的安装配置.
(1)Linux虚拟机监控客户端的安装
Nagios监控 Linux虚拟机原理是:Nagios Server(服务端)运用check_nrpe插件跟客户端的nrpe进程进行通信.二者能够通信的前提就是要在Linux虚拟机客户端启用nrpe,服务端要安装nrpe插件但不需要启动nrpe服务.由于必须先安装nagios-plugins插件再进行nrpe的安装,这就促使了后者对前者的依赖.默认情况下nrpe是监听在5666端口上,启动nrpe服务后可以用命令netstat–an查看该端口是不是处于LISTENING状态.
nrpe的工作过程:Nagios服务端通过nrpe向客户端发起命令,客户端的nrpe接收到请求就执行监测本地的插件然后得到数据并返回给对方的check-nrpe,nagios core(nagios核心)对返回数据进行分析得到最终结果状态值.客户端也可以主动向被监控端发起监控某资源的请求.
(2)Windows虚拟机监控客户端的安装
Windows虚拟机必须安装 NSClient++组件.NSClient++的组建的安装过程很简单,一般根据安装向导一步步执行下去即可.其中允许主机地址是要填写Nagios服务所在的系统IP地址.安装好NSClient++后可以在Windows虚拟机查看该服务是否开启,缺省端口是12489.
Nagios服务器段和客服端都安装部署完毕后,就可对云计算机中心的云服务器进行监控.如图3所示,Nagios监控Linux虚拟机组的CPU负载(LOAD)、总进程数(TOTAL)、登陆用户数(USER)、VDA1的使用情况(VDA1)、僵尸进程(ZOMBIE)、ssh服务(SSH)、丢包率(PING).四种状态分别使用四种颜色标记,绿色是OK、黄色是WARNING、红色是CRITICAL、深黄色是UNKNOWN.通过颜色马上就能知道哪些服务出现什么状态.如图4所示,Nagios监控Windows虚拟机的C盘的使用情况(C:Drive Space)、CPU负荷(CPU Load)、进程数(Explorer)、内存利用率(Memory Usage)、组件NSClient++的版本类型(NSClient++Version)、运行时间(Uptime)等信息.
图3 Linux云服务器组状态图
图4 Windows云服务器状态图
企业通过构建云计算平台提高了资源的利用率并降低了运营成本,但是在给定的资源和负载下,虚拟机的性能通常会比物理机更差一些,因此有必要进行实验和测试,对这种性能上的差异进行测试和分析,从而实现更为高效透明地部署云计算平台.Nagios监控软件对这种分析和测试提供了有力的支持.
实验环境使用Grizzly版本的OpenStack构建云计算平台搭建在5台物理服务器上,服务器的配置均为2* Intel Xeon E5-2620 cpu 64GB内存、2*千兆网卡,2*300GB SAS硬盘支持全虚拟化技术.
表1 实验环境配置
如表1所示,通过硬件环境和操作系统都相同的物理服务器和由OpenStack云计算平台生成的虚拟机来对比物理机环境和虚拟化环境的性能差异.首先通过在5个物理服务器上独立安装测试工具RFT[4],并为每台服务服务器平均分配100条测试用例,然后同时开始执行.每台物理服务器上安装Nagios客户端,通过Nagios服务器监控各个服务器的CPU利用率和内存使用情况.接着由OpenStack云计算平台生成同样配置的5台虚拟机同样并行运行这500条测试用例,每台虚拟服务器上同样安装Nagios客户端,通过Nagios服务器监控各个服务器的CPU利用率和内存使用情况.
5台物理服务器在正常情况下执行完测试用例所花费的时间约为163 min,而5台同样配置的虚拟机花费的时间大约为196 min.可以看出执行同样的测试用例,物理服务器所花费的时间比云计算平台的虚拟机要少,效率要高.但是通过观察服务器的CPU利用率和内存的使用情况,可以发现云计算平台的虚拟机的平均负载要比物理服务器均衡的多.如图6所示.物理服务器的CPU利用率和内存的占用率上下波动比较大,不均衡,而云计算平台的虚拟机的CPU利用率大致维持在34%左右,而内存的占用率大致在22%左右,没有太大的波动,比较均衡.通过实验说明虽然云计算平台不及物理服务器效率高,但是虚拟机的CPU利用率和内存的占用率均衡很多,这样就大大降低了由于某个节点负载太重而造成的死机等故障,提高了整个系统的可靠性和健壮性.
图5 CPU利用率/内存利用率对比图
除了基本的物理机和虚拟机的性能和负载比较实验外,还可以通过多种实验进一步对云计算平台的性能进行监测和分析.例如分析云计算平台的额外开销,额外开销是云基础设施重点关注的性能问题,需要被限制在一个可接受的范围之内;还可以分析云计算平台的各种参数(例如CPU资源分配策略,内存资源分配策略)对系统性能的影响[5].
通过在云计算数据中心部署实施开源监控软件Nagios,实现对云计算基础设施和虚拟机的实时监控管理,并对传统SNMP协议的轮询机制进行改进,提出了一种基于优先级的动态SNMP轮询间隔时间生成算法,提高了监控效率,并设计了多种实验方案讨论了如何利用Nagios对云计算平台进行性能监测和分析.
[1] 王飞.基于分布式Nagios体系的应用监控平台设计与实现:[硕士学位论文].上海:复旦大学,2011(9):1-6.
[2] 陈伯龙,程志鹏,张杰.云计算与OpenStack[M].北京:电子工业出版社,2013.
[3] 朱创录.SNMP网络管理中高效轮询方法研究[J].计算机技术与发展,2012(3):36-40.
[4] 黄晓玲,陈桂林,赵生彗.基于云计算的并行测试方案设计与实现[J].计算机工程,2012,12(24).
[5] 黄晓飞.云基础设施服务性能监测系统的研究与实现:硕士学位论文.北京:清华大学,2013.