基于socket分布式日志系统的设计与实现

一、约定

1、本文中分布式的每个应用都是java web应用;
2、本文所描述的分布式是指一个企业中的多个应用,这些应用在源码包结构前缀都为com.je;
3、本文所以F、M两个应用为例进行阐述。例如:F应用a模块的源码包为com.je.fa,b模块的源码包为com.je.fb。


二、摘要

在企业信息化建设中,通常出现多个应用系统位于不同的应用服务器,甚至于不同的物理主机,这就为我们管理和监控这些应用程序带来了难度。在企业应用监控的手段中,日志审计是一个很有效的办法,它是将应用系统运行期的状态及异常记录的日志里,通过一些辅助工具,去分析,审计。对于日志存储的形式可以多种多样,通常以文本的形式存储居多。本文主要阐述如何通过apache log4j这个组件来实现位于多台不通应用服务器和物理主机的多个应用系统的日志收集功能,我把这个具有分布式收集日志功能的系统称之为JELog4j(JE代表javaedu.com)。


三、需求

1、JELog4j要能够收集位于不同应用服务器,甚至不同主机上应用程序的日志;
2、JELog4j所产生的日志中应包含应用服务器的名称(主要是获取weblogic server的名称,为了简单期间以下用tomcat为例)、系统别,系统当前使用人这三个关键信息;
3、JELog4j要能够提供邮件发送与FTP下载两种日志查阅方式;
4、JELog4j要能够满足高并发,高性能的日志记录请求。

四、需求分析

从上述需求上看,前三个需求是功能性需求,最后一个是非功能性需求。

对于需求1,由于要实现分布式收集日志的功能,我将采用socket网络通信方式来实现分布式日志收集,通过查看log4j自身的代码,其实这部分功能它已经实现,我这次的实现是将其实现进行重新设计,使得它变得更加易用和可管理,其中也会参考原有socket server的实现源码。

对于需求2,实际上我已经在“ 客户化Apahce log4j日志信息”这边博客里做了说明,这里的设计跟它是一样的。

对于需求3,log4j本身就提供发送邮件的功能,也不需要进行设计开发,对于FTP,仅仅是对外提供服务,只需要搭建一个FTP服务器就好了。

对于需求4,主要是对log socket server的实现时,采用了线程池的方式,提高服务器端接受客户端请求的并发效率。

五、系统设计

1、逻辑架构图:



2、日志存储结构图:



3、程序设计类图:



Note:
1、AdminServer类是Server类的帮助类,它是整个JELog4j Server的入口类,通过它可以从外部脚本传递一个参数,用户使得Server启动或停止;
2、Server类是JELog4j Server的核心类,它实现了一个server生命周期的两个阶段:服务监听、停止服务;
3、SocketNode类是从线程池中创建出用于处理记录日志和反向通过消息管理Server类的功能;
4、HierarchyFactory类是用来获取不同系统日志配置文件,通过不同的配置文件,实现不同的日志记录方式。

4、JELog4j软件包结构设计

D:\WORKSPACE\WORK\JELOG4J
├─.settings
├─bin                             (启动停止脚本)
├─cls                              (myeclipse编译目录)
├─config                         (服务器端配置文件)
├─lib                              (依赖包)
├─sample                        (客户端示例程序,myeclipse工程)
└─src
    └─com
        └─je
            └─log4j
                ├─client           (client API源码)
                └─server         (server实现程序)

六、系统实现

见源代码,用myeclipse打开。

程序本身比较简单,这里就不做过多介绍,希望大家给出宝贵意见,本想将源码放到google code,想想这么简单的程序还是罢了。

七、部署

1、将JELog4j解压到磁盘目录(如:D:\WORKSPACE\WORK\),修改bin目录下每个脚本的install_home变量为JELog4j真实的目录。
2、双击startServer.bat,如果看到如下字样,说明服务器启动成功!
引用
2011-07-08 08:41:12 - Listening on port 9999
2011-07-08 08:41:12 - Waiting to accept a new client.


八、测试

Note:
a.未使用weblogic测试,感兴趣的同学可以在weblogic 下测试,这样可以在日志里打印出server的名称;
b.未配置标准J2EE登录,如果配置了后,登录可以取到用户名,并显示在日志中;

1、将%tomcat_home%/conf/server.xml的<host>标签中加入如下内容 :
引用
<Context path="/test" docBase="D:\workspace\work\fapp\WebRoot" debug="0" reloadable="false" />


2、使用%tomcat_home%/bin/startup.bat启动tomcat.

3、在浏览器中输入: http://localhost:8888/test/servlet/TestServlet(如果你的tomcat工作在8888端口话),即可访问sample的servlet,当浏览器中显示如下字样时,说明示例程序运行成功。

引用
This is fapp application servlet test!


4、在c:\\logs里查看日志信息(可以在D:\WORKSPACE\WORK\JELog4j\config的配置文件中修改日志输出的位置,注意:每个系统都有一个lcf文件,例如,如果是M系统,则需要创建类似的配置文件m.lcf)

九、结束语

感谢你耐心的读到这里,若有什么宝贵意见,或程序改进意见,请与我联系,欢迎砖拍

如果您觉得本文对您有益,请点击博文后的google广告,对作者表示支持,谢谢!

猜你喜欢

转载自redhacker.iteye.com/blog/1119337