Jwebap User Guide 配置网站日志追踪

 

Jwebap User Guide

 

leadyu ([email protected])

1       介绍

Jwebap是一个用于java web application profiler工具。 它不采用JVMPI提供的特性实现监控,是一个纯粹的JAVA应用,不依赖于OSJVMJDK1.4以上用户都可以使用。

它的目的是希望能够安全高效的部署于生产以及测试应用系统,及时地发现应用系统中存在的性能瓶颈,以及为一些动态性很高难于调试和维护的应用系统提供帮助。目前它主要致力于性能分析和优化方面,以后可能往其他监控方面发展(比如业务数据的监控)。因此,组件提供基本的SDK,提供基本的分析功能,不断丰富的分析功能可以通过统一的方式以插件的形式加入Jwebap组件。

出于这些目的,作者心目中理想的监控分析工具应该具备下面几个特性:

1.1 高效

组件本身必须具有很高的执行效率,对应用系统的运行带来的负担非常微小。其实就目前来说,一般的profiler工具在一定的组件功能复杂度的情况下,需要处理非常庞大的数据量,做到真正的高效率其实是一个困难度很高的挑战,所以,一方面组件本身要足够健壮和高效,另一方面对于组件可以监控的范围也要可以配置。(毕竟我们进行性能分析并不一定需要了解应用的全部执行细节)

1.2 分析功能丰富

如果只是把庞大的应用系统运行细节暴露出来,已经远远不能满足现有的需要,根据不同视角的分析与统计变得非常必要。并且分析的功能能够不断丰富。(例如对于数据库的监控插件提供topMethod,topSQL之类的分析报表,甚至是动态的图形报表)

1.3 跨平台

基于JAVA的组件难道还要考虑跨平台的问题吗?回答是当然需要,起码对于profiler工具来说。目前不少profiler通过jvmpi以及一些本地化接口实现对于JVM内部运行细节的监控。而理想的监控工具应该是纯JAVA的,不依赖JVMOS,否则组件的生命会变得脆弱,使用的时候也会很麻烦,我希望组件不但可以使用在测试环境,同样无缝的部署与生产应用系统。难道让生产系统应监控工具而改变OSJVM吗?这明显不大可能。

1.4 部署简易

希望是非常的方便,通过对动态类加载,字节码注入等技术的运用对外提供简单的部署方式,我希望就是通过几行的配置文件就能完成部署。

1.5 可扩展性

前面提到,组件应该能够提供丰富的分析功能,并且这种功能可以通过插件的方式不断集成于组件之中以满足不同的需要。所以,组件的实现中信息的采集和信息的分析必须是解耦的,一方面组件提供高效稳定的信息采集方式,另一方面组件提供基于插件的框架,能够不断扩展分析功能以满足需要,甚至这些分析功能不仅仅是性能方面,也包括业务数据的监控。

2       什么是轨迹

在组件的设计中包含一个重要的概念——轨迹。那么什么是轨迹?

l       轨迹的定义

        在系统中,任何程序的执行都有可能留下轨迹(数据库的调用会留下SQL轨迹,事务的轨迹,http请求会留下访问的轨迹,程序的方法执行也可以留下轨迹)。

        轨迹包含了对性能分析有用的信息(比如上下文的信息,线程堆栈的信息,执行时间的信息等等),轨迹之间存在关系,比如数据库事务的轨迹和SQL的轨迹,http请求和类方法执行的轨迹之间都有一定的关系。在性能分析中,我们可能存在几个关注点,比如数据库,远程调用,方法调用,组件等等,通过这些关注点相关程序留下的轨迹,我们进行性能分析。

l       轨迹的管理

       轨迹是错综复杂的,零碎地,关系模糊的,所以要真正有助于性能分析,还需要相应的支持。所以,轨迹又需要生命周期管理,和统计管理。

       轨迹的生命周期管理:轨迹创建,运行,销毁,钝化的各个状态。通过分析工具把有问题的轨迹(比如执行时间过长)找到,通过视图暴露出来。

       轨迹的统计:不同关注点的轨迹,存在不同的统计逻辑,通过不同的分析插件,展现给性能分析者。

l       轨迹的注入

      轨迹不会自己产生,我们也不可能修改系统的代码。而我又不想像其他的一些分析工具一样,通过本地接口获取JVM的状态从而进行统计(那样就得依赖JVM,依赖OS)。而现在有一个不错的办法摆在我们的面前,那就是采用ClassWorking。目前,我已经实现了一个ClassEnhancer以及一个PackageEnhancer,它能够对指定的类和包进行注入。

l       轨迹的生命周期

3       Jwebap插件

Jwebap在模型上采用了插件的设计,从而达到对轨迹的收集管理,和分析统计的解耦。模型如下图:

分析Component可以通过jwebap.xml定义,也可以动态的在RuntimeContext中注册。如下:

Jwebap分为两大部分,Jwebap CoreJwebap Component

Jwebap Core实现了对Component的管理,轨迹的收集,生命周期,轨迹的磁盘钝化等等,另外,还提供了ByteCode包以实现对代码的注入,集成了模板引擎以实现视图。

