`
redhacker
  • 浏览: 489418 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于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广告,对作者表示支持,谢谢!
  • 大小: 145.6 KB
  • 大小: 12.6 KB
  • 大小: 16.7 KB
3
3
分享到:
评论
3 楼 hquxiezk 2011-07-08  
麻烦也发一份给我86963211@qq.com
2 楼 shenjie8821 2011-07-08  
挺不错的。我想看一下您的代码,可以给我留一份吗?shenjie20080808@yahoo.cn,谢谢哦!
1 楼 hquxiezk 2011-07-08  
请问源代码在哪里呢

相关推荐

    基于javatcpsocket通信的拆包和装包源码-logpipe:分发日志收集器

    基于java tcp socket通信的拆包和装包源码 日志采集工具(logpipe) 1. 概述 在集群化环境里,日志采集是重要基础...logpipe是一个分布式、高可用的用于采集、传输、对接落地的日志工具,采用了插件风格的框架结构设计

    Python示例-从基础到高手PDF

    第 19 章 使用 python 构建基于 hadoop 的 mapreduce 日志分析平台 第 20 章 报警监控平台扩展功能 url 回调的设计及应用 [python 语言] 第 21 章 服务端 socket 开发之多线程和 gevent 框架并发测试[python 语言]...

    亮剑.NET深入体验与实战精要3

    4.9 实现系统托盘和热键呼出 185 4.10 进程与多线程的区别 190 4.11 创建多线程应用程序 191 4.12 WinForm开发常见问题 194 4.12.1 如何设置运行时窗体的起始位置 194 4.12.2 如何使一个窗体在屏幕的最顶端 194 ...

    亮剑.NET深入体验与实战精要2

    4.9 实现系统托盘和热键呼出 185 4.10 进程与多线程的区别 190 4.11 创建多线程应用程序 191 4.12 WinForm开发常见问题 194 4.12.1 如何设置运行时窗体的起始位置 194 4.12.2 如何使一个窗体在屏幕的最顶端 194 ...

    JAVA上百实例源码以及开源项目

    例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;...

    JAVA上百实例源码以及开源项目源代码

    例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;...

    minpmonitor_V1.6.0

    诗哲工控采取了全分布式的点对点的基于TCP的联网方案。每个监控平台既是服务器,采集数据并且向其他的监控系统发布监控数据;同时也是客户端,接入并接收 其他的监控系统的数据。联网的每一个监控平台都是对等的。...

    网络NC

    2 现存设计思想概述: 现在存在的可用的主要的P2P设计技术分为:集中式服务器技术,纯粹的对等点技术,分布式服务器技术 现在基本上大家都知道了P2P采用集中服务器虽然可以实现完整的P2P功能,但因为商业因素和集中...

    spring-boot-demo_xkcoding.tar.gz

    job(分布式定时任务)、swagger(API接口管理测试)、security(基于RBAC的动态权限认证)、SpringSession(Session共享)、Zookeeper(结合AOP实现分布式锁)、RabbitMQ(消息队列)、Kafka(消息队列)、websocket(服务端推送...

    基于javatcpsocket通信的拆包和装包源码-alphabetweb:Vikingbays•AlphabetWeb:支持web应用开发,

    基于java tcp socket通信的拆包和装包源码 Vikingbays • AlphabetWeb 更多资料,请访问 : 。 AlphabetWeb希望提供更加专业的,更加高效的,更加方便的开发架构, AlphabetWeb是一个服务端开发框架,可用于搭建一个...

    spring boot集成demo大全.zip

    job(`分布式定时任务`)、swagger(`API接口管理测试`)、security(`基于RBAC的动态权限认证`)、SpringSession(`Session共享`)、Zookeeper(`结合AOP实现分布式锁`)、RabbitMQ(`消息队列`)、Kafka(`消息队列`)、...

    深入Java Servlet网络编程

    2 基于Java解决方案的特点 第2章 Java Servlet简介 2. 1 Servlet生命周期 2. 2 Java Servlet API简介 2. 3 处理表单和返回数据的实例 2. 4 错误处理和日志记录 2. 4. 1 Java中的异常处理机制 2. 4. 2 在Java...

    Java源码 SpringMVC Mybatis Shiro Bootstrap Rest Webservice

    日志管理:系统日志列表查询、在线查看、在线下载等 路线管理:集成百度地图API,提供线路查询管理功能 Druid Monitor(监控):集成阿里巴巴连接池,提供在线连接池监控程序,包括:数据源、SQL监控、URL监控...

    Spring Cloud Finchley SR2全套(集成Spring Gateway)

    ## 负载均衡配置都是由ribbon提供,语法如下 策略可以是系统默认也可以自己实现IRule,默认规则参考IRule及其实现类 &lt;客户端&gt;: ribbon: NFLoadBalancerRuleClassName: &lt;策略全限定路径&gt; 框架中包含了熔断器聚合监控...

    LuckyFrameWeb测试平台-其他

    LuckyFrame测试平台是一款免费开源的测试平台,最大的特点是全纬度覆盖了接口自动化、WEB UI自动化、APP自动化,...12、Bootstrap 小清新风格界面:整套Web系统基于Bootstrap风格,以及多种其下的插件,构建清爽界面。

    LuckyFrame测试平台-其他

    LuckyFrame测试平台是一款免费开源的测试平台,最大的特点...12、Bootstrap 小清新风格界面:整套Web系统基于Bootstrap风格,以及多种其下的插件,构建清爽界面。 13、更多...:还有更多自动化的创意,期待你的体验发现

Global site tag (gtag.js) - Google Analytics