一种日志采集方法、装置及日志服务系统的制作方法_3

文档序号:9524032阅读:来源:国知局
[0072]Var8.addParamName (0,“service”);
[0073]Var8.addParam(l, var2);
[0074]Var8.addParamName (1,“ logType”);
[0075]Var8.addParam(2, var3);
[0076]Var8.addParamName (2,“ logObj,,);
[0077]RuntimeContext.writeInterceptParam2 ( “$service,,,var4, var5, var6, var7, var8)
[0078]//业务代码
[0079]send (service, logType, logObj);
[0080]}
[0081]步骤105:加载所述新的类文件进行日志采集。
[0082]优选的,JVM可以将新的类文件进行编译,形成JVM可识别的二进制代码,执行该二进制代码实现日志信息的采集。
[0083]进一步的,为了避免在需要进行日志采集的java应用程序上写入配置参数,本发明实施例,如图2所示,JVM中还可以设置JVM TI,并根据JVM TI生成JVM TI代理(Agent),然后,将步骤102-104的过程封装在一个函数内,由JVM TI代理(Agent)在监测到应用模块中需要进行日志采集的类文件被加载时,通过回调函数调用该函数,执行上述日志采集过程中的步骤102-104 ;具体如下:
[0084]JVM加载基于Java虚拟机工具接口(Java Virtual Machine Tool Interface, JVMTI)的动态链接库文件,根据该动态链接库文件生成JVM TI Agnet,将封装有步骤102-104的函数在JVM TI Agnet中进行注册,当JVM ΤΙ监测到类文件被加载时,JVM TI Agnet通过回调函数调用该函数。
[0085]下面以一个实例详细说明其过程:
[0086]在JVM 上配置-javaagent:/app/dev/hlog-agent_0.1.jar 通知 JVM 进行 JVM ΤΙ包的加载,以代理日志采集工作,其中,在代理过程中,对日志采集进行相应配置,完整参数如下:
[0087]-javaagent: /app/dev/hlog-agent-0.1.jar# 加载 JVM TI 包
[0088]-DhlogDomain = CRMSERV
[0089]-DhlogServerAlias = CRMSERV
[0090]-DhlogLevel = none
[0091]-DhlogSaveffeaveClass = no
[0092]-noverify
[0093]进一步的,由于现有技术中通常将采集到的日志信息实时传输至服务后台进行日志应用,此时,若日志信息处于大并发和大数据量的情况下,则经常会出现如ACTIVEMQ队列不工作的性能问题,因此,为了解决该问题,在本发明实施例图1所示的日志采集系统下,JVM在采集到日志信息后,还可以包括如下步骤:
[0094]通过异步传输的方式将采集到的日志信息发送至Kafka集群中的消息队列中,以便于日志应用装置读取所述Kafka集群消息队列中的日志消息进行消费。
[0095]由上可知,本发明实施例提供一种日志采集方法,所述日志采集方法由日志采集装置中的JVM执行,JVM先加载java应用程序的类文件,当确定所述类文件在日志采集的监控范围内,且所述类文件的所有类方法存在需进行日志采集的类方法时,将日志采集代码植入类方法中,形成新的类文件,重新加载新的类文件进行日志采集。在本发明的日志采集过程中,不需要事先引进第三组件,而是在需要进行日志采集的地方才加载日志采集代码,实现零耦合的日志采集文件的动态加载,避免了现有日志采集过程中,需引入第三方组件导致引用冲突的问题。
[0096]另一方面,图4为本发明实施例提供的日志采集装置10的结构图,用于执行上述日志采集方法,如图4所示,所述日志采集装置10可以包括:
[0097]类加载器1011:用于加载java应用程序的类文件。
[0098]其中,java应用程序的类文件存储在日志采集装置的硬件层内存中,即硬件存储器中。
[0099]可选的,类加载器1011,可以用于从日志采集装置的硬件层内存的磁盘目录或Jar包中将java应用程序的类文件加载到JVM的内存中。
[0100]判断单元1012:用于判断所述类文件是否在日志采集的监控范围内。
[0101]解析单元1013:用于当所述判断单元1012确定所述类文件在日志采集的监控范围内时,获取所述类文件的所有类方法,确定所述所有类方法中是否存在需进行日志采集的类方法。
[0102]代码植入单元1014:用于当所述解析单元1013确定所述所有类文件中存在需进行日志采集的类方式时,在需进行日志采集的类方法中植入日志采集代码,形成新的类文件。
[0103]所述类加载单元1011,还用于加载所述新的类文件进行日志采集。
[0104]具体的,所述判断单元1012,可以用于:
[0105]根据所述类文件的属性信息、以及预设的待进行日志采集的类文件的属性信息的集合,判断所述类文件是否在日志采集的监控范围内;
[0106]例如:可查询预设的待进行日志采集的类文件的属性信息的集合,若所述类文件的属性信息包含在所述集合中,则表示所述类文件为需要进行日志采集的文件,在日志采集的监控范围内;若所述类文件的属性信息未包含在所述集合中,则表示所述类文件不需要进行日志采集,不在日志采集的监控范围内。
[0107]其中,所述属性信息可以包含:类文件所在jar包的包名、和/或类文件的存储路径。
[0108]具体的,解析单元1013,可以用于:
[0109]从类方法对应的指令代码中查找是否包含与日志采集相关的指令代码,若包含,则确定所述类方法为需进行日志采集的类方法;若不包含,则确定所述类方法不是需进行日志采集的类方法。
[0110]具体的,代码植入单元1014可以用于:
[0111]当存在需要进行日志采集的类方法时,产生符合预先配置的日志采集类型的代码,将产生的代码植入所述类方法中,形成新的类文件。
[0112]需要说明的是,上述单元执行的过程可以由处理器通过调用具有相同的功能程序代码来实现。
[0113]进一步的,为了避免在需要进行日志采集的java应用程序上写入配置参数,本发明实施例,如图4所示,在日志采集装置10中可以设置JVM TI1015、以及JVM TI的代理模块 1016 ;
[0114]JVM TI1015,用于监测应用模块中是否有类文件被加载;
[0115]JVM TI的代理模块1016,用于当JVM TI1015监测到应用模块中有类文件被加载时,通过回调函数调用判断单元1012、解析单元1013、以及代码植入单元1014的执行相应的功能。
[0116]其中,应用模块,用于存储日志采集数据的目标对象。
[0117]具体的,可以将执行判断单元1012、解析单元1013、以及代码植入单元1014的功能的程序代码封装在一个函数内,将该函数在代理模块1016中进行注册,当JVM TI1015监测到有类文件被加载时,通过回调函数调用该函数,即相当于执行判断单元1012、解析单元1013、以及代码植入单元1014所具有的功能。
[0118]进一
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1