数据中心服务器运行状态监控系统研究 

2016-11-07 22:08黄京莲
软件导刊 2016年9期
关键词:远程监控数据中心

黄京莲

摘要:数据中心运行过程监控管理正日益受到广泛关注。监控内容主要分为环境监控和服务器监控两部分,以Linux服务器为研究对象采集数据,研究服务器远程监控方法,采用Linux Shell语言采集系统数据,实现包括CPU基本信息、磁盘分区使用、CPU利用率等功能在内的监控脚本。

关键词:数据中心;远程监控;GTK+;邮件报警

DOIDOI:10.11907/rjdk.161685

中图分类号:TP391

文献标识码:A文章编号文章编号:16727800(2016)009014003

作者简介作者简介:黄京莲(1964-),女,北京人,北京外国语大学计算机系讲师,研究方向为网络空间信息处理。

0引言

计算机数据中心在整个计算机网络中扮演着越来越重要的角色,为网络数据共享提供了极大便利。在计算机网络日益发展,信息数据量不断膨胀的今天,数据中心作为数据网络中的重要一环,已成为整个计算机网络体系中不可缺少的一部分。数据中心成为数据聚集中心的同时,也成为了风险的聚集中心。服务器处于24小时工作状态,一旦数据中心出现问题,势必影响计算机系统的运行,轻则造成数据传输滞后,系统运行缓慢,导致用户体验受损,重则可能对数据存储以及系统运行的安全性和可靠性造成威胁,带来严重后果。因此,对于数据中心的监控系统进行研究和开发,有着重要意义。数据中心的监控主要包括两大部分:一部分涉及对机房环境的监控,包括电源、设备、消防、保安、机房温度、电压、漏水检测等;另一部分涉及对服务器运行状态的监控,包括服务器的CPU负载、内存利用率等方面。这两部分的监控密切相关,环境的变化,尤其是温度和湿度的变化会导致服务器工作情况的改变,而服务器的负担过重可能导致服务器温度升高,从而引起机房环境的变化。

数据中心的监控需要针对不同设备,采用多套复杂的监控系统协调工作,密切配合。由于数据中心监控中最重要的部分是对服务器系统的监控,引入服务器自动监控和报警机制,有助于减轻机房管理人员的劳动强度,对监控数据进行分类和整理,并加以存档和分析,有助于观测数据中心的服务器在一天之中负载情况的变化,找出峰时和谷时,有针对性地采取预防性措施,在服务器负担较重的高峰时段通过增开服务器的方式减轻服务器负担,并增加监控内容和频率,减小宕机风险;而在服务器负担较轻的时段能够充分利用空闲资源。

本文选择可移植性的Bash Shell语言和C语言,并基于 GNOME 桌面系统的底层 GTK+机制实现GUI图形用户界面,利用Gnuplot作为绘图工具包,实现远程监控和图像化的数据分析,实现了对计算机CPU基本信息、CPU使用率、内存使用率、CPU负载情况等服务器运行状况的远程监控,并实现了自动检测。同时,该系统还能够利用LINUX的cron服务,对服务器运行状况进行监控记录,并通过日志绘制统计图等来显示服务器的运行状况。在开启自动监视后,脚本通过Unix/Linux的mail/mailx命令发送警报信息,还可将系统数据统计图发送到指定收件人作为存档依据。

1监控系统结构

1.1系统结构

系统主要分为被监控端服务器和监控端主机两部分。被监控端服务器安装有监控系统所需的源代码,同时有cron进程定时运行监控脚本收集数据以供作图分析。被监控端服务器和监控端主机均运行Linux系统。由监控端主机远程登录到被监控端服务器运行程序,通过对显示的控制,以及SSH的X选项,实现远程显示服务器端应用程序图形界面。该图形界面可直接在监控端弹出窗口,显示监视数据。同时,对于未安装图形界面的服务器,可以采用运行监控系统的shell脚本版本,在命令行下完成操作。对于数据的分析可以由shell版本生成数据表格(html形式)和图片分析发送至用户指定邮箱,同样能够实现图形化的显示。

1.2监控内容

系统所完成的主要任务是对数据中心的服务器运行状态进行监控。对于服务器运行状况最为直观的监控方式就是对服务器的各项性能数据进行监控,因此监控的主要内容有:CPU 基本信息、磁盘分区使用情况、CPU负载、CPU使用率、内存使用情况。同时,为实现无人值守,要求服务器能够自动对各项数据进行监控并在超过预设的警报值时自动报警。因此,本系统中还涉及如下功能:自动进行磁盘分区检查并发送警报邮件;自动进行CPU负载检查并发送警报邮件;自动进行内存使用情况检查并发送警报邮件。

为便于对数据进行更为直观的统计和观测,在图形界面中,还有实时统计图表查看和历史统计图表查看的功能。在shell脚本中,由于考虑到非图形界面无法显示图形的功能,此功能被发送图表报告取代,用户可以通过打开自己的邮箱查看附件观测数据统计情况。在本系统中预设了3种模式的系统报告可发送:①实时系统情况报告。该报告将生成一份文本文档,显示系统当前情况;②系统运行统计数据报告。该报告为表格形式的HTML文件,能够显示当日至此的统计数据。同时,通过选择日期,也可以发送历史某日统计数据。

系统运行统计图表报告为统计图形式,是由运行统计数据绘制成的4张图表。该图表同样可以通过日期的选择,发送历史某日的统计图。系统功能如图1所示。

1.3监控数据采集

Linux/Unix操作系统中常用的数据采集方式主要有shell命令采集方式,/proc伪文件系统和LKM可加载内核模块采集方式。Linux/Unix操作系统都提供类shell命令查看系统信息的方式,对于用户而言,只需输入相应的shell命令即可查看相关的系统信息。这一方法简单易用,且由于是Linux/Unix操作系统自带的功能,因而并不存在不兼容的问题。事实上,目前多数监控系统都采用此类方法获取监控信息。在Linux操作系统中,可以使用ps命令显示当前系统进程的列表,free显示物理内存和交换区的总量以及已使用的、空闲的、共享的、被缓存的内存数量等。实际使用中,通常需要首先通过Linux命令读取数据,然后利用shell的管道和重定向的方式将数据输入文件或取出,再进行下一步的分析处理。

proc (process information pseudo file system,进程信息伪文件系统)文件系统之所以被称为伪文件系统,是因为它是一个虚拟的文件系统。它由Linux/Unix内核动态维护和更新。

与一般的文件系统不同,/proc伪文件系统并不存在于硬盘上,而是存在于内核核心态空间中,系统启动时,内核自动将该文件系统装载在/proc目录下。/proc伪文件系统中包含CPU信息、内核/系统使用信息、内核版本、网络状况、设备信息等大量信息,均以文件形式存储,并通过内核对其进行更新以确保实效性。由于只需通过文件读取的方式获得,从/proc伪文件系统获取系统运行数据方便快捷且效率较高。本文采用了/proc伪文件系统的采集方法,并对采集信息加以整理分类。CPU基本信息可由/proc/cpuinfo文件获得,其中包括CPU的供应商、频率、模型等静态信息,如图2所示。processor:该条目是这一逻辑处理器的唯一标识;physical id:每个物理封装的唯一标识,其数量代表物理CPU的数量;core id:每个内核的唯一标识符,其数量代表内核的个数;siblings:位于同一个物理封装中的逻辑处理器的数量;cpu cores 同一物理封装中的内核数量;vendor id:生产商名,对于英特尔的处理器而言,vendor id中的字符串是GenuineIntel。

2监控系统实现

在shell脚本中,可以通过grep+关键词的方式,找到关键词所在行,再通过排除重复、统计行数,或是截取关键内容等方法获得所需的相关数据。获取CPU数目的关键代码如下:

cpu_num=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`

从cpuinfo中找出与physical id有关的内容,排重后计算行数,以获得物理CPU的数目。计算CPU负载情况时,使用的主要是uptime命令。对计算CPU负载而言,有用的数据是load average后的数值。这3个数据分别代表的意思是1分钟、5分钟、15分钟内系统的平均负荷。当CPU完全空闲时,平均负荷为0,当CPU工作量饱和时,平均负荷为1(单个CPU的情况)。在n个CPU 情况下当CPU完全空闲时,平均负荷为0,当CPU工作量饱和时,平均负荷为n。当平均负荷超过n时,说明CPU负载过大,不能及时处理所有工作。"load average"的值越低,说明负载越小,系统负荷越轻。在设计监控数值时,可以将平均CPU负载的警报值设置在0.8n左右,具体情况可以依照用户的自主设定来选择。

"load average"一共有3个值:1分钟系统负荷、5分钟系统负荷、15分钟系统负荷,计算时值的选取必须仔细研究。如果仅有1分钟的系统负荷大于n,其它两个时间段都小于n,可见问题并不突出,只是暂时现象,但如果15分钟内的平均系统负荷始终大于n,则表明问题并非暂时的,需要加以解决以降低系统负荷。因此,本设计中采取15分钟的系统平均负荷作为监控数据。

实现这一功能的主要bash脚本如下:

load_15min=`uptime| cut -d , -f 5`

load_avg=`echo "scale=0;($load_15min*100)/$total_core"|bc -l`

WARNING=80

full=0

if [[ "$load_avg" -gt "$WARNING" ]]; then

full=1

echo -e "033[31;1mYOUR CPU is overload!033[0m"

fi

if [[ "$full" -eq 0 ]]; then

echo -e "033[35;1mYour CPU LOAD is under control!033[0m"

fi

其它系统信息采集方法基本类似,如采用shell命令采集磁盘分区。在终端下输入指令:df –h时得到磁盘空间使用率信息:在监控程序中首先利用管道将df –k 命令的输出转变为grep命令的输入,并通过grep命令取出/dev相关的行。此后分别取出文件系统,使用率和峰值所在项数据。通过数组存储。内存使用率计算主要依靠/proc伪文件系统中的/proc/meminfo。计算内存使用率主要需要获取的内容是MemTotal和空闲内存的数量。磁盘分区使用量和内存使用量监控的总体实现方法相似,都通过运行脚本获得使用量数据后导入C语言程序中所定义的变量,由此再转换为可显示的数据。

自动检查的实现方法主要是在后台运行程序,通过加入循环,并在每次循环时加入一定间隔时间的方式(如sleep 20)来控制脚本运行,达到自动检查的目的。

3结语

数据中心监控问题日益引起重视,服务器监控为其中最重要的内容之一。本文针对LINUX或其它类UNIX系统,对服务器监控的内容和实现方法进行研究,并给出具体的设计实现方案。文中以Linux操作系统为开发平台,使用Apache服务器软件提供相应的服务支持。对于监控内容的确定,主要从实际需求与可实现性的角度出发。可供监控的内容主要有CPU信息、CPU负载、内存使用率、磁盘分区使用状况、CPU温度、CPU电压等。由于温度和电压等部分需要通过加载外部组件等方式来获取,难以直接通过shell命令采集或是/proc伪文件系统获取的方式来取得,故并未在本文设计中体现。因此,本文监控的主要内容为CPU信息、CPU负载、CPU利用率、内存使用率、磁盘分区使用状况,并对相关信息进行了整理和加工。通过命令和/proc伪文件系统,读取系统文件,从文件中筛选可用信息,并通过对信息加以整理、分类、计算,并采用重新写成文件或输出到屏幕的方式,显示相关信息。具体工作包括:读取归纳CPU基本信息、计算CPU负载情况、计算CPU使用率、计算内存使用率、设计自动检查、撰写邮件脚本、设计用户自主设置内容并完成内容的实时读取、存储、更新。

参考文献参考文献:

[1]WALKER,RAY.Examining load average[J].Linux Journal,2006(5):152.

[2]SMITH,CURTIS,DAVID HENRY.Highperformance linux cluster monitoring using java[C].Proceedings of the 3rd Linux Cluster International Conference,2002.

[3]楼桦.服务器监控系统的实现及其分布式设计[D].郑州:郑州大学,2004.

[4]刘文庭.MID平台上基于Linux的USB客户端系统设计[D].天津:南开大学,2009.

责任编辑(责任编辑:孙娟)

猜你喜欢
远程监控数据中心
酒泉云计算大数据中心
数据中心制冷节能技术及应用
民航绿色云数据中心PUE控制
露天矿运输站场边坡稳态远程监控及工程对策
基于云计算的交通运输数据中心实现与应用
Overlay Network技术在云计算数据中心中的应用