964 字
约 3 分钟
12
调研字节码插桩技术,用于系统监控设计和实现
无标签

调研字节码插桩技术,用于系统监控设计和实现 作者:小傅哥

博客: https://bugstack.cn (opens new window) 原文: https://mp.weixin.qq.com/s/9g7O3MSxh5q3F6z-Mxalzg (opens new window) 沉淀、分享、成长,让自己和他人都能有所收获!😄 # 一、来自深夜的电话! 咋滴,你那上线的系统是裸奔呢?

周末熟睡的深夜,突然接到老板电话☎的催促。“赶紧看微信、看微信,咋系统出问题了,我们都不知道,还得用户反馈才知道的!!!”深夜爬起来,打开电脑连上 VPN ,打着哈欠、睁开朦胧的眼睛,查查系统日志,原来是系统挂了,赶紧重启恢复! 虽然重启恢复了系统,也重置了老板扭曲的表情。但系统是怎么挂的呢,因为没有一个监控系统,也不知道是流量太大导致,还是因为程序问题引起,通过一片片的日志,也仅能粗略估计出一些打着 好像的标签 给老板汇报。不过老板 也不傻 ,聊来聊去,让把所有的系统运行状况都监控出来。 双手拖着困倦的脑袋,一时半会也想不出什么好方法, 难道在每个方法上都硬编码上执行耗时计算 。之后把信息在统一收集起来,展示到一个监控页面呢,监控页面使用阿帕奇的 echarts (opens new window) ,别说要是这样显示了,还真能挺好看还好用。

但这么硬编码也不叫玩意呀,这不把我们部门搬砖的码农累岔气呀!再说了,这么干他们肯定瞧不起我。 啥架构师,要监控系统,还得硬编码,傻了不是!!! 这么一想整的没法睡觉,得找找资料,明天给老板汇报! 其实一套线上系统是否稳定运行,取决于它的运行健康度,而这包括;调用量、可用率、影响时长以及服务器性能等各项指标的一个综合值。并且在系统出现异常问题时,可以抓取整个业务方法执行链路并输出;当时的入参、出参、异常信息等等。当然还包括一些JVM、Redis、Mysql的各项性能指标,以用于快速定位并解决问题。 那么要做到这样的事情有什么处理方案呢,其实做法还是比较多的,比如; 最简单粗暴的就是硬编码在方法中,收取执行耗时以及出入参和异常信息。但这样的编码成本实在太大,而且硬编码完还需要大量回归测试,可能给系统带来一定的风险。 万一谁手抖给复制粘贴错了呢! 可以选择切面方式做一套统一监控的组件,相对来说还是好一些的。但也需要硬编码,比如写入注解,同时维护成本也不低。 其实市面上对于这样的监控其实是有整套的非入侵监控方案的,比如;Google Dapper、Zipkin等都可以实现监控系统需求,他们都是基于探针技术非入侵的采用字节码增强的方式采集系统运行信息进行分析和监控运行状态。 好,那么本文就来带着大家来尝试下几种不同方式,监控系统运行状态的实现思路。 # 二、准备工作 本文会基于 AOP 、字节码框架( ASM 、 Javassist 、 Byte-Buddy ),分别实现不同的监控实现代码。整个工程结构如下:

MonitorDesign
├── cn-bugstack-middleware-aop
├── cn-bugstack-middleware-asm
├── cn-bugstack-middleware-bytebuddy
├── cn-bugstack-middleware-javassist
├── cn-bugstack-middleware-test
└── pom.xml

1 2 3 4 5 6 7

调研字节码插桩技术,用于系统监控设计和实现
https://clxhxhhr.top/posts/3193/
作者
clxstart
发布于
2026-09-24
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。