博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Kieker(AspectJ)监控控制台程序
阅读量:7050 次
发布时间:2019-06-28

本文共 2095 字,大约阅读时间需要 6 分钟。

这两天想比较下到底AspectJ和ASM进行instrumentation后的监控结果有什么不同。由于之前使用Kieker的时候,总是监控Web程序(如J2EE或WebLogic),实际上对怎么配置其监控最简单的控制台程序并不是很了解。今天又翻出来Kieker 1.4的userguide学习了一阵。

Kieker实际上自带一个非常简单Java控制台程序(Bookstore,这篇日志中主要内容在Kieker userguide的第5.1节),在我中,介绍了Kieker的最简单知识,这里就不赘述了。

Kieker的“”解压后,进入目录“D:\Kieker-1.4\kieker-1.4_binaries\kieker-1.4\examples\userguide\ch5--trace-monitoring-aspectj”。首先,和一样,将"kieker-1.4"下"dist"文件夹下的"kieker-1.4.jar"和"lib"文件夹下的"aspectjweaver-1.6.11.jar"和"commons-logging-1.1.1.jar"三个jar包拷贝进该目录下的“lib”文件夹中;

其次,创建“build”文件夹,将文件夹“META-INF”拷贝进该“build”文件夹;

第三,运行命令(编译Bookstore的源代码):

javac -classpath lib\kieker-1.4.jar;lib\commons-logging-1.1.1.jar src\bookstoreTracing\*java -d build

然后运行(运行已经编译好的Bookstore字节码文件):

java -javaagent:lib\aspectjweaver-1.6.11.jar -classpath build\;lib\kieker-1.4.jar;lib\commons-logging-1.1.1.jar bookstoreTracing.BookstoreStarter

就可以看到Kieker运行的信息,运行完之后就可以得到如下的监控数据:

$1;1331019696273374630;1;bookstoreTracing.Catalog.getBook(boolean);N/A;7922535431986479105;1331019696270729090;1331019696273356785;ibm;1;1

具体监控数据的位置,可以在Kieker运行时的控制台输出中看到。

另外,这里再总结一下aop.xml文件两个需要注意的问题,首先,应该注意aop.xml文件的位置,据userguide中介绍:“The aop.xml must be located in a META-INF/ directory in the classpath——in this case the build/ directory.”

其次,aop.xml文件的aspect name字段用于制定monitoring probe(监控探针)的类型,Kieker支持4种类型的探针,如下所示:

如果使用Annotation类型的探针,那么源代码中包含

@OperationExecutionMonitoringProbe

的方法将被监控,而带有Servlet后缀的类型,“additionally store a session identier within the OperationExecutionRecord.”(这句话我不是特别清楚)

对应的,OperationExecutionAspectFull类型指定了所有包含在include字段中的方法都将被监控,当选择这种类型的探针时,源代码中的

@OperationExecutionMonitoringProbe

标记将自动被忽略。

使用上述步骤,基本可以实现对所有Java控制台程序的监控,但是经过尝试,如果在Eclipse中重复上述过程(即使将classpath之类的都设置好),运行时也会报错:

Cannot register non aspect: kieker$monitoring$probe$aspectJ$operationExecution$OperationExecutionAspectFull , kieker.monitoring.probe.aspectJ.operationExecution.OperationExecutionAspectFull

原因也很简单,因为编译过程中没有使用Kieker的jar包,如果在Eclipse中设置编译时的classpath,则上述问题可以解决。(之前都是默认Eclipse自动编译的,所以不太清楚怎么设置,不过应该很简单。)

转载于:https://www.cnblogs.com/quyu/archive/2012/03/06/2381802.html

你可能感兴趣的文章
1.文件重命名工具
查看>>
【java】json格式解析
查看>>
4_1 wp8数据绑定与独立存储空间[wp8特色开发与编程技巧]
查看>>
Linux开始结束ping命令
查看>>
openfire invalid sid 404
查看>>
开源一款私藏Management Studio插件,ProjkyAddin,送给所有使用SQLServer的园友们
查看>>
jQuery判断checkbox是否选中的3种方法
查看>>
在sublime Text 3上编写并运行java程序
查看>>
LinkedList源码分析
查看>>
【算法介绍】哈希排序算法
查看>>
js数组操作(增、删、改、查)
查看>>
UpdatePanel and JQuery Plugin
查看>>
centos5.7下的kdump
查看>>
[JavaEE笔记]Cookie
查看>>
【HDOJ】1987 Decoding
查看>>
ELK+Filebeat (1)
查看>>
leetcode 443. String Compression
查看>>
在没联网环境下,启动tomcat出错
查看>>
关于Git bash-127.0.0.7:8888拒绝访问的小问题--环境变量
查看>>
Java EE(七)
查看>>