FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

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

  • 2020-02-12
  • 本文字数:1986 字

    阅读完需:约 7 分钟

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

【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,寓意转化器,提供字节码文件流转化的能力。


1545102142793060786.png


图 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)进行具体的切点注入实现。


1545102301298035684.png


图 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 中其它重要框架及其实现原理将会在后续文章中依次剖析,敬请期待。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/199


2020-02-12 15:27527

评论

发布
暂无评论
发现更多内容

财富自由的本质及如何实现财富自由?

非著名程序员

认知提升 个人提升 财富自由 8月日更

入职新公司后如何快速上手项目

咔咔

php MySQL 数据库

kubernetes/k8s CRI 分析 -kubelet 删除 pod 分析

良凯尔

Kubernetes 源码分析 Kubernetes Plugin #Kubernetes# cri-o

HarmonyOS组件开发 ScrollView嵌套ListContainer 滑动冲突问题

爱吃土豆丝的打工人

HarmonyOS ScrollView ListContainer 嵌套滑动

架构实战训练营总结

唐江

架构实战营

如何在二三线城市月薪过万(三)java偏功能实现的面试题,有备无患!!

小鲍侃java

8月日更

python爬取下载m3u8加密视频,原来这么简单!

Python研究者

8月日更

架构实战营 | 毕业设计

架构实战营

架构实战营 毕业总结

Ahu

架构实战营 模块五作业

孫影

架构实战营 #架构实战营

网络攻防学习笔记 Day106

穿过生命散发芬芳

网络安全 8月日更

Flutter Android 端 FlutterEngine Java 相关流程源码分析

工匠若水

flutter android 面试 8月日更

Vue进阶(三十六):created() 详解

No Silver Bullet

Vue 8月日更

docker介绍与安装

Rubble

Docker 8月日更

杂谈:电商平台中的图片资源优化实战

云小梦

CSS JavaScript html5 jpeg 图片处理

极客大学架构实战0期毕业总结

谢博琛

拆分电商系统为微服务

thewangzl

如何设计一个容错的微服务架构

架构精进之路

架构 微服务 8月日更

架构实战营毕业总结

Saber

架构实战营 毕业总结

netty系列之:对聊天进行加密

程序那些事

Java Netty nio

架构实战营模块五作业-微博评论高性能高可用架构

王晓宇

架构实战营

FastApi-13-文件上传-1

Python研究所

FastApi 8月日更

Vue进阶(三十七):created、mounted等钩子函数整理

No Silver Bullet

Vue 8月日更

Python开发篇——基于React-Dropzone开发上传组件

DisonTangor

Python flask React

上游思维的三大障碍

石云升

读书笔记 8月日更 上游思维

Drools 规则属性

LeifChen

drools 规则引擎 8月日更 规则属性

fil币价格行情怎么样?fil币价值和未来在哪?

fil币价格行情怎么样 fil币价值和未来在哪

Python Qt GUI设计简介、环境下载和安装(基础篇—1)

不脱发的程序猿

Python qt GUI设计 Qt Company

智能边缘开源框架Baetyl,构建边缘融合智能应用

百度开发者中心

AI 最佳实践 物联网 边缘计算 开源技术

前端之算法(五)顺序和二分搜索

Augus

数据结构与算法 8月日更

设计微博系统中”微博评论“的高性能高可用计算架构

WYT

架构实战营

  • 扫码添加小助手
    领取最新资料包
UAV MOF工作原理之Agent注入机制原理_安全_曾礼_InfoQ精选文章