CN114328088A - 一种采集数据的方法、装置及电子设备 - Google Patents
一种采集数据的方法、装置及电子设备 Download PDFInfo
- Publication number
- CN114328088A CN114328088A CN202111500975.7A CN202111500975A CN114328088A CN 114328088 A CN114328088 A CN 114328088A CN 202111500975 A CN202111500975 A CN 202111500975A CN 114328088 A CN114328088 A CN 114328088A
- Authority
- CN
- China
- Prior art keywords
- target
- application
- function
- class
- bytecode
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 62
- 239000000523 sample Substances 0.000 claims abstract description 81
- 230000006870 function Effects 0.000 claims description 162
- 238000004590 computer program Methods 0.000 claims description 14
- 238000003860 storage Methods 0.000 claims description 14
- 238000012986 modification Methods 0.000 claims description 10
- 230000004048 modification Effects 0.000 claims description 10
- 230000000007 visual effect Effects 0.000 claims description 4
- 238000012544 monitoring process Methods 0.000 abstract description 18
- 238000005728 strengthening Methods 0.000 abstract 1
- 238000013461 design Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 13
- 238000012545 processing Methods 0.000 description 6
- 230000002787 reinforcement Effects 0.000 description 5
- 230000002708 enhancing effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000005070 sampling Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003014 reinforcing effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本申请公开一种采集数据的方法、装置及电子设备,该方法包括首先通过对APM中Java探针的目标类的字节码进行加强,并在目标应用中添加Java探针的启动参数,然后在目标应用启动时,确定目标应用的目标类,通过Java探针调用目标类中的回调函数,对目标类中的字节码进行修改,基于修改后的字节码获取目标应用的应用接口的请求体和返回体。基于上述方法解决当前APM工具无法采集应用接口的请求体和返回体的问题,实现业务数据与性能指标之间的关联,提高APM工具的监控能力,有效减少通过APM工具采集请求体和返回体所花费的时间成本和人力资源。
Description
技术领域
本申请涉及Java技术领域,尤其涉及一种采集数据的方法、装置及电子设备。
背景技术
随着JAVA(计算机编程语言)性能优化工具APM(应用性能管理,ApplicationPerformance Management)的普及,APM可以用于采集应用的性能数据,该性能数据可以作为评判该应用性能的指标。
虽然APM具有较好的性能数据采集能力,但APM采集业务数据的能力较差。具体来说,APM只能采集某一应用的应用接口路径上的字符串请求参数和接口返回码,无法采集该应用接口的请求体和返回体。
当前,为了加强APM采集应用接口的请求体和返回体的能力,采用对APM的源码进行二次开发的方式。具体为开发人员下载APM的源码,对源码作代码层级的修改,然后将修改后的代码作再编译和再部署。
但是,每当APM的源码定期更新或升级,便需要开发人员对更新后的源码重新进行二次开发,这将带来大量时间成本、人力资源的浪费。
发明内容
本申请提供一种采集的方法、装置及电子设备,用以采集应用接口的请求体和返回体。
第一方面,本申请提供了一种采集数据的方法,所述方法包括:
在目标应用启动时,确定所述目标应用的目标类,其中,所述目标类为注册了回调函数的类文件,其中,所述回调函数用于修改所述目标类中的字节码;
通过调用所述目标类中的所述回调函数,对所述目标类中的字节码进行修改;
基于修改后的字节码获取所述目标应用的应用接口的请求体和返回体。
在一种可能的设计中,所述在目标应用启动时,确定所述目标应用的目标类,包括:
在启动Java虚拟机JVM之后,通过Java探针加载与目标应用相关的插件,其中,所述插件用于标识待修改的目标类;
在所述目标应用启动时,通过所述JVM加载所述目标应用中的类文件,并确定当前加载的类文件是否为插件标识的目标类;
若是,则确定当前加载的类文件为所述目标类;
若否,则继续加载下一个类文件。
在一种可能的设计中,所述对所述目标类中的字节码进行修改,包括:
确定所述目标类中的目标字节码,其中,所述目标字节码为所述目标类中保持不变的字节码;
在所述目标字节码的首部添加***的before函数,在所述目标字节码的尾部添加***的after函数;
基于所述before函数与所述after函数,修改所述目标类中的字节码。
在一种可能的设计中,所述在所述目标字节码的首部首尾添加***的before函数,在所述目标字节码的尾部添加***的after函数,包括:
在添加***的before函数时,确定所述before函数中包含注册有回调函数的子目标类;
在添加***的after函数时,确定所述after函数中包含注册有回调函数的子目标类;
通过调用所述子目标类中的所述回调函数,在所述子目标类中添加过滤器的Filter函数,通过所述Filter函数修改所述子目标类中的字节码。
在一种可能的设计中,所述基于所述before函数与所述after函数,修改所述目标类中的字节码,包括:
根据所述before函数,在所述目标类中的目标字节码的首端添加所述目标应用的应用接口的请求体和返回体的***字符码;
根据所述after函数,在所述目标类中的目标字节码的尾端添加所述目标应用的应用接口的请求体和返回体的***字符码。
在一种可能的设计中,所述基于修改后的字节码获取所述目标应用的应用接口的请求体和返回体,包括:
在加载修改后的字节码之后,继续启动所述目标应用,并执行修改后的字节码;
在执行修改后的字节码之后,获取所述目标应用的应用接口的请求体和返回体。
在一种可能的设计中,在所述基于修改后的字节码获取所述目标应用的应用接口的请求体和返回体之后,还包括:
将所述请求体和返回体发送至前端界面进行可视化展示。
通过上述方法,不仅可以解决通过APM工具难以采集目标应用的应用接口的请求体和返回体的问题,还可以实现在采集目标应用性能数据的同时,采集应用接口的请求体和返回体这种业务数据,实现自动关联目标应用的性能指标和业务数据,打通性能指标和业务数据之间的独立性的功能,使得通过APM工具对目标应用监测更加全面。
进一步,还能够真实反映业务数据在实际应用中的流转情况,有利于提高性能瓶颈解决和定位问题分析的精准性,为后期的业务建模提供重要的数据支撑。
第二方面,本申请提供了一种采集数据的装置,所述装置包括:
确定模块,在目标应用启动时,确定所述目标应用的目标类,其中,所述目标类为注册了回调函数的类文件,其中,所述回调函数用于修改所述目标类中的字节码;
修改模块,通过调用所述目标类中的所述回调函数,对所述目标类中的字节码进行修改;
获取模块,基于修改后的字节码获取所述目标应用的应用接口的请求体和返回体。
在一种可能的设计中,所述确定模块,具体用于在启动Java虚拟机JVM之后,通过Java探针加载与目标应用相关的插件,其中,所述插件用于标识待修改的目标类;在所述目标应用启动时,通过所述JVM加载所述目标应用中的类文件,并确定当前加载的类文件是否为插件标识的目标类;若是,则确定当前加载的类文件为所述目标类;若否,则继续加载下一个类文件。
在一种可能的设计中,所述修改模块,具体用于确定所述目标类中的目标字节码,其中,所述目标字节码为所述目标类中保持不变的字节码;在所述目标字节码的首部添加***的before函数,在所述目标字节码的尾部添加***的after函数;基于所述before函数与所述after函数,修改所述目标类中的字节码。
在一种可能的设计中,所述修改模块,具体用于在添加***的before函数时,确定所述before函数中包含注册有回调函数的子目标类;在添加***的after函数时,确定所述after函数中包含注册有回调函数的子目标类;通过调用所述子目标类中的所述回调函数,在所述子目标类中添加过滤器的Filter函数,通过所述Filter函数修改所述子目标类中的字节码。
在一种可能的设计中,所述修改模块,具体用于根据所述before函数,在所述目标类中的目标字节码的首端添加所述目标应用的应用接口的请求体和返回体的***字符码;根据所述after函数,在所述目标类中的目标字节码的尾端添加所述目标应用的应用接口的请求体和返回体的***字符码。
在一种可能的设计中,在获取模块之后,还用于在加载修改后的字节码之后,继续启动所述目标应用,并执行修改后的字节码;在执行修改后的字节码之后,获取所述目标应用的应用接口的请求体和返回体。
第三方面,本申请提供了一种电子设备,所述电子设备包括:
存储器,用于存放计算机程序;
处理器,用于执行所述存储器上所存放的计算机程序时,实现上述的一种采集数据的方法步骤。
第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述的一种采集数据的方法步骤。
上述第二方面至第四方面中的各个方面以及各个方面可能达到的技术效果请参照上述针对第一方面或第一方面中的各种可能方案可以达到的技术效果说明,这里不再重复赘述。
附图说明
图1为本申请提供的一种可能的应用场景的结构图;
图2为本申请提供的一种采集数据的方法的流程图;
图3为本申请提供的一种采集数据的装置的示意图;
图4为本申请提供的一种电子设备的结构的示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。方法实施例中的具体操作方法也可以应用于装置实施例或***实施例中。需要说明的是,在本申请的描述中“多个”理解为“至少两个”。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。A与B连接,可以表示:A与B直接连接和A与B通过C连接这两种情况。另外,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
本申请发明人经研究发现,当前在对应用进行监控时,通过APM工具无法直接采集应用接口的请求体和返回体,导致分析应用接口的准确率低。具体来说,在实际应用场景中,当实际启动的应用出现问题时,由于缺乏应用接口的请求体和返回体,无法定位异常接口,也无法确定受影响的业务数据,更无法获取某一笔具体业务在***链路上的流转路径,例如,某一笔具体业务在执行业务时所经过链路的具体***、具体接口等。
需要说明的是,发明人研究发现的内容不作为现有技术,其本质上属于本申请的一部分。
为解决APM工具无法采集应用接口的请求体和返回体的问题,本申请提供了一种采集数据的方法、装置及电子设备。本申请的技术方案为,通过APM增强工具对APM工具中的字节码进行修改,在目标应用启动时,确定目标应用中注册了回调函数的目标类,然后通过APM工具调用回调函数,对目标类中的字节码进行修改,基于修改后的字节码获取目标应用的应用接口的请求体和返回体。
本申请实施例所提供的技术方案,相比现有技术,无需每次对APM工具中的源代码进行二次开发,便可以得到请求体和返回体,有效节约通过APM工具监控目标应用所花费的时间成本和人力资源,便于后期对目标应用以及APM工具的使用和维护。
需要说明的是,在本申请实施例中,APM增强工具为对APM工具中的字节码进行修改的工具,通过APM增强工具修改APM工具的字节码以采集应用接口的请求体和返回体,为一种可能的实现方式,还包括在不修改APM工具的源代码的前提下可以实现的其他功能,例如,控制APM工具采集数据的触发条件、实现APM工具对目标应用监控过程中调整采样率等。
本申请实施例提供的技术方案可以应用于Java应用的性能监控,尤其涉及Java性能优化工具APM。此外,本申请实施例描述的应用场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着Java应用的性能监控的方式增多、Java性能优化工具的更新和迭代、以及APM工具中源代码的修改和升级,本申请实施例提供的技术方案对于类似的技术方案,同样适用。
参阅图1,本申请实施例提供了一种适用的应用场景的结构图。
如图1所示的应用场景,为基于APM增强工具通过APM工具采集应用接口的请求体和返回体的应用场景的结构图。该应用场景可以包括Java加强探针模块110、Java探针模块120、数据模块130、存储模块140、展示模块150。
为了更加清晰说明本申请所提供的应用场景,下面以Pinpoint这一APM工具为例,对图1所示的应用场景进行具体阐述。在这里,Pinpoint并不构成对本申请实施例提供的应用场景的限定,本领域普通技术人员可知,本申请实施例提供的应用场景对于其他APM工具同样适用。
Java加强探针模块110,具体包括Pinpoint加强探针(Pinpoint Plus Agent,Java探针),Pinpoint加强探针将与目标应用一起启动,并和目标应用共享JVM(Java虚拟机)。Pinpoint加强探针可以用于增强Java探针模块120中Pinpoint探针的采集功能,使得Pinpoint探针可以用于采集应用接口的请求体和返回体。另外,Pinpoin加强探针还可以适用于对Pinpoint探针的其他功能进行增强,例如,加强Pinpoint探针调整采样率的功能、增加Pinpoint探针设定采集数据的触发条件的功能等。在实际应用中,Pinpoint加强探针还将被部署配置到目标应用中。
Java探针模块120,具体包括Pinpoint探针(Pinpoint Agent,Java探针),Pinpoint探针可以用于监控和采集目标应用的各种数据,Pinpoint探针将与目标应用一起启动,并和目标应用共享JVM。Pinpoint探针用于定期向数据模块130发送数据,比如,支持UDP(User Datagram Protocol,用户数据包协议)/TCP(Transmission Control Protocol,传输控制协议)和Thrift(接口描述语言和二进制通讯协议)的配置数据。并且Pinpoint探针还可以用于监控目标应用,采集目标应用的性能数据,进一步,基于Java加强探针模块110中的Pinpoint加强探针,Pinpoint探针还可以用于采集目标应用的性能数据,即应用接口的请求体和返回体。在实际应用中,Pinpoint探针还将被部署配置到目标应用中。
数据模块130,用于收集Java探针模块120发送的数据,并将该数据存储在存储模块140中。
存储模块140,具体包括HBase(分布式、面向列的开源数据库),HBase可以用于存储数据模块130接收的数据。
展示模块150,具体包括Pinpoint前端界面(Pinpoint Web UI),在这里,Pinpoint前端界面用于提取存储模块140中存储的数据,并将提取的数据用于在Pinpoint前端界面作可视化展示。
以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本申请实施例以及本申请实施例中的技术特征可以相互组合。
参阅图2所示,本申请实施例提供了一种采集数据的方法,具体流程如下:
在具体执行本申请实施例的步骤之前,还包括配置Pinpoint的启动环境,并在应用的启动参数中添加Pinpoint探针和Pinpoint加强探针,然后启动目标应用,在这里,目标应用为添加有Pinpoint探针启动参数和Pinpoint加强探针启动参数的应用。
具体来说,在配置Pinpoint的启动环境后和启动目标应用前,还包括启动Java虚拟机(JVM,Java Virtual Machine),JVM用于运行目标应用,在这里Pinpoint探针、Pinpoint加强探针还将跟随JVM启动而启动。
Pinpoint探针具体用于采集目标应用的数据,Pinpoint探针的采集方式可以用于在不改变目标应用的基础上,采集目标应用的数据,例如,目前Pinpoint探针可以采集目标应用的性能数据等。
Pinpoint加强探针具体用于加强Pinpoint探针的采集功能,Pinpoint加强探针的加强功能可以在不改变Pinpoint工具的基础上,使得Pinpoint探针能够采集目标应用的更多数据,例如,采集目标应用的应用接口的请求体和返回体等。
进一步,在启动Pinpoint探针、Pinpoint加强探针后,Pinpoint探针还将加载目标目录下的所有插件,例如,Pinpoint探针加载plugin目录下的所有插件。
在Pinpoint探针加载插件的过程中,Pinpoint探针将调用一种预设方法,在这里,插件是根据预设方法来预设定目标类的。基于预设方法,可以确定目标应用中需要被修改的类文件,并且还可以确定该类文件是否注册了回调函数,在此将注册了回调函数的类文件作为目标类。
例如,Pinpoint探针每加载一个插件,Pinpoint探针便调用ProfilerPlugin.setup(ProfilerPluginSetupContext)方法,基于该方法可以确定需要被改变并且注册了TransformerCallback函数的目标类。
基于上述方法,在Pinpoint探针加载完目标目录下的所有插件后,启动目标应用。
步骤201:在目标应用启动时,确定所述目标应用的目标类;
在确定启动Pinpoint探针、Pinpoint加强探针后,启动目标应用,并加载目标应用的类文件。在加载类文件的过程中,可以基于插件确定当前加载的类文件是否为注册了回调函数的目标类:若是,则停止当前的加载操作;若否,则完成对当前类文件的加载并继续加载下一个类文件。
具体来说,目标类可以根据调用预设方法加载的插件来确定。回调函数可以用于修改目标类中的字节码,以采集该目标类对应目标应用的应用接口的请求体和返回体。
步骤202:通过调用所述目标类中的所述回调函数,对所述目标类中的字节码进行修改;
在确定目标类后,通过Pinpoint探针调用该目标类上回调函数对应的调用方法,并使用该回调函数对目标类中的字节码进行修改,实现采集应用接口的请求体和返回体的功能。
具体来说,确定在目标类中的字节码中保持不变的目标字节码,在目标字节码的首部添加before函数,在目标字节码的尾部添加after函数。在这里,before函数和after函数为回调函数对应的调用方法的函数,基于before函数可以在目标字节码的首部添加***,该***用于采集应用接口的请求体和返回体;基于after函数可以在目标字节码的尾部添加***,该***用于采集应用接口的请求体和返回体。
在本申请实施例中,通过before函数和after函数,采集应用接口的请求体和返回体是基于Pinpoint加强探针的引入来实现的。具体为基于Pinpoint加强探针对before函数和after函数中的类文件的字节码进行修改。下面以before函数为例对通过Pinpoint加强探针修改Pinpoint探针中的字节码作具体阐述,after函数与before函数的修改方式相同,在此不作过多阐述。
具体来说,before函数是一种Pinpoint探针为目标应用提供的方法,该方法用于实现目标应用的数据采集功能,并且它并不属于目标应用中的方法。在实际应用中,目标应用通过调用before函数,来实现before函数中的功能。因此,在Pinpoint探针的开发过程中,开发人员需要编写before函数的具体代码以实现相应的数据采集功能,例如编写一个实现功能的类文件。鉴于现目前Pinpoint探针可提供的before函数主要是采集目标应用的性能数据的方法,即无法采集应用接口的请求体和返回体。因此,为了避免开发人员对Pinpoint源代码作二次开发,节约人力资源和时间成本,本申请实施例提出通过Pinpoint加强探针,来对Pinpoint探针中before函数的采集功能进行加强。
为了便于对本申请实施例的理解,下面对Pinpoint探针中before函数,以及通过Pinpoint加强探针加强的before函数作具体阐述。
在本申请实施例中,Pinpoint探针的before函数中包含采集目标应用的性能数据的类文件,当确定该类文件上注册了Pinpoint加强探针的回调函数的调用方法后,在该类文件中的字节码首部添加上加强的before函数,并在该类文件中的字节码尾部添加上加强的after函数。在这里,加强的before函数和加强的after函数为Pinpoint加强探针中所提供的方法,基于加强的before函数和加强的after函数,可以在采集目标应用的性能数据的基础上,采集应用接口的请求体和返回体。
通过加强的before函数和加强的after函数可以实现在采集目标应用性能数据的同时采集应用接口的请求体和返回体这种业务数据,能够自动实现目标应用在运行过程中性能指标和业务数据的自动关联,打通性能指标和业务数据之间的独立性,使得对目标应用监控更加全面。应用上述方法,在实际应用中能够真实地反映业务数据的流转情况,进一步为解决性能瓶颈和分析定位问题提供更加精准的依据,为后期的业务建模提供数据支撑也具有十分重要的意义。
在一种可能的实施例中,还可以基于加强的before函数和加强的after函数,在Pinpoint探针的before函数中添加***Filter函数。Filter函数可以用于控制是否采集目标应用的性能数据或应用接口的请求体和返回体,例如,若目标应用的运行参数满足预设运行参数,则设定不采集;若目标应用的运行参数不满足预设运行参数,则设定采集。
需要说明的是,在这里的控制采集的判定条件可以根据实际应用情况来设定或人为设定,不局限于上述列举的情况,可以设定为控制只采集某一种数据或多种数据,并且在采集数据的种类上也并不局限于上述列举的数据。此外,上述所提供的技术方案的思想也适用于对目标应用其他功能的控制中。
通过上述添加Filter函数可以实现选择性提取目标应用的监控过程中的数据,有效节约对目标应用监控过程中产生的资源开销,提高Pinpoint探针采集数据等的监控能力。
需要说明的是,Pinpoint加强探针中提供的加强的before函数和加强的after函数不仅适用于加强Pinpoint探针采集应用接口请求体和返回体的监控功能,还适用于加强Pinpoint探针控制采集目标应用数据的触发条件的监控功能。
另外,本申请实施例描述基于Pinpoint加强探针加强具体监测功能是为了更加清楚的说明本申请实施例的技术方案,并不构成对本申请实施例提供的技术方案的限定,本领域普通技术人员可知,本申请实施例所提供的Pinpoint加强探针还适用于,加强Pinpoint探针设定目标应用的采样率等其他Pinpoint探针难以实现的监控功能。
基于上述方法,通过Pinpoint探针调用目标类中的回调函数,对目标类中的字节码进行修改,便于后续基于修改后的字节码采集目标应用的应用接口的请求体和返回体。
步骤203:基于修改后的字节码获取所述目标应用的应用接口的请求体和返回体。
在加载修改后的字节码之后,继续启动目标应用,并执行修改后的字节码,在执行修改后的字节码之后,获取目标应用的应用接口的请求体和返回体。
在本申请实施例中,在获取到应用接口的请求体和返回体之后,还包括将请求体和返回体发送至Pinpoint前端界面进行可视化展示。
具体来说,用户可以通过Pinpoint前端界面查看该目标应用的性能数据和应用接口的请求体和返回体。当然,在一些可能的实施例中,用户还可以通过Pinpoint前端界面查看该目标应用的其他监测数据,在此不做具体阐述。
通过本申请实施例所提供的技术方案,不仅可以解决通过APM工具难以采集目标应用的应用接口的请求体和返回体的问题,还可以实现在采集目标应用性能数据的同时,采集应用接口的请求体和返回体这种业务数据,实现自动关联目标应用的性能指标和业务数据,打通性能指标和业务数据之间的独立性的功能,使得通过APM工具对目标应用监测更加全面。
进一步,通过本申请实施例所提供的技术方案,能够真实反映业务数据在实际应用中的流转情况,有利于提高性能瓶颈解决和定位问题分析的精准性,为后期的业务建模提供重要的数据支撑。
基于同一发明构思,本申请还提供了一种采集数据的装置,用以采集应用接口的请求体和返回体,解决当前通过APM工具无法采集应用接口的请求体和返回体的问题,实现业务数据与性能指标之间的关联,提高APM工具的监控能力,有效减少通过APM工具采集请求体和返回体所花费的时间成本和人力资源。参见图3,该装置包括:
确定模块301,在目标应用启动时,确定所述目标应用的目标类,其中,所述目标类为注册了回调函数的类文件,其中,所述回调函数用于修改所述目标类中的字节码;
修改模块302,通过调用所述目标类中的所述回调函数,对所述目标类中的字节码进行修改;
获取模块303,基于修改后的字节码获取所述目标应用的应用接口的请求体和返回体。
在一种可能的设计中,所述确定模块301,具体用于在启动Java虚拟机JVM之后,通过Java探针加载与目标应用相关的插件,其中,所述插件用于标识待修改的目标类;在所述目标应用启动时,通过所述JVM加载所述目标应用中的类文件,并确定当前加载的类文件是否为插件标识的目标类;若是,则确定当前加载的类文件为所述目标类;若否,则继续加载下一个类文件。
在一种可能的设计中,所述修改模块302,具体用于确定所述目标类中的目标字节码,其中,所述目标字节码为所述目标类中保持不变的字节码;在所述目标字节码的首部添加***的before函数,在所述目标字节码的尾部添加***的after函数;基于所述before函数与所述after函数,修改所述目标类中的字节码。
在一种可能的设计中,所述修改模块302,具体用于在添加***的before函数时,确定所述before函数中包含注册有回调函数的子目标类;在添加***的after函数时,确定所述after函数中包含注册有回调函数的子目标类;通过调用所述子目标类中的所述回调函数,在所述子目标类中添加过滤器的Filter函数,通过所述Filter函数修改所述子目标类中的字节码。
在一种可能的设计中,所述修改模块302,具体用于根据所述before函数,在所述目标类中的目标字节码的首端添加所述目标应用的应用接口的请求体和返回体的***字符码;根据所述after函数,在所述目标类中的目标字节码的尾端添加所述目标应用的应用接口的请求体和返回体的***字符码。
在一种可能的设计中,在获取模块303之后,还用于在加载修改后的字节码之后,继续启动所述目标应用,并执行修改后的字节码;在执行修改后的字节码之后,获取所述目标应用的应用接口的请求体和返回体。
基于上述装置,可以用于采集应用接口的请求体和返回体,解决当前通过APM工具无法采集应用接口的请求体和返回体的问题,实现业务数据与性能指标之间的关联,提高APM工具的监控能力,有效减少通过APM工具采集请求体和返回体所花费的时间成本和人力资源。
基于同一发明构思,本申请实施例中还提供了一种电子设备,所述电子设备可以实现前述一种采集数据的装置的功能,参考图4,所述电子设备包括:
至少一个处理器401,以及与至少一个处理器401连接的存储器402,本申请实施例中不限定处理器401与存储器402之间的具体连接介质,图4中是以处理器401和存储器402之间通过总线400连接为例。总线400在图4中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线400可以分为地址总线、数据总线、控制总线等,为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。或者,处理器401也可以称为控制器,对于名称不做限制。
在本申请实施例中,存储器402存储有可被至少一个处理器401执行的指令,至少一个处理器401通过执行存储器402存储的指令,可以执行前文论述的采集数据方法。处理器401可以实现图3所示的装置中各个模块的功能。
其中,处理器401是该装置的控制中心,可以利用各种接口和线路连接整个该控制设备的各个部分,通过运行或执行存储在存储器402内的指令以及调用存储在存储器402内的数据,该装置的各种功能和处理数据,从而对该装置进行整体监控。
在一种可能的设计中,处理器401可包括一个或多个处理单元,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。在一些实施例中,处理器401和存储器402可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器401可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的采集数据方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器402作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器402可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器402是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器402还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
通过对处理器401进行设计编程,可以将前述实施例中介绍的采集数据方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行图2所示的实施例的采集数据方法的步骤。如何对处理器401进行设计编程为本领域技术人员所公知的技术,这里不再赘述。
基于同一发明构思,本申请实施例还提供一种存储介质,该存储介质存储有计算机指令,当该计算机指令在计算机上运行时,使得计算机执行前文论述采集数据方法。
在一些可能的实施方式中,本申请提供的采集数据方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在装置上运行时,程序代码用于使该控制设备执行本说明书上述描述的根据本申请各种示例性实施方式的采集数据方法中的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种采集数据的方法,其特征在于,所述方法包括:
在目标应用启动时,确定所述目标应用的目标类,其中,所述目标类为注册了回调函数的类文件,其中,所述回调函数用于修改所述目标类中的字节码;
通过调用所述目标类中的所述回调函数,对所述目标类中的字节码进行修改;
基于修改后的字节码获取所述目标应用的应用接口的请求体和返回体。
2.如权利要求1所述的方法,其特征在于,所述在目标应用启动时,确定所述目标应用的目标类,包括:
在启动Java虚拟机JVM之后,通过Java探针加载与目标应用相关的插件,其中,所述插件用于标识待修改的目标类;
在所述目标应用启动时,通过所述JVM加载所述目标应用中的类文件,并确定当前加载的类文件是否为插件标识的目标类;
若是,则确定当前加载的类文件为所述目标类;
若否,则继续加载下一个类文件。
3.如权利要求1所述的方法,其特征在于,所述对所述目标类中的字节码进行修改,包括:
确定所述目标类中的目标字节码,其中,所述目标字节码为所述目标类中保持不变的字节码;
在所述目标字节码的首部添加***的before函数,在所述目标字节码的尾部添加***的after函数;
基于所述before函数与所述after函数,修改所述目标类中的字节码。
4.如权利要求3所述的方法,其特征在于,所述在所述目标字节码的首部首尾添加***的before函数,在所述目标字节码的尾部添加***的after函数,包括:
在添加***的before函数时,确定所述before函数中包含注册有回调函数的子目标类;
在添加***的after函数时,确定所述after函数中包含注册有回调函数的子目标类;
通过调用所述子目标类中的所述回调函数,在所述子目标类中添加过滤器的Filter函数,通过所述Filter函数修改所述子目标类中的字节码。
5.如权利要求3所述的方法,其特征在于,所述基于所述before函数与所述after函数,修改所述目标类中的字节码,包括:
根据所述before函数,在所述目标类中的目标字节码的首端添加所述目标应用的应用接口的请求体和返回体的***字符码;
根据所述after函数,在所述目标类中的目标字节码的尾端添加所述目标应用的应用接口的请求体和返回体的***字符码。
6.如权利要求1-5中任一项所述的方法,其特征在于,所述基于修改后的字节码获取所述目标应用的应用接口的请求体和返回体,包括:
在加载修改后的字节码之后,继续启动所述目标应用,并执行修改后的字节码;
在执行修改后的字节码之后,获取所述目标应用的应用接口的请求体和返回体。
7.如权利要求1所述的方法,其特征在于,在所述基于修改后的字节码获取所述目标应用的应用接口的请求体和返回体之后,还包括:
将所述请求体和返回体发送至前端界面进行可视化展示。
8.一种采集数据的装置,其特征在于,所述装置包括;
确定模块,在目标应用启动时,确定所述目标应用的目标类,其中,所述目标类为注册了回调函数的类文件,其中,所述回调函数用于修改所述目标类中的字节码;
修改模块,通过调用所述目标类中的所述回调函数,对所述目标类中的字节码进行修改;
获取模块,基于修改后的字节码获取所述目标应用的应用接口的请求体和返回体。
9.一种电子设备,其特征在于,包括:
存储器,用于存放计算机程序;
处理器,用于执行所述存储器上所存放的计算机程序时,实现权利要求1-7中任一项所述的方法步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-7任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111500975.7A CN114328088A (zh) | 2021-12-09 | 2021-12-09 | 一种采集数据的方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111500975.7A CN114328088A (zh) | 2021-12-09 | 2021-12-09 | 一种采集数据的方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114328088A true CN114328088A (zh) | 2022-04-12 |
Family
ID=81051393
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111500975.7A Pending CN114328088A (zh) | 2021-12-09 | 2021-12-09 | 一种采集数据的方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114328088A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109471778A (zh) * | 2018-11-19 | 2019-03-15 | 国网安徽省电力有限公司信息通信分公司 | 一种电力***的监控方法、装置及设备 |
CN109726016A (zh) * | 2017-10-30 | 2019-05-07 | 阿里巴巴集团控股有限公司 | 一种用于分布式***的链路追踪方法、装置和*** |
CN110888780A (zh) * | 2019-11-19 | 2020-03-17 | 泰康保险集团股份有限公司 | 应用监控方法、装置、设备及存储介质 |
-
2021
- 2021-12-09 CN CN202111500975.7A patent/CN114328088A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109726016A (zh) * | 2017-10-30 | 2019-05-07 | 阿里巴巴集团控股有限公司 | 一种用于分布式***的链路追踪方法、装置和*** |
CN109471778A (zh) * | 2018-11-19 | 2019-03-15 | 国网安徽省电力有限公司信息通信分公司 | 一种电力***的监控方法、装置及设备 |
CN110888780A (zh) * | 2019-11-19 | 2020-03-17 | 泰康保险集团股份有限公司 | 应用监控方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
WANG_WPW: "《Pinpoint字节码增强技术》", 《HTTPS://BLOG.CSDN.NET/WANG_WPW/ARTICLE/DETAILS/80917012》, 3 August 2018 (2018-08-03), pages 1 - 3 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8601469B2 (en) | Method and system for customizing allocation statistics | |
US8667471B2 (en) | Method and system for customizing profiling sessions | |
US6381735B1 (en) | Dynamic classification of sections of software | |
AU2018310287A1 (en) | Smart contract processing method and apparatus | |
US8583783B1 (en) | Method and system for adaptive recovery of heap memory | |
CN110532038B (zh) | 一种基于Java智能合约的并行执行方法 | |
CN109842610B (zh) | 接口请求处理方法、装置、计算机设备及存储介质 | |
CN106648755B (zh) | 一种在安卓art环境中动态加载dex的方法及装置 | |
CN110308999B (zh) | 一种应用间动态共享依赖包的方法、存储介质及移动终端 | |
CN108255708B (zh) | 测试环境中访问生产文件的方法、装置、存储介质及设备 | |
US20030200530A1 (en) | Measuring the exact memory requirement of an application through intensive use of garbage collector | |
CN112219196B (zh) | 表示用于无暂停垃圾收集的激活帧的方法和装置 | |
EP3113019A1 (en) | Policy-based compression of machine code generated by a virtual machine | |
US10467027B1 (en) | Dynamic script loading resource files | |
CN113127314B (zh) | 一种检测程序性能瓶颈的方法、装置及计算机设备 | |
US8903776B2 (en) | Caching socket connections while ensuring that there are file descriptors available for the applications | |
US20060218562A1 (en) | Profiler stackwalker | |
CN107656849B (zh) | 一种软件***性能问题定位方法以及装置 | |
US7178140B2 (en) | Speeding up application downloading from a remote server | |
US11216352B2 (en) | Method for automatically analyzing bottleneck in real time and an apparatus for performing the method | |
CN114328088A (zh) | 一种采集数据的方法、装置及电子设备 | |
CN111400135A (zh) | 一种业务数据的提取方法及装置 | |
CN111240728A (zh) | 应用程序更新方法、装置、设备和存储介质 | |
KR20130020135A (ko) | 통합 개발 환경에서의 코드 동시 개발자 리스트 제공 시스템 및 방법 | |
CN115705294B (zh) | 用于获取函数调用信息的方法、装置、电子设备和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |