CN114629944A - 一种静态分析微服务系统全链路调用情况的方法 - Google Patents
一种静态分析微服务系统全链路调用情况的方法 Download PDFInfo
- Publication number
- CN114629944A CN114629944A CN202011436015.4A CN202011436015A CN114629944A CN 114629944 A CN114629944 A CN 114629944A CN 202011436015 A CN202011436015 A CN 202011436015A CN 114629944 A CN114629944 A CN 114629944A
- Authority
- CN
- China
- Prior art keywords
- information
- link
- analyzing
- java
- interface
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- 238000010586 diagram Methods 0.000 claims description 6
- 238000011144 upstream manufacturing Methods 0.000 claims description 6
- 238000004519 manufacturing process Methods 0.000 claims 2
- 238000012544 monitoring process Methods 0.000 description 17
- 238000004458 analytical method Methods 0.000 description 11
- 230000003068 static effect Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 2
- 244000046052 Phaseolus vulgaris Species 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/14—Network analysis or design
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于java class文件静态分析微服务系统全链路调用情况的方法,该方法包括以下步骤:解压业务系统的所有jar包或war包获取按应用隔离的java class文件夹;分析单个应用的java class文件夹,基于java class文件分析获取java文件字节码文本信息,进一步基于java文件字节码文本信息分析java基础信息,进一步基于基础信息进而分析应用对外提供的接口属性信息,数据储存到最终存储介质;应用间调用分析,基于应用对外提供接口的属性信息串联获取应用间调用情况;全链路信息展示。本发明通过静态分析java class文件的方式,可以在无需侵入开发环节和部署运行的情况下实现获取微服务系统调用全链路信息。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种java系统静态分析方法,主要是以分析静态代码的方式分析多个java工程间调用链路和单个java工程内方法维度调用链路的方法。
背景技术
随着计算机软件技术的发展,业务系统逐渐由单体集成的大型服务过渡向分布式微服务的架构,随着微服务应用规模的日益庞大就产生了一个新的需求,即对微服务应用间的调用情况的查看,这些调用信息可以体现一个业务在系统内完整的调用链路情况,一般称为全链路调用信息。目前全链路调用信息的查询一般作为全链路监控系统的一个功能点,但是由于全链路监控系统是监控业务系统运行态调用情况的系统,所以在使用场景上存在局限性。具体局限体现如下:
1. 全链路监控系统会侵入业务系统的项目代码。现有主流的全链路监控系统实现会要求项目引入相关依赖,或者在部署过程中外挂agent,无法完全对业务系统的开发部署做到无感。例如中国发明专利申请201911258993.1公开的一种服务之间调度的追踪方法及装置。该公开采用的方案事实上是当前链路追踪的一个主流方案,其显然依赖原有业务代码的直接改造或者引入sdk。中国发明专利申请201911389725 .3公开的一种通用可扩展的追踪业务全链路的监控方法及系统。该公开也涉及在开发过程中引入监控sdk上报监控信息,在部署过程引入agent获取监控信息转储至kafka这种在开发部署环节均侵入业务项目的操作;
2. 全链路监控系统获取的全链路信息实际为一个具体业务请求的全链路调用信息而非整个系统的全链路信息。监控系统获取的实际上是一个请求在各个微服务应用间的流转情况,由于不同请求参数不同,由同一入口进入也可能会获取到完全不同的链路信息。举例:A接口处于应用甲中,根据不同的参数,A接口的下游可能会流入应用乙也可能会流入应用丙中,由于全链路监控系统是根据请求获取链路信息的,而请求的参数是固定的,故看到的链路信息显示A接口的下游非甲必乙,这个显然是没有看到链路全貌的;
3. 由2中所说,全链路监控系统获取链路信息依赖请求调用,而请求在一个系统中是从入口开始在各个微服务应用间顺流而下的,而实际场景中,使用者往往会需要查找一个应用的所有链路上游信息,这个监控系统是无法做到的;
4. 由1中所说,全链路监控系统涉及业务项目改造,这里包含一个隐性前提即必须要有项目源码。然而实际情况中一些老的系统已经无法获取源码,仅剩部署的jar包或者war包,传统全链路监控系统是无法获取这类应用的调用信息的;
以上可见现有获取全链路调用信息的方式存在的局限性,当然以上所述并非完全是缺点,部分仅是根据使用场景不同上导致的局限性。本发明不是在于替代或者改进现有的获取全链路调用信息的方式,而是提供另一种方法以适用不同场景。
发明内容
为解决现有技术中的上述缺陷,本发明公开一种分析静态文件的方式而不依赖部署运行项目来获取微服务全链路调用情况的方法,同时规避上述现有技术局限。
一种基于java class文件静态分析微服务系统全链路调用情况的方法,包括如下步骤:
1. 解压业务系统的所有jar包或war包获取按应用隔离的java class文件夹;
2. 分析单个应用的java class文件夹,包含:基于java class文件分析获取java文件字节码文本信息;基于java文件字节码文本信息分析java基础信息;基于基础信息进而分析应用对外提供的接口属性信息;数据储存到最终存储介质;
3. 应用间调用分析,基于步骤3中分析获取的应用对外提供接口的属性信息串联获取应用间调用情况;
4. 信息展示,包括单个应用维度调用信息展示和系统维度全链路调用信息展示;
作为本发明优选的,上述所述的java字节码文本信息获取采用javassist技术获取。
作为本发明优选的,上述所述的java基础信息包括java的类信息、方法信息、属性信息以及类上的解信息、方法上的注解信息、属性上的注解信息、成员变量声明信息、方法内调用信息、类继承信息。
作为本发明优选的,上述所述的应用对外提供的接口信息包括http接口信息、rpc消费者信息、rpc生产者信息、mq消费者信息、mq生产者信息。
作为本发明优选的,上述所述数据存储介质选用关系型数据库。
作为本发明优选的,上述所述的对外提供接口的属性信息串联获取应用间调用情况的具体实现为:rpc调用通过接口名称串联,mq调用通过topic及tag串联。
作为本发明优选的,上述所述的单个应用维度调用信息展示采用树状图展示;系统维度全链路调用信息展示分为两个部分,针对应用的下游链路信息查看采用时序图展示,针对应用的上游链路信息查看采用树状图展示。
与现有发明相比,本发明具有如下优点:
1. 本发明无需改造应用即可获取链路信息,既不侵入代码也不影响部署。
2. 本发明无需应用部署运行,可以静态分析。
3. 本发明可以展示微服务系统内应用链路调用全况,包括应用的上游调用及下游调用,以及单个应用内方法维度的调用情况。
4. 本发明可以在源码丢失的情况下仅通过编译包分析。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1是本发明实施例的一种基于java class文件静态分析微服务系统全链路调用情况的方法流程图。
具体实施方式
以下将参照附图来描述本发明,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
一种基于java class文件静态分析微服务系统全链路调用情况的方法,如图1所示,包含以下步骤:
1. 解压业务系统的所有jar包或war包获取按应用隔离的java class文件夹。jar包或war包由用户提供,解压后按每个包对应一个文件夹的方式存放。针对fat jar的情况,jar包内的依赖jar包不做解压;
2. 分析单个应用的java class文件夹,包含:基于java class文件分析获取java文件字节码文本信息;基于java文件字节码文本信息分析java基础信息;基于以上分析信息基础进而分析应用对外提供的接口属性信息;数据储存到最终存储介质。
遍历单个应用的java class文件夹,利用javassist获取每个class文件的字节码信息,暂存在jvm内存中java基础信息包含java的类信息、方法信息、属性信息以及类上的注解信息、方法上的注解信息、属性上的注解信息、成员变量声明信息、方法内调用信息、类继承信息。其中方法内调用信息,需要分析javassit字节码文本获取,此处需要根据根据java定义字节码指令结合文本信息分析以获取调用信息,这里的调用信息包含当前方法对其他方法的调用信息、对其他类成员变量的调用信息和对其他类的调用信息。其他基础信息可以直接通过javassist直接获取,无需分析文本。
对外提供的接口信息包含http接口信息、rpc消费者信息、rpc生产者信息、mq消费者信息、mq生产者信息。http接口信息的获取支持包括但不限于使用spring mvc提供http接口的方式;rpc生产者和消费者信息的获取支持包括但不限于使用spring cloud、dubbo、grpc、hsf等rpc框架,另一方面,使用方式上也支持包括但不限于注解配置、xml配置、spring config bean配置等方式。mq生产者和消费者信息的获取支持包括但不限于rocketmq、rabbitmq、kafka等mq中间件,使用方式上也支持包括但不限于注解配置、xml配置、spring config bean配置等方式。
3. 应用间调用分析,基于步骤3中分析获取的应用对外提供接口的属性信息串联获取应用间调用情况;应用间信息调用主要包括rpc调用及mq异步调用。步骤3中已获取rpc接口信息,通过接口名将rpc的生产者与消费者串联,完成rpc应用间调用的分析;mq异步调用通过topic和tag信息将mq生产者和消费者信息串联,完成mq应用间调用的分析。
4. 信息展示,包括单个应用维度调用信息展示和系统维度全链路调用信息展示;系统统维度全链路调用信息展示分为两个部分,针对应用的下游链路信息查看采用时序图展示,针对应用的上游链路信息查看采用树状图展示。
虽然本发明是结合以上实施例进行描述的,但本发明并不被限定于上述实施例,而只受所附权利要求的限定,本领域普通技术人员能够容易地对其进行修改和变化,但并不离开本发明的实质构思和范围。
Claims (10)
1.一种静态分析微服务系统全链路调用情况的方法,其特征在于,包括如下步骤:解压业务系统的所有jar包或war包获取按应用隔离的java class文件夹;分析单个应用的javaclass文件夹,包含:基于java class文件分析获取java文件字节码文本信息;基于java文件字节码文本信息分析java基础信息;基于基础信息进而分析应用对外提供的接口属性信息;数据储存到最终存储介质;应用间调用分析,基于获取的应用对外提供接口的属性信息串联获取应用间调用情况;信息展示,包括单个应用维度调用信息展示和系统维度全链路调用信息展示。
2.根据权利要求1中所述的静态分析微服务系统全链路调用情况的方法,其特征在于,所述java class文件夹包含jar包或war包内所有class文件,但不包含其中解压后文件夹内的jar包的class文件。
3.根据权利要求1中所述的静态分析微服务系统全链路调用情况的方法,其特征在于,所述java基础信息包含java的类信息、方法信息、属性信息以及类上的解信息、方法上的注解信息、属性上的注解信息、成员变量声明信息、方法内调用信息、类继承信息。
4.根据权利要求1中所述的静态分析微服务系统全链路调用情况的方法,其特征在于,所述应用对外提供的接口包括http接口信息、rpc消费者信息、rpc生产者信息、mq消费者信息、mq生产者信息。
5.根据权利要求4中所述的静态分析微服务系统全链路调用情况的方法,其特征在于,所述应用对外提供的接口的属性包括,http接口的url信息、http接口的请求方法信息、rpc生产者的生产接口信息、rpc消费者的消费接口信息、mq生产者的topic信息、mq消费者的topic和tag信息。
6.根据权利要求1中所述的静态分析微服务系统全链路调用情况的方法,其特征在于,所述的基于获取的应用对外提供接口的属性信息串联获取应用间调用情况的串联方式包括:应用间的rpc调用通过匹配rpc生产者的生产接口和rpc消费者的消费接口串联;应用间的mq调用通过匹配mq生产者和mq消费者的topic串联。
7.根据权利要求1中所述的静态分析微服务系统全链路调用情况的方法,其特征在于,所述的单个应用维度调用信息展示包括单个应用内方法维度的调用树展示,所述的系统维度全链路调用信息展示包括描述应用下游调用关系的调用时序图展示和应用上游调用关系的上游应用间调用树展示。
8.根据权利要求4中所述的静态分析微服务系统全链路调用情况的方法,其特征在于,所述http接口信息包括但不限于spring mvc方式提供的http接口。
9.根据权利要求4中所述的静态分析微服务系统全链路调用情况的方法,其特征在于,所述rpc消费者信息和rpc生产者信息包括但不限于spring cloud、dubbo、grpc、hsf提供的rpc生产者和rpc消费者。
10.根据权利要求4中所述的静态分析微服务系统全链路调用情况的方法,其特征在于,所述mq消费者信息和mq生产者信息包括但不限于rocketmq、rabbitmq、kafka、activemq提供的mq生产者和mq消费者。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011436015.4A CN114629944B (zh) | 2020-12-11 | 2020-12-11 | 一种静态分析微服务系统全链路调用情况的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011436015.4A CN114629944B (zh) | 2020-12-11 | 2020-12-11 | 一种静态分析微服务系统全链路调用情况的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114629944A true CN114629944A (zh) | 2022-06-14 |
CN114629944B CN114629944B (zh) | 2024-05-14 |
Family
ID=81894734
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011436015.4A Active CN114629944B (zh) | 2020-12-11 | 2020-12-11 | 一种静态分析微服务系统全链路调用情况的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114629944B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893052A (zh) * | 2016-04-20 | 2016-08-24 | 中国银行股份有限公司 | 一种war包分析器 |
CN110471949A (zh) * | 2019-07-11 | 2019-11-19 | 阿里巴巴集团控股有限公司 | 数据血缘分析方法、装置、系统、服务器及存储介质 |
CN110535722A (zh) * | 2019-08-27 | 2019-12-03 | 江苏瑞中数据股份有限公司 | 一种跨安全区域的微服务全链路运行监控方法 |
CN111245672A (zh) * | 2019-12-30 | 2020-06-05 | 青岛特来电云科技有限公司 | 一种通用可扩展的追踪业务全链路的监控方法及系统 |
CN111381989A (zh) * | 2020-03-27 | 2020-07-07 | 中国平安人寿保险股份有限公司 | 微服务链路生成方法、装置、服务器及存储介质 |
WO2020147336A1 (zh) * | 2019-01-18 | 2020-07-23 | 苏宁易购集团股份有限公司 | 一种微服务全链路监控系统及方法 |
-
2020
- 2020-12-11 CN CN202011436015.4A patent/CN114629944B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893052A (zh) * | 2016-04-20 | 2016-08-24 | 中国银行股份有限公司 | 一种war包分析器 |
WO2020147336A1 (zh) * | 2019-01-18 | 2020-07-23 | 苏宁易购集团股份有限公司 | 一种微服务全链路监控系统及方法 |
CN110471949A (zh) * | 2019-07-11 | 2019-11-19 | 阿里巴巴集团控股有限公司 | 数据血缘分析方法、装置、系统、服务器及存储介质 |
CN110535722A (zh) * | 2019-08-27 | 2019-12-03 | 江苏瑞中数据股份有限公司 | 一种跨安全区域的微服务全链路运行监控方法 |
CN111245672A (zh) * | 2019-12-30 | 2020-06-05 | 青岛特来电云科技有限公司 | 一种通用可扩展的追踪业务全链路的监控方法及系统 |
CN111381989A (zh) * | 2020-03-27 | 2020-07-07 | 中国平安人寿保险股份有限公司 | 微服务链路生成方法、装置、服务器及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114629944B (zh) | 2024-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11061922B2 (en) | Extended correlation methods in a content transformation engine | |
US7752598B2 (en) | Generating executable objects implementing methods for an information model | |
US8806437B2 (en) | Automated testing process | |
US20040128584A1 (en) | Method and system for determining computer software test coverage | |
CN113032244B (zh) | 接口测试方法、装置、计算机系统和计算机可读存储介质 | |
CN111190825A (zh) | 自动测试方法、系统及机器人 | |
CN112631590B (zh) | 组件库生成方法、装置、电子设备和计算机可读介质 | |
CN106126389B (zh) | 硬件检测方法及系统 | |
US8972487B2 (en) | Automated framework for testing enterprise services consumer technologies | |
CN105354142A (zh) | 中间件测试方法及装置 | |
US8914420B2 (en) | Populating data structures of software applications with input data provided according to extensible markup language (XML) | |
CN107291619B (zh) | 内存占用分析方法及装置 | |
CN111782518A (zh) | 测试方法、装置和电子设备 | |
CN112445691A (zh) | 非侵入式智能合约性能检测方法和装置 | |
CN114629944B (zh) | 一种静态分析微服务系统全链路调用情况的方法 | |
CN111158777A (zh) | 组件调用方法、装置及计算机可读存储介质 | |
CN115509913A (zh) | 软件自动化测试方法、装置、机器可读介质及设备 | |
US20090222471A1 (en) | Database exploration for building wireless component applications | |
CN113704079A (zh) | 基于Protobuf的接口测试方法和装置 | |
CN109062797A (zh) | 生成信息的方法和装置 | |
CN115840778B (zh) | 一种基于模型的可视化配置连接器及其连接方法 | |
US20050027470A1 (en) | Interactive stub apparatus for testing a program and stub program storage medium | |
CN116594918B (zh) | 一种测试用例变更影响分析方法、装置、设备及存储介质 | |
CN116737591A (zh) | 接口调用方法、装置、计算机设备和存储介质 | |
CN117707807A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |