基于Open Lab的电信计费数据采集系统开发

2015-06-08 09:59徐向艺
电子设计工程 2015年16期
关键词:服务器端日志客户端

黄 淼,徐向艺,马 丽

(平顶山学院 软件学院,河南 平顶山 467000)

目前很多电信公司都提供了Open Lab出租业务,由于大型服务器购买昂贵,许多中小型公司都采用租用服务的方式经营。电信公司提供一项叫做Unix服务器的出租业务,需要使用Unix实验室出租业务的客户,通过电信公司提供的账号和密码远程登录指定的Unix机器,并使用Unix服务。电信运营商根据用户的使用时长进行收费。由于Unix服务器上记录的用户登录日志信息中的数据都是流水账数据,而且用户数量较多,使得数据信息量十分庞大。为了得到有序排列的用户信息数据,为日后计费提供可靠的数据支持,所以非常有必要开发一个数据采集系统,用于采集从Unix服务器上记录的用户登录日志信息中提取与用户计费相关的信息,以便后期将这些数据转移到数据库中存储为计费做准备[1]。

1 数据采集系统需求分析

1.1 业务需求分析

电信公司通过数据采集系统需要最终得到的关键信息是各个用户的在线时长,然后用来作为电信的收费依据。能够提供该信息的是Unix服务器自带的用户信息记录日志文件wtmpx。该文件记录了每次用户登录的OS账号、进程ID、登入时刻、登出时刻和登录终端机器IP。

数据采集系统客户端需要对这些采集到的用户信息成批进行读取,读取一批数据后对采集到的成对登录登出数据进行匹配,然后将匹配成功的数据信息发送给数据采集服务器。匹配不成功的单条记录进一步同下一批日志数据一起进行下一次匹配发送处理。数据采集服务器接受客户端发送过来的成对数据并提供数据的接收监控显示功能,并将成对数据存入相应的数据库保存,为收费提供数据管理和支持。

1.2 数据描述

日志文件wtmpx是实时动态增长的,每372字节的数据代表一条登入/登出记录。因此,数据采集端程序从日志文件中读取数据时,只需要读取从上次读取到本次读取之间所产生的最新的日志数据。即,采集端程序需要从上次读取的末尾位置开始读取,以每372字节的数据为单位进行读取,直到接近文件末尾。正因为日志文件是实时动态增长的,如果读至文件末尾,数据并非372字节的倍数,则表示一条登录数据尚未完全形成,因此,只需要读至上一个372字节的数据即可。数据采集端程序读取日志文件的过程如图1所示。

图1 日志文件读取过程Fig.1 Log file reading process

图1中突出显示字体1000部分表示上次读取的末尾位置,则本次读取从此开始。因为日志文件的动态增长,以至于本次读取时,最后一条数据尚不是完整记录,因此,只读取到上一条登入/登出记录即可。采集端程序从日志文件wtmpx中得到数据后,将数据存为临时日志文件temp.log,然后进行数据解析。该文件中包含多条登入/登出记录,每条记录(每372字节)中需要采集的信息有:登录的OS账号、登录的进程 ID、登录/登出的时间、登录期间的在线时间、终端IP。这些需要采集的数据信息在每372长度的字节中的位置如表1所示。

表1 采集的数据位置信息表Tab.1 Data collected by position information table

Unix服务器自带的文件中包含的用户信息是数据采集系统将要读取的关键数据,对该文件的解析是系统设计的前提。该文件是一个二进制文件,从表1中可以看出,系统需要采集的5个数据项在文件中的一条登录登出记录项的地址是不连续的,在设计系统时,必须针对这几个数据项的地址和各自的大小进行读取[2-3]。

2 数据采集系统设计

根据系统的需求分析得出,该数据采集系统是一个基于“客户端-服务器”架构的数据挖掘系统,由数据采集客户端和数据采集服务器端两部分组成。

数据采集客户端的主要功能为:

1)定期读取日志文件,得到最新的日志数据(从上一次读取后的位置开始读取);

2)提取并解析日志文件中的数据;

3)如果有未匹配的日志文件,则将解析后的登录日志数据和未匹配的日志文件数据合并;

