图书馆应用系统监控的设计与实现
黄进
深圳图书馆 深圳 518036
摘要

主要介绍监控系统的设计和实施方案,重点描述监控系统整体方案的设计思路和框架结构。介绍利用C/C++技术、AIX操作系统管理技术等实现监控系统的监控信息采集、信息分析和实时报警等功能的方法。

关键词: 监控; 信息采集; 监控系统设计; 实时报警
Design and Implementation of Monitoring for Library Application System
Huang Jin
Shenzhen Library, Shenzhen 518036, China
Abstract

The article introduces the design and implementation of the monitoring system, and puts emphasis on the design ideas and framework structure. The implementation of monitor information collection, information analysis and real-time alarm by C/C++ and AIX operating system management technologies are also introduced.

Keyword: Monitor; Information collection; Monitoring system design; Real-time alarm
1 引 言

随着我国国力的日益强大和当今科技的飞速发展,图书馆业务拓展非常迅速,一些图书馆将传统业务(如图书借还)采取7×24小时不间断服务。因此,保障应用系统长时间无故障运行成为一个重要的课题。一方面,配置强劲的硬件环境和选取稳健的软件系统必不可少;另一方面,加强应用系统及其应用环境的维护十分必要。而应用系统监控作为提升系统维护质量的重要手段,对于保证应用系统、应用环境问题的及时发现和预防起到重要作用[ 1]

目前,图书馆应用系统是由应用系统群、应用服务器群和数据库系统等组成[ 2]。在建设、部署应用系统监控时,基于成本和效率考虑,将所有的应用系统、应用服务器和数据库系统等作为一体考虑,配置整套图书馆应用系统监控。本文主要利用服务器、应用系统和数据库管理技术与编程语言技术相结合,实现多服务器、多应用系统和数据库的统一监控和实时报警[ 3]

2 系统设计思路
2.1 系统需求

国内外图书馆监控方面实践主要集中在机房、服务器以及图书馆环境上。如机房的温度湿度的监控、对图书馆整个应用环境的视频监控、服务器性能监控等。这些实践取得了较好的效果,解决了不少图书馆监控问题,如机房安全、服务器安全等[ 4, 5]。但是它们监控侧重图书馆的设备和物理环境,对软件系统的监控关注较少,对监控结果的充分利用的关注则更少。本文侧重研究图书馆应用系统的监控,同时也重点考虑对监控结果的充分利用。

稍具规模的图书馆拥有十几台应用服务器、十几个应用系统,传统人工应用系统监控维护时需要逐个登录服务,工作量相当大。而且这种监控维护方式十分依赖于时间点,完全可能错过排除故障的最好时机[ 6]。本系统采用分布式处理方式,对所有应用系统及其应用环境进行多角度全天候监控,通过对监控结果分析实现故障预警和故障报警功能。

当系统故障发生时,维护人员常常会从错误现象逐个查找错误来源,而不能快速定位应用系统故障的真正来源。因为错误可能是应用系统本身故障;也可能是应用服务器出现问题,如磁盘空间已满;还可能是底层数据库故障。因此,本系统在实现应用系统监控时,其中一个重点是监控应用系统的应用环境,包括操作系统数据库环境。

2.2 设计思路

监控系统以应用服务器、应用系统和数据库的实时状态为研究对象,通过预先设定的监控点,监控应用服务器、应用系统和数据库的实时状态。利用应用服务器、应用系统、数据库管理技术和C/C++编程语言技术,采用管理命令、过滤日志文件等方式收集监控点的实时状态,对监控点实时状态定性分析后进行日志记载和实施故障预警、故障报警决策。

2.3 数据库结构设计

实现监控系统将建立监控项目表、用户表和监控日志表。

(1)监控项目表

将应用服务器、应用系统和数据库的监控点称为监控项目。监控项目的描述字段主要包括监控名称、所属类型、监控分析规则、警报级别、预警阈值和报警阈值。具体监控项目表结构如表1所示:

表1 监控项目表

为减少对数据库的依赖,监控项目表采用文件形式存储。

(2)用户表

用户表用来保存接收预警和报警的人员信息。系统约定通过E-mail接收预警信息,手机接收报警信息。用户信息包括:用户名、E-mail、手机以及用户级别等信息。基于需要设置的用户并不多,同时为减少对数据库的依赖,用户表采用XML文件存储,格式如下:

{

用户名

E-mail

用户级别

手机

}

(3)监控日志表

实时监控信息表(real_info)用来保存实时的监控项目的当前状态信息。根据可设置的监控项目设置表字段,如表2所示:

表2 实时监控信息表
3 系统实现
3.1 系统架构

监控系统采用分布式的结构设计,由信息采集服务、信息分析服务、警报服务、日志服务4部分组成。信息采集服务负责采集服务器、数据库以及应用系统相关信息;信息分析服务对采集信息进行分析,判别是否到达故障预警或故障报警条件;警报服务实现达到故障预警或故障报警条件的监控项目按预先设定的警报途径报警;日志服务用来记录和统计监控项目的状态。

为支持多个应用系统、服务器等监控,监控系统可以配置一个或者多个信息采集服务。服务与服务之间采用Socket方式通信。监控系统架构如图1所示:

图1 监控系统架构

3.2 系统功能实现

(1)信息采集

信息采集利用操作系统、数据库等管理技术,采用统一定时时钟,运行管理命令形成监控项目当前状态信息的临时结果文件,从结果文件汇总采集结果。采用逐项采集、统一提交的方式实施信息采集。信息采集通过信息采集服务实现。

将信息采集范围按采集对象不同分为三类,服务器状态、数据库状态和应用系统状态。不同的监控项目采取不同的采集命令。服务器状态参数如CPU、内存、磁盘等在AIX操作系统平台上有很多管理命令。如监控项目包含关键字进程数(“String”)的监控,使用管理命令ps。详细的采集代码如下:

sFile.Format("/tmp/aix_string%d",Str_num); //指定临时结果文件

sprintf(szTmp,"ps-aef |grep-i %s |wc |awk '{print $1}' > %s",_status.str_name[i],sFile()); //形成采集命令

system(szTmp); //执行采集命令

sData.GetFromFile(sFile()); //从采集文件获得采集信息

数据库和应用系统的部分监控通过服务器运行状态的监控项目(如磁盘监控和进程监控)实现。因此数据库和应用系统状态监控主要依赖于数据库和应用系统的错误日志文件,通过过滤日志文件的特定字符串实现监控。在Oracle中,约定通过过滤“ORA-”字符串查找错误。监控采集的代码如下:

sFile1.Format("/tmp/aix_ora%d",cur_num); //指定临时结果文件

sFile2.Format("/tmp/aix_ora%d",last_num);

sFile.Format("/tmp/aix_ora");

sprintf(szTmp,"grep-n %s %s > %s",_status.str_name[i],_status.file_name[i],sFile1); //形成采集命令

system(szTmp); //执行采集命令

sprintf(szTmp,"diff %s %s > %s",sFile1,sFile2,sFile); //形成采集命令

system(szTmp); //执行采集命令

sData.GetFromFile(sFile()); //从采集文件获得采集信息

(2)信息分析

信息分析是利用信息采集服务采集的当前状态信息和系统约定监控项目的分析规则进行信息分析。一方面将分析结果提交日志服务;另一方面根据监控项目配置中的预警和报警阈值判定是否预警和报警。

监控系统按采集结果的不同格式设置两种信息分析规则:数值比较法和字符描述法。数值比较法如监控项目CPU使用率、内存使用率等比较采集值与设定值即可。字符描述法则不是简单的数值比较,而是采集错误以及错误描述信息。如监控项目数据库监控DBStat,采集的信息如:“ORA-1652: unable to extend temp segment by 128 in tablespace SerbibM”,分析时将分别提取错误码“ORA-1652”和错误描述“unable to extend temp segment by 128 in tablespace SerbibM”。

对不同分析规则分析产生的结果报警决策也不一样。数值比较法的分析结果将综合前面最近的两次分析结果,如果三次结果均达到预警或报警才实施预警和报警;而字符描述法则直接报警。

(3)警报

警报是根据信息分析服务提供的警报类型、警报级别和详细信息以及监控系统中设置的报警用户按类型和级别进行报警。监控系统的报警根据报警的轻重缓急设置有三类:警报日志、E-mail报警和短信报警。系统约定采用字符描述法分析规则分析采集结果的监控项目,直接使用短信方式报警。

报警服务流程如图2所示:

图2 报警流程图

警报日志作为所有报警的事务简单记录,采用文件形式记载。日志文件内容格式如下:

【时间】【机器名】【报警类型】【报警内容】。例如服务器P690在2009-12-01T16:32:33时CPU利用率达到92%时的报警日志:【2009-12-01 16:32:33】【P690a】【SMS】【CPU:92%】。

E-mail报警根据警报级别和用户级别,分别发送E-mail,其内容格式与日志文件内容相同。实现代码如下:

for( i = 0; i < iCurUserNum;i ++)

{

if(iClass >= user[i].iClass) //判断用户是否需要提交报警

{

sprintf(sMailFile,"/tmp/tempmail_%d_%d",iDateTime,i);

sMailContent.PutToFile(sMailFile);

sprintf(sCommand,"sendmail %s < %s",user[i].Email,sMailFile);

system(sCommand); //发送E-mail

}

}

短信报警处理方式与E-mail报警处理类似。不同的是,短信报警没有直接使用SMS通信协议发送短信,而是通过Socket协议与深圳图书馆短信平台接入短信服务。

(4)日志系统

日志系统使用从信息分析服务发送来的分析结果组成SQL语句,保存到监控日志表Real_Info中。具体代码为:

sSql.Format("insert into real_info values

(real_info_sequence.nextval,'%s',……'%s') ",sMachine, ……,sdILAS);

if(_stm.executeUpdate(sSql())) ……

在日志系统后台数据库出现故障时,并不影响整个监控系统的运行,日志系统自动启用临时日志文件形式保存,等数据库恢复正常后,自动从临时日志文件中补齐故障时间内的日志。

日志系统利用监控日志表提供多种统计、决策功能。如:磁盘增长速度、CPU使用率、报警故障分析等。

一段时间内CPU使用率分析的关键代码如下:

sSql.Format("select sum(CPU)/count(CPU) from real_info "

"where RecTime between '%s' and '%s' ",iStartTime,iEndTime);

if(_stm.executeUpdate(sSql())) ……

4 应用效果

目前,深圳图书馆核心应用系统、专题资源系统、Web服务器等均已实现系统监控。设置一台服务作为监控服务器部署警报服务、信息分析服务、日志服务,将信息采集服务分布在被监控的应用服务器上。系统监控逻辑结构如图3所示:

图3 深圳图书馆应用系统监控逻辑结构图

机器监控项目表采用XML文件形式存储,以P690服务器为例,该机器为AIX操作系统,安装dILAS系统和Oracle数据库系统。监控项目配置文件如图4所示:

图4 监控项目配置

图4可以看出监控项目配置情况:CPU使用率、内存使用率、磁盘空间、用户进程数、关键字进程数、磁盘IO使用率、DBStat和过滤文件。在配置监控项目时,重点监控Oracle和dILAS系统。在磁盘空间监控中,“/Ora_datafs01”和“/Archive_fs01”是Oracle使用的磁盘空间,“/dilasAppfs”和“/dilaslogfs”是dILAS系统磁盘空间;在用户进程监控时,设置管理dILAS服务的超级用户和管理Oracle的Oracle用户进程监控;在关键字进程中,“DDServer”、“DBAServer”、“DBServer”是dILAS系统的关键服务名称,而“LOCAL=NO”是检测Oracle外部连接的标识;过滤文件配置了dILAS系统日志,通过检测日志中“ERR-”发现dILAS系统错误。

监控系统对监控点的监控做到了准确无误,侦测状态异常能及时发送预警和故障报告。从监控的广度上来说,监控系统监控点基本涵盖了应用系统可能引发错误的各个方面。图5图6分别是监控系统短信错误报告和日志系统统计报告。

图5 监控系统发送的手机短信

图5为监控系统检测到WebA机器CPU使用率达到93%,超过监控项目CPU设置的报错阈值90%时发送的手机短信。

图6为日志系统统计的2009年12月16日的CPU使用率。可以看出,2点多和15点到18点CPU使用率较高,这是因为凌晨2点Oracle开始备份,而15点到18点则是深圳图书馆读者服务最繁忙的时候。

5 结 语

监控系统实现了应用系统的实时监控和实时报警,并提供被监控应用系统性能统计和分析,达到了监控系统要求实现的目的。简洁明了的系统功能、灵活的系统配置功能、分布式的体系结构和松散有序的系统服务满足了整体方案设计要求。监控系统能够及时快速地发现应用系统、应用环境潜在的问题和故障,对于迅速发展且强调多样化、人性化服务的图书馆来说,具有重要意义。

参考文献
[1] 李绚. 对分布式应用系统监控的设计与实现[J]. 成功: 教育版, 2009(1): 76-78. [本文引用:1]
[2] 张中宁. 数字图书馆网格应用模型中网格的监控与调度[J]. 科技情报开发与经济, 2008, 18(7): 11-13. [本文引用:1]
[3] 李霞, 程源. 校园网服务器监控系统的研究与设计[J]. 郑州轻工业学院学报: 自然科学版, 2007, 22(4): 105-107. [本文引用:1]
[4] 阎晓弟, 耶健, 邵晶. KVM_over_IP技术及其在图书馆中心机房远程监控管理的应用[J]. 现代图书情报技术, 2006(4): 87-90. [本文引用:1]
[5] 王立荣. 图书馆网络视频监控系统设计[J]. 现代图书情报技术, 2004(8): 25-27. [本文引用:1]
[6] 王艳清, 智峰. 服务器信息监控与分析系统的设计与实现[J]. 网络安全技术与应用, 2006(4): 51-52. [本文引用:1]