2021-07-07 10:10:26
SkyWalking Agent是SkyWalking分布式APM系统中针对Java应用的无侵入性应用探针,采用微内核架构并通过插件形式扩展功能。其核心原理基于Java Instrumentation与Byte Buddy字节码操作框架,实现运行时动态类增强与监控。
SkyWalking Agent采用微内核模式,核心功能包括:
架构通过抽象基类(如AbstractClassEnhancePluginDefine)封装插件生命周期管理,采用模板方法模式要求子类实现关键增强逻辑。
2. Java Instrumentation机制基于JVMTI(JVM Tool Interface)实现动态类修改:
JVM启动时加载javaagent指定的JAR包
调用Agent_OnLoad函数初始化JVMTI事件回调
通过Premain-Class注册ClassFileTransformer
ClassLoader加载类前触发ClassFileLoadHook
调用ClassFileTransformer.transform()生成修改后的字节码
每次类加载都会执行增强逻辑,确保方法体可动态修改
作为核心字节码工具,Byte Buddy提供:
接收原始字节码流
根据插件定义的增强点插入监控代码
返回修改后的字节码供JVM加载
ClassEnhancePluginDefine:基础插件定义
AbstractClassEnhancePluginDefine:提供默认实现
enhance():定义类增强逻辑
getConstructorsInterceptPoints():声明构造函数拦截点
getInstanceMethodsInterceptPoints():声明实例方法拦截点
getStaticMethodsInterceptPoints():声明静态方法拦截点
InstanceMethodsInterceptPoint:实例方法监控
StaticMethodsInterceptPoint:静态方法监控
指定拦截器类实现具体监控逻辑
使用Byte Buddy创建方法前后置拦截器
插入调用链追踪、指标收集等逻辑
无侵入性:
通过字节码操作实现监控,无需修改应用代码
支持热部署,不影响应用正常运行
高性能:
运行时动态增强,避免全量代码扫描
仅修改必要方法,减少性能开销
可扩展性:
微内核+插件架构支持快速功能扩展
自定义插件机制满足个性化监控需求
深度追踪:
支持方法级调用链追踪
可获取参数、返回值等上下文信息
分布式追踪:
跨服务调用链关联
端到端延迟分析
性能监控:
方法级耗时统计
异常率、QPS等指标收集
诊断分析:
慢查询检测
错误根因定位
自定义监控:
业务指标采集
特定逻辑验证
SkyWalking Agent通过其创新的微内核+插件架构,结合Java Instrumentation与Byte Buddy技术,为Java应用提供了高效、灵活、无侵入的APM解决方案,特别适用于复杂分布式系统的性能监控与故障诊断。