Jwebap Component实现各种各样的分析功能,以插件的方式集成于Jwebap,当不需要时,随时可以去掉。

4       Class-Working

Class-WorkingJwebap里面是一个很重要的基础构件。轨迹的收集,目前都是通过字节码操作注入到目标类里面的。

Jwebap默认实现了基于ASM-2.1asm.objectweb.orgClass-Working构件。结合ASM的访问者模式,Jwebap的注入模型如下:

5       轨迹钝化

对于不活动的轨迹(参照轨迹生命周期),轨迹容器按照一定的算法钝化轨迹到存储设备(可能是磁盘,可能是数据库)。钝化的轨迹文件用作一些特定的统计分析。

也可以日后开发客户端分析工具,进行全量信息的分析。

6       钝化文件分析

客户端钝化文件分析工具。进行全量的数据分析。

7       模版引擎

为了部署方便,Jwebap开发Web统计视图,通过集成第三方的模版引擎实现。在集成层,Jwebap实现客户端MVC框架,模版引擎实现模版语言与容器的实现。

Jwebap通过Servlet作为输出的控制器。

 

 

 

 

 

 

 

 

 

8       数据库监控插件

DBComponent包含两个分析器,FrequencyAnalyserTimeFilterAnalyserDBComponent在启动时通过对数据库驱动或者具体的应用获取Connection的类的注入,代理Connection实现分析。

9       方法监控插件

10             Http请求监控插件

11             部署

11.1Step one

Jwebap_*.*.*_*.jar放到应用的ClassPath下。同时把依赖的jar包也放到应用的ClassPath下(参照13依赖性说明)。

11.2Step two

jwebap.xml放到工程web module任意目录中。

 

11.3Step three

修改配置文件:

l       jwebap.xml

可以根据需要配置相应的Component,目前实现的Component有:

u     HttpComponent

trace-filter-active-time: (ms)超过该毫秒数的执行轨迹将被记录

trace-max-size: 最大记录的超时轨迹数

u     MethodComponent

trace-filter-active-time: (ms)超过该毫秒数的执行轨迹将被记录

trace-max-size: 最大记录的超时轨迹数

detect-clazzs: 要监控的类,可以配置包名和类名,test.*;test.Test,但不支持通配符,多个类名之间通过;分隔

u     JdbcComponent

trace-filter-active-time: (ms)超过该毫秒数的执行轨迹将被记录

trace-max-size:最大记录的超时轨迹数

connection-listener: Connection监听器,可配置多个,;分隔

driver-clazzs:

本地连接池:可以采取配置驱动的方式,比如应用采用oracle,mysql两种数据库,驱动分别是oracle.jdbc.driver.OracleDriver,

com.mysql.jdbc.Driver,那么在DBComponent配置项中配置

driver-clazzs=oracle.jdbc.driver.OracleDriver; com.mysql.jdbc.Driver

 

jndi远程数据源:可以配置Application中用于获取连接的类作为驱动(比如       com.ConnectionManager)Jweabp启动时对这些驱动类进行注入,使得所有该类方法返回的Connection具有监控的功能。

l       web.xml

增加全局参数config,指向jwebap.xml的位置

<context-param>

<param-name>config</param-name>

<param-value>/WEB-INF/jwebap.xml</param-value>

</context-param>

配置Jwebap启动类

注意:配置在所有listener之前,以保证Jwebap最先启动,这点对于类增强很重要。

 

<listener>      

<listener-class>org.jwebap.core.JwebapListener</listener-class>      

</listener>

配置HttpComponent的过滤器。

<filter>

<filter-name>PageDetectFilter</filter-name>

<filter-class>org.jwebap.plugin.http.DetectFilter</filter-class>

<init-param>

       <param-name>excludeUrls</param-name>

       <param-value>/detect;/detect/*;*.js;*.jpg;*.htm;*.html;*.gif;*.png;*.css;*.swf</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>PageDetectFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

配置统计视图Servlet

<servlet>

<servlet-name>detect</servlet-name>

<servlet-class>org.jwebap.ui.controler.JwebapServlet</servlet-class>      

</servlet>

<servlet-mapping>

<servlet-name>detect</servlet-name>

<url-pattern>/detect/*</url-pattern>

</servlet-mapping>

12             ScreenShot

12.1    Http Traces

12.2    Method Traces

 

12.3    Jdbc Traces

13             依赖性说明

1)       JDK1.4或以上版本

2)       log4j-1.2.8.jar

3)       commons-digester-1.7.jar

4)       commons-beanutils.jar

5)       commontemplate-0.8.1.jar

6)       commons-logging.jar

配置文件有:

1)       Jwebap.xml

14             licence声明

Jwebap采用Apache Licence,内部采用了ASM-2.1RC组件,出于ASM-2.1RC兼容性的考虑,把ASM-2.1RC集成到了组件内部,特此声明。

 

通过网站的监视,可以查看到网站有哪些链接没有关闭,可以追踪网站被访问的记录等信息。 

猜你喜欢

转载自baobeituping.iteye.com/blog/629793