一种基于制造技术

技术编号:39580329 阅读:14 留言:0更新日期:2023-12-03 19:31
本发明专利技术公开了一种基于

【技术实现步骤摘要】
一种基于ASM字节码插桩的非入侵准实时监控方法及系统


[0001]本专利技术涉及信息监控
,并且更具体地,涉及一种基于
ASM
字节码插桩的非入侵准实时监控方法及系统


技术介绍

[0002]目前主流的软件系统架构体系中,都会包含一个重要的组成部分:监控服务

可针对各个系统服务的运行情况进行实时采集

计算分析和可视化展示,内容包括
QPS(
每秒查询率
)、TPS(
每秒事务率
)、
健康度

可用率

响应时长

调用量

负载
、CPU(
中央处理器
)
等监控信息

一套完善的监控服务不仅可以保障软件系统的正常运转,还可以为运维人员

运营人员的工作提供有力支撑

[0003]早期的监控服务通常需要在软件系统中以硬编码的方式对业务代码注入具体监控代码,以实现相应的监控功能

这种方式会导致监控代码大量侵入业务系统,既破坏了原有架构设计的代码结构,又严重影响系统的稳定性

同时由于监控代码通常比较零散琐碎,如需对现有监控功能进行扩展或是将其迁移到其他系统,代价则会相当大,就算完成功能扩展或者监控能力的迁移,后续也依然不易维护


技术实现思路

[0004]为了解决上述
技术介绍
所述的至少一个问题,本专利技术提供一种基于
ASM
字节码插桩的非入侵准实时监控方法及系统

[0005]根据本专利技术的一个方面,提供了一种基于
ASM
字节码插桩的非入侵准实时监控方法,包括:
[0006]通过
JavaAgent
技术和
ASM
框架,以非入侵方式采集被监控的
Java
方法执行过程中的关键信息,并将采集到的关键信息传输至基于
RocketMQ
实现的消息队列;
[0007]通过基于
RocketMQ
实现的消息队列将关键信息发送至监控服务平台后端程序;
[0008]通过监控服务平台后端程序对消息队列的关键信息进行消费和持久化处理,存入
RDBMS
关系型数据库;
[0009]利用
ElasticSearch
引擎从
RDBMS
关系型数据库获取关键信息进行准实时搜索和分析;
[0010]将分析得到的结果通过
ECharts
可视化工具展示到监控服务平台的前端页面

[0011]可选地,所述通过
JavaAgent
技术和
ASM
框架,以非入侵方式采集被监控的
Java
方法执行过程中的关键信息,包括:
[0012]通过
JavaAgentMain
类实现
JavaAgent
程序的入口功能;
[0013]通过
ByteCodeTransformer
类,利用
ASM
框架实现字节码的操作逻辑;
[0014]通过
ByteCodeMethodVisitor
类以字节码方式解析
Java
方法的信息;
[0015]进入被监控的
Java
方法并对字节码进行增强;
[0016]当被监控的
Java
方法逻辑执行完毕时,结束
Java
方法并对字节码进行增强,得到
Java
方法执行时监控到的关键信息

[0017]可选地,所述通过
JavaAgentMain
类实现
JavaAgent
程序的入口功能,包括:
[0018]在
Java
程序运行时,
Java
虚拟机在
JavaAgentMain
类上调用具有
String
类型入参和
Instrumentation
类型入参的
premain
方法;
[0019]如果
JavaAgentMain
类没有实现带有具有
String
类型入参和
Instrumentation
类型入参的
premain
方法,
Java
虚拟机调用只包含
String
类型入参的
premain
方法;
[0020]把
JavaAgentMain
类所在的路径信息配置到
MANIFEST.MF
文件中,其中
MANIFEST.MF
文件用于在
Java
程序中用来定义扩展或档案打包相关数据

[0021]可选地,所述通过
ByteCodeTransformer
类,利用
ASM
框架实现字节码的操作逻辑,包括:
[0022]通过
ByteCodeTransformer
类,利用
ASM
框架内提供的操作类
ClassReader、ClassWriter

ClassVisitor
实现字节码的操作逻辑

[0023]可选地,所述通过
ByteCodeMethodVisitor
类以字节码方式解析
Java
方法的信息,包括:
[0024]在
Java
程序加载启动的过程中,监控所有类的所有
Java
方法,获取到所有类的名称

方法名称

入参类型

入参值

返回类型以及方法返回值,其中入参类型

入参值

返回类型以及方法返回值被
ASM
框架描述为一段固定的字符串;
[0025]根据
ASM
框架官方文档对这段固定的字符串的说明,利用正则表达式对入参类型

入参值

返回类型以及方法返回值的字符串进行解析;
[0026]利用解析得到的方法信息,生成被监控的
Java
方法全局唯一的标识
ID。
[0027]可选地,所述进入被监控的
Java
方法并对字节码进行增强,包括:
[0028]通过在继承父类
AdviceAdapter
的子类
ByteCodeMethodVisitor
中,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种基于
ASM
字节码插桩的非入侵准实时监控方法,其特征在于,包括:通过
JavaAgent
技术和
ASM
框架,以非入侵方式采集被监控的
Java
方法执行过程中的关键信息,并将采集到的关键信息传输至基于
RocketMQ
实现的消息队列;通过基于
RocketMQ
实现的消息队列将关键信息发送至监控服务平台后端程序;通过监控服务平台后端程序对消息队列的关键信息进行消费和持久化处理,存入
RDBMS
关系型数据库;利用
ElasticSearch
引擎从
RDBMS
关系型数据库获取关键信息进行准实时搜索和分析;将分析得到的结果通过
ECharts
可视化工具展示到监控服务平台的前端页面
。2.
根据权利要求1所述的方法,其特征在于,所述通过
JavaAgent
技术和
ASM
框架,以非入侵方式采集被监控的
Java
方法执行过程中的关键信息,包括:通过
JavaAgentMain
类实现
JavaAgent
程序的入口功能;通过
ByteCodeTransformer
类,利用
ASM
框架实现字节码的操作逻辑;通过
ByteCodeMethodVisitor
类以字节码方式解析
Java
方法的信息;进入被监控的
Java
方法并对字节码进行增强;当被监控的
Java
方法逻辑执行完毕时,结束
Java
方法并对字节码进行增强,得到
Java
方法执行时监控到的关键信息
。3.
根据权利要求2所述的方法,其特征在于,所述通过
JavaAgentMain
类实现
JavaAgent
程序的入口功能,包括:在
Java
程序运行时,
Java
虚拟机在
JavaAgentMain
类上调用具有
String
类型入参和
Instrumentation
类型入参的
premain
方法;如果
JavaAgentMain
类没有实现带有具有
String
类型入参和
Instrumentation
类型入参的
premain
方法,
Java
虚拟机调用只包含
String
类型入参的
premain
方法;把
JavaAgentMain
类所在的路径信息配置到
MANIFEST.MF
文件中,其中
MANIFEST.MF
文件用于在
Java
程序中用来定义扩展或档案打包相关数据
。4.
根据权利要求2所述的方法,其特征在于,所述通过
ByteCodeTransformer
类,利用
ASM
框架实现字节码的操作逻辑,包括:通过
ByteCodeTransformer
类,利用
ASM
框架内提供的操作类
ClassReader、ClassWriter

ClassVisitor
实现字节码的操作逻辑
。5.
根据权利要求4所述的方法,其特征在于,所述通过
ByteCodeMethodVisitor
类以字节码方式解析
Java
方法的信...

【专利技术属性】
技术研发人员:张皓王志刚刘振宇白雪珂乔振浩王晶
申请(专利权)人:航天信息股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1