SODBASE CEP学习进阶篇(二)续:日志采集之外的APM探针方法
2015-07-03 16:36
525 查看
CEP因其高效的规则管理能力和卓越的定制化能力,常作为服务监控或应用监控系统的核心。监控系统中,除了前文介绍的日志采集方法,还有一种APM探针的方法。APM探针和日志采集一样不需要修改原有系统,同时能够得到一些日志中不方便监测的数据。
本文示例基于Java探针。对其它开发语言如PHP、.Net C#、HTML、Objective C等构建的系统,探针原理类似。也是不改动原有系统的前提下,使用工具加一些监测代码。
下载SODBASE Studio。
(2)解压SODBASE Studio打开,导入apm.sod模型,作用就是把采集上来的监测数据屏幕打印输出。
在左侧模型列表中点击apm,在工作面板右键,点击测试运行。
(3)解压sodbase-dataadaptor-apm工程,导入Eclipse。打开com.example.apm包下的TimeCostTest.java,它是被监测程序。
Run As Run Configuration...配置VM Arguments,-javaagent:lib/apm.jar -Dpackagemonitored=com -Dcep_home=cep_home
示例的探针程序的源代码也在sodbase-dataadaptor-apm工程中,使用了Javassist工具来在线添加监测代码。Javassist几乎提供了编写探针用到的所有功能。
例如,添加新的方法和类、修改系统类(rt.jar中的类,当然要遵循Oracle Java的许可)、修改方法中的一部分(如打印异常堆栈传输到服务器)。使用之前建议读者参考Javassist的官方教程。
本文示例中用的是javaagent方式,在启动被监测的时候加启动参数。lib/apm.jar是探针程序 -Dpackagemonitored是要监测的包前缀,-Dcep_home是放置SODBASE CEP配置文件的目录。
另外,也可以在被监测程序运行过程中,通过进程ID来Attach。具体方法读者可参考Java Instrumentation相关文章。
(1)传送程序不能阻塞原来系统正常运行,因为需要是异步传输
(2)并不一定所有数据都要传送。选择需要的数据如执行时间超过1秒的数据,或者定时传送统计数据
为解决这两个挑战,我们在探针采集端用了一个嵌入式SODBASE CEP引擎,从而实现了
(1)异步传输
(2)通过cep_home/files/apmagent.xml的EPL语句来控制数据传输
示例中目前是全部数据传输。如传输时间超过1秒的数据,可将XML中SODSQL修改为
之前我们在“SODBASE CEP学习进阶篇(二):日志采集”一文直接用了SocketUtil类的API传输数据,这是因为flume一定程度上解决了上述两个挑战。如果想进一步升级,也建议采用本文嵌入式SODBASE CEP引擎方式。
SODBASE CEP用于轻松、高效实施数据监测、监控类、交易类、实时分析类项目
。EPL语法见SODSQL写法与示例。图形化建模请使用SODBASE
Studio。
本文示例基于Java探针。对其它开发语言如PHP、.Net C#、HTML、Objective C等构建的系统,探针原理类似。也是不改动原有系统的前提下,使用工具加一些监测代码。
1. 示例操作步骤
(1)下载(“数据采集示例”)sodbase-dataadaptor-apm工程,下载(“SODBASE Studio示例模型”)服务器端CEP模型apm.sod,下载SODBASE Studio。
(2)解压SODBASE Studio打开,导入apm.sod模型,作用就是把采集上来的监测数据屏幕打印输出。
在左侧模型列表中点击apm,在工作面板右键,点击测试运行。
(3)解压sodbase-dataadaptor-apm工程,导入Eclipse。打开com.example.apm包下的TimeCostTest.java,它是被监测程序。
Run As Run Configuration...配置VM Arguments,-javaagent:lib/apm.jar -Dpackagemonitored=com -Dcep_home=cep_home
2.4输出结果
在SODBASE Studio中可看到输出结果2. 工作原理
2.1 探针程序
APM探针的原理其实比较简单,主要因为现代编译解释虚拟机(JVM,.net framework等)已经提供了一项功能:在不影响原程序的同时,可以在线增加一些监测度量代码。示例的探针程序的源代码也在sodbase-dataadaptor-apm工程中,使用了Javassist工具来在线添加监测代码。Javassist几乎提供了编写探针用到的所有功能。
例如,添加新的方法和类、修改系统类(rt.jar中的类,当然要遵循Oracle Java的许可)、修改方法中的一部分(如打印异常堆栈传输到服务器)。使用之前建议读者参考Javassist的官方教程。
本文示例中用的是javaagent方式,在启动被监测的时候加启动参数。lib/apm.jar是探针程序 -Dpackagemonitored是要监测的包前缀,-Dcep_home是放置SODBASE CEP配置文件的目录。
另外,也可以在被监测程序运行过程中,通过进程ID来Attach。具体方法读者可参考Java Instrumentation相关文章。
2.2 传送数据到监测服务器
传送数据到监测服务器有两个挑战(1)传送程序不能阻塞原来系统正常运行,因为需要是异步传输
(2)并不一定所有数据都要传送。选择需要的数据如执行时间超过1秒的数据,或者定时传送统计数据
为解决这两个挑战,我们在探针采集端用了一个嵌入式SODBASE CEP引擎,从而实现了
(1)异步传输
(2)通过cep_home/files/apmagent.xml的EPL语句来控制数据传输
示例中目前是全部数据传输。如传输时间超过1秒的数据,可将XML中SODSQL修改为
CREATE QUERY apmagent SELECT * FROM T1:collectdata PATTERN T1 WHERE T1.timecost>1000 WITHIN 0EPL写法请参考类流式计算中的类SQL语言EPL一文。
之前我们在“SODBASE CEP学习进阶篇(二):日志采集”一文直接用了SocketUtil类的API传输数据,这是因为flume一定程度上解决了上述两个挑战。如果想进一步升级,也建议采用本文嵌入式SODBASE CEP引擎方式。
2.3 图形展示和报表
如果需要图形展示,可以参考SODBASE View中的RESTful接口,或者也可以将数据输出入库(包括磁盘库或memory库),用iReport等工具生成报表。2.4 APM产品
目前有不少APM厂商,主要是两类。一类是云监测,用户的数据传到APM厂商的服务器上去。云监测服务器端比较庞大,不适宜迁移到企业内部,但是使用和计价都比较灵活。另一类是独立APM产品,适合放在企业内部。SODBASE CEP既可以搭建云监测平台,也可以做独立APM产品。相对来说,SODBASE CEP尤其合适监测平台放置在企业内部的场合,满足易定制、易维护的需求。SODBASE CEP用于轻松、高效实施数据监测、监控类、交易类、实时分析类项目
。EPL语法见SODSQL写法与示例。图形化建模请使用SODBASE
Studio。
相关文章推荐
- 执行 npm run update-webdriver 提示文件不能获取错误
- 产品经理的三部曲:当前版本、下个版本、需求池
- 产品经理学习总结之技术和设计篇
- RPM命令详解(安装、升级、卸载)
- oneapm试用
- 产品经理如何看待用户界面体验设计,如何做好手机客户端的用户体验标准
- npm常用命令(转)
- depmod: ERROR: could not open directory /lib/modules/ 解决方法
- RPM查询安装包
- RPM查询安装包
- RPM查询安装包
- RPM查询安装包
- RPM查询安装包
- RPM查询安装包
- RPM查询安装包
- RPM查询安装包
- RPM查询安装包
- RPM查询安装包
- RPM查询安装包
- RPM查询安装包