UAV MOF工作原理之Agent注入机制原理

栏目: Java · 发布时间: 7年前

内容简介:【UAVStack的中间件增强框架专题(MOF)】为大家详细讲述UAV中的MOF Agent是如何借助javaagent(premain)和javaassist技术在对应用无侵入的前提下完成数据捕获的。欢迎继续关注UAVStack,了解UAV更多的技术创新。MOF(Moniter Framwork)作为UAV应用数据捕获框架,不但实现了对应用无侵入的数据捕获,而且在框架层面实现了功能的灵活控制,并且保证了良好的可扩展性,在UAV中具有举足轻重的地位。MOF Agent注入机制作为UAV MOF工作的基础,也

【UAVStack的中间件增强框架专题(MOF)】为大家详细讲述UAV中的MOF Agent是如何借助javaagent(premain)和javaassist技术在对应用无侵入的前提下完成数据捕获的。欢迎继续关注UAVStack,了解UAV更多的技术创新。

前言

MOF(Moniter Framwork)作为UAV应用数据捕获框架,不但实现了对应用无侵入的数据捕获,而且在框架层面实现了功能的灵活控制,并且保证了良好的可扩展性,在UAV中具有举足轻重的地位。

MOF Agent注入机制作为UAV MOF工作的基础,也为UAV无侵入捕获应用数据提供可能。UAV Agent代码注入机制结合javaagent(premain)和javaassist技术,在应用字节码加载到JVM之前进行字节码改写。通过适配器适配(adaptor)不同应用服务器,目前支持的包括Tomcat(6+)、SpringBoot、Jetty(7+)等,结合拦截器(interceptor)实现对不同应用服务器切点,为MOF框架和应用数据捕获提供基础。

Java Agent技术

自JDK1.5开始, JDK中引入了java.lang.Instrument包,提供在 Java 程序类加载之前修改class字节码和运行时动态修改系统中Class类型的能力,其中一个核心概念即Java Agent,可以理解为一个字节码转换器或者Class对象转换器。针对字节码转化和Class对象转化,Java agent分别提供了相应的方式,即Java agent premain方式和Java agent agentmain方式。UAV MOF使用的是Java agent premain方式,因此本文主要讲解该转化方式。

Java agent premain方式提供了在字节码class文件被JVM加载之前拦截并修改的神奇能力,目前基本所有基于探针的监控系统(如ONEAPM Servers)都是基于这种能力实现的对应用的无侵入监控。Java agent premain中有两个重要的概念,分别是premain和transformer。

premain将在程序的main方法之前执行,我们知道程序的入口是main方法,premain代表了在程序正式启动之前执行的动作,具备类似AOP的能力。transformer,寓意转化器,提供字节码文件流转化的能力。

UAV MOF工作原理之Agent注入机制原理

图1 Class文件转化图

集合premain和transformer两大神器,可以对加载进JVM的任意Class文件进行修改。其流程如图1所示,任何Class文件加载时候,都要经过premain这一关卡,通过一系列的transformer,Class字节码文件流最终变成那个完美的它,然后被加载到JVM中。当然,修改Class字节码文件流的动作是在transformer中进行的。这就有个问题,拿到了字节码文件流,怎么修改呢?当然是发挥人类的特长,借助工具,比如说javassist。

Javassist技术

Javaassist是一个开源的分析、编辑和创建Java字节码的类库,能运行时动态生成类,修改类,并且能直接使用java编码。

前文Java agent技术中,在transformer中拿到了类的字节码文件流,利用Javaassist解析字节码流为类对象,并对其进行修改,非常快速便捷。Javassist与Java agent结合将事半功倍。关于Javaassist的使用还请参考官网http://www.javassist.org。

MOF Agent注入机制

前文中介绍了一对好伙伴:Javaagent技术和Javassit技术。Java agent负责拦截和转换字节码流,转换的过程中使用Javaassist进行解析和修改。此两者技术为MOF Agent注入机制提供了技术基础。相信小伙伴对MOF Agent注入机制已经有了一定了猜想。

图2为MOF Agent的组件图,MOFAgent基于java agent premain技术实现,拦截所有加载的Class字节码文件流;并通过UAV的transformer(MOFClsTransformer)进行字节码劫持和转化。UAV做的不仅仅是这些,还能自动感知不同应用服务器,并对不同应用服务器生命周期中的重要位置注入切点。UAV通过适配器(Adaptor)进行不同应用服务适配,通过拦截器(interceptor)进行具体的切点注入实现。

UAV MOF工作原理之Agent注入机制原理

图2 MOF Agent组件图

MOFAgent注入机制将对应用服务器生命周期中关键位置注入切点,为MOF框架初始化、应用的画像信息和实时监控数据信息捕获提供基础。MOF Agent注入的不同切点会产生不同的事件,通过事件驱动后续MOF框架。MOF支持的主要切点如下:

  • 应用服务器入口

应用服务器入口切点,UAV将完成MOF Jar包加载和配置文件初始化;

  • 应用服务器启动

应用服务器启动时,切将保证UAV MOF将随应用服务器启动完成MOF内部代码的自启动和初始化;

  • 应用服务器请求处理和回复

应用服务器请求和回复切点,是UAV对应用实时监控数据捕获的重要切点,监控应用服务器,应用,所有的URL的性能指标;

  • 应用初始化

应用初始化切点时,UAV将对应用的Filter进行改写,支持MOF的Global Filter机制;同时完成对应用画像信息进行捕获等;

  • 应用停止

应用停止时切点,UAV将完成MOF相关机制的停止等操作

本文主要目的是让读者了解UAV MOF Agent代码注入机制原理和相关实现。MOF中其它重要框架及其实现原理将会在后续文章中依次剖析,敬请期待。

文章来源:宜信技术学院——UAVstack 作者:曾礼


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

认知盈余

认知盈余

[美] 克莱·舍基 / 胡泳、哈丽丝 / 中国人民大学出版社 / 2011-12 / 49.80元

“互联网革命最伟大的思考者”克莱•舍基 继《未来是湿的》之后最新力作 看自由时间如何变革世界的未来 如果说《未来是湿的》揭示的是“无组织的组织力量”, 那么《认知盈余》揭示的就是 “无组织的时间力量”。 腾讯董事会主席兼首席执行官马化腾首度亲笔作序倾情推荐 克莱•舍基说,美国人一年花在看电视上的时间大约2 000亿个小时,而这几乎是2 000个维基百科项目一年所需要的......一起来看看 《认知盈余》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具