4)将这些记录匹配为完整的登录会话记录(一次登录会话包含一次登入记录和一次登出记录);

5)提交匹配后的日志数据到服务器。

数据采集客户端的系统功能如图2所示。

图2 数据采集客户端系统功能流程图Fig.2 The flow chart of data collection client system function

数据采集服务器端的主要功能为:

1)持续接收数据采集客户端发来的登录数据,并记载登录数据;

2)显示数据接收以及操作的结果,以实现数据监控;

3)定期检查所记载的登录数据,并将数据保存到归档日志文件logrecfile.txt中。

数据采集服务器端的系统功能如图3所示。

图3 数据采集服务器端功能Fig.3 The flow chart of data collection server system function

由以上分析得出,可以把系统设计分成以下几个模块:读取日志模块,匹配日志模块,发送日志模块,日志浏览监控模块、日志接收模块,以及日志存储模块。

3 数据采集系统核心功能设计与实现

3.1 类的设计及功能描述

整个数据采集系统设计了7个类。分别是:

1)Log类:日志数据业务类,代表从日志中解析出来的日志记录,每个日志记录解析为一个Log对象。

2)LogPair类:"日志记录对"业务对象,包含两个登录日志对,还包括登录主机的IP地址。日志对中一个是登录记录,一个是登出记录。

3)DMSClient类:采集客户端核心业务程序,主要用于获取日志数据、解析日志数据、匹配日志数据、以及向采集服务器发送日志数据。

4)DMSClientFrame类:采集客户端界面,显示采集数据以及发送数据的状态信息。

5)DMSServer类:采集服务器接收程序,接收采集端发来的数据,接收到数据以后写入到文件中。

6)DMSServerFrame类:采集服务器界面,能够显示采集过程中的数据信息。

7)NetService类:设计网络协议,提供数据发送和接受的格式[4]。

3.2 日志读取模块

日志读取模块每次读取原始文件的一部分。采用增量读取,每一次读取一批。读取日志核心算法步骤描述如下:

1)检查输入数据文件是否存在。

2)检查上次读取结果log.txt是否存在,如果存在就说明上次的结果没有处理完成,这次就不再读取。

3)读取上次的读取位置(没有的从开始位置读取)。

4)根据上次的读取位置和文件长度判断是否有新记录产生。如果没有新数据产生,就不读取。

5)从上次读取位置开始批量读取日志到临时文件,如果读取到文件末尾就不读取。

6)保存本次读取的位置。7)改名临时文件到log.txt。8)如果有异常一定不产生文件log.txt。

3.3 日志匹配模块

日志匹配模块每次从日志读取模块产生的结果log.txt中读取登录登出数据中成对的数据,最终产生匹配成功的成对数据文件matched.txt。其核心算法步骤描述如下:

1)检查是否有输入数据文件log.txt,如果没有就返回。

2)检查是否有输出数据文件matched.txt,如果有返回。

3)如果有单条登录记录login.txt存在,读取 login.txt到集合 logins, logouts。

4)读取 log.txt到集合 logins, logouts。

5)迭代 logouts的key查找logins。如果找到,就是登录对 matchedList<logPair>。找到从logins集合中删除登录记录。

6)保存 matched集合到matched.txt。

7)保存 logins集合到login.txt

8)删除 log.txt。

3.4 日志发送模块

发送日志要用到网络,网络协议的设计就是一项非常重要的工作。为了便于数据的封装和扩展。网络协议设计采用XML[5]作为协议数据封装。设计了负责XML数据的发送和接收的NetService类。XML报文设计包含类型type、长度length和值value三项内容。数据结构设计如下:先发送类型type,设计每次发送10个Byte,再发送长度length为4个Byte的int类型数据,最后发送value,节数量与length一致。发送数据方法 sendDocument(Document doc,Socket socket)将 xml doc通过socket的out流发送出去。其设计如下:

1)先发送定长的type数据 "XML"到流中。

2)将xml doc写入到内存的缓冲区中,得到全部的Bytes数据,同时得到数据的长度。

3)将int分成4个Byte发送到流中。

4)将XML的全部的Byte数据发送到流中。

1)先接收定长 type类型。如果type不是 "XML"就抛出异常。

2)接收4个Byte,合并为一个int,是长度信息length。

3)从流中接收length个Byte到数组缓冲区。

4)将数组缓冲区中的数据,解析为XML doc。

需要将一个List全部的日志数据封装起来发送到服务器。发送XML数据格式设计如下:

封装服务器回送消息的接收XML数据格式设计如下:

日志发送模块的核心算法描述如下:

1)检查是否有被发送的数据文件matched.txt。如果没有这个输入数据文件,就不发送。如果有数据,就读取数据到集合中。

2)连接到服务器。

3)向服务器发送集合数据并等待响应结果。如果响应结果中包含消息OK则说明发送成功,删除matched.txt。如果返回ERROR表示发送失败,就不能删除matched.txt。如果异常也不能删除matched.txt。

3.5 数据采集服务器端设计

数据采集服务端主要用来接受客户端发送过来的日志数据,由于数据要通过网络传输,服务器端采用读取配置文件的方式读取相关的初始化配置参数。设计一个loadConfig()方法负责读取并且初始化服务器参数。服务端主要任务流程如下:首先读取配置文件信息,然后开始监听服务器网络端口号,创建缓冲队列和线程池。需要设计保存文件线程和客户服务线程并将线程启动。保存文件线程会检查缓冲队列,如果有数据就追加写入到logFile。 如果有客户端连接进来,就创建客户端服务线程并提交到线程池执行。客户服务线程在执行的时候,不断接收用户提交的数据并保存到缓冲队列[6-7]。

3.6 系统界面描述

数据采集系统客户端在读取、解析、匹配和发送数据后,还需要将数据操作的结果显示在界面上以实现数据监控,每次操作后,均在页面上显示本次操作的结果。其界面效果如图4所示。

图4 数据采集系统客户端界面Fig.4 Data collection system is the client interface

数据采集系统服务器端程序实时获取采集端发来的数据。在得到采集端发来的数据后,保存数据,并将采集端服务器的信息显示在界面上以实现数据监控。其界面效果如图5所示。

图5 数据采集系统服务器端界面Fig.5 Data collection system is the server interface

4 结束语

本文阐述了基于C/S模式的电信数据采集系统的开发过程。该系统在Windows操作系统下通过Java语言开发完成。实验结果表明,该数据采集系统能够从大量杂乱的日志数据中提取所需要的关键信息并对这些信息进行按规律整合,最后以GUI图形界面的方式提供数据的浏览监控显示功能。极大地方便了后期的数据维护和计费管理。该系统还可以推广到除电信业务以外的其它需要处理大数据的场合。比如仓库的物流管理、企业的业绩分析、学校的学生信息管理等。

[1]路鹏飞,李进.在线计费系统中余额分配算法的优化[J].计算机工程,2011,37(7):282-284.LU Peng-fei,LI Jin.Online billing system balance allocation algorithm in the optimization[J].Computer Engineering,2011,37(7):282-284.

[2]周如培,冯同鑫.基于CORBA的电信计费系统的研究与开发[J].计算机应用研究,2002(8):130-131.ZHOU Ru-pei,FENG Tong-xin.The research and development of the telecommunication billing system based on CORBA[J].Computer Application Research,2002(8):130-131.

[3]张友生,李雄.软件开发模型研究综述[J].计算机工程与应用,2006,42(3):17-19.ZHANG You-sheng,LI Xiong.Software development model studies reviewed[J].Computer Engineering and Application,2006,42(3):17-19.

[4]孙卫琴.Java面向对象编程[M].电子工业出版社,2006.

[5]耿祥义.XML基础教程[M].清华大学出版社,2006.

[6]CHEN Zhi-rui,TAN Hong-zhou.Logic structure of programmable instructions for Java[J].Journal of Electronics(China),2009,26(5):44-46.

[7]Little G,Miller R C.Keyword programming in Java[J].Automated Software Engineering,2009(3):32-35.

猜你喜欢
服务器端日志客户端
一名老党员的工作日志
Linux环境下基于Socket的数据传输软件设计
扶贫日志
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
浅析异步通信层的架构在ASP.NET 程序中的应用
游学日志
基于Qt的安全即时通讯软件服务器端设计