我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

一、前言

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支持的主要切点如下:

1)应用服务器入口

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

2)应用服务器启动

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

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

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

4)应用初始化

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

5)应用停止

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

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

作者:曾礼

首发:UAVStack智能运维

来源:宜信技术学院

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

命令注入工具Commix的工作原理是什么

这篇文章主要为大家展示了“命令注入工具Commix的工作原理是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“命令注入工具Commix的工作原理是什么”这篇文章吧。命令注入工具Commix命令
2023-06-04

Linux NFS机制工作原理及实例解析

什么是NFS network file system 网络文件系统 通过网络存储和组织文件的一种方法或机制。 为什么要用NFS 前端所有的应用服务器接收到用户上传的图片、文件、视频,都会统一放到后端的存储上。 共享存储的好处:方便数据的查找
2022-06-03

springMVC的工作原理和机制以及配置

这篇文章主要讲解了“springMVC的工作原理和机制以及配置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springMVC的工作原理和机制以及配置”吧!工作原理下面的是springMVC
2023-06-03

Linux NFS机制工作原理及实例分析

Linux NFS机制工作原理及实例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。NFS是network file system (网络文件系统)的缩写,其主要作用就是通过
2023-06-28

深入理解PHP SSO单点登录的工作原理和技术机制

随着互联网的快速发展,各种网站和应用的数量也日益增多。用户为了访问不同的网站和应用,需要分别注册不同的账号和密码,给用户带来了不便和烦恼。为了解决这个问题,单点登录(Single Sign-On,SSO)应运而生。SSO是一种授权认证系统,
2023-10-21

深入探索Go语言垃圾回收机制的工作原理

Go语言的垃圾回收机制采用了并发标记清除(concurrent mark and sweep)的算法,主要分为三个阶段:标记阶段、清除阶段和压缩阶段。1. 标记阶段:在此阶段,垃圾回收器会从根对象开始,递归地遍历程序中的所有可达对象,并对其
2023-10-08

基于组件的机制的SimpleFramework工作原理是什么

本篇文章给大家分享的是有关基于组件的机制的SimpleFramework工作原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。生命周期:了解SimpleFramework
2023-06-17

PHP缓存机制详解:深入探究其工作原理和实际应用

PHP缓存机制全解析:深入理解其原理与应用引言:在开发Web应用程序中,缓存是一种重要的技术手段,能够显著提升应用程序的性能和用户体验。而PHP作为一种常用的服务器端编程语言,也提供了丰富的缓存机制供开发者使用。本文将深入探讨PHP缓存机
PHP缓存机制详解:深入探究其工作原理和实际应用
2024-01-23

java编程之AC自动机工作原理的示例分析

这篇文章将为大家详细讲解有关java编程之AC自动机工作原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.应用场景—多模字符串匹配我们现在考虑这样一个问题,在一个文本串text中,我们想找出
2023-05-30

揭秘 Puppet 的幕后机制:深入探索其工作原理和架构奥秘

Puppet 凭借其出色的基础设施自动化和配置管理能力,成为许多企业构建、管理和更新 IT 基础设施的首选工具。这篇深入探讨了 Puppet 的工作原理和架构。
揭秘 Puppet 的幕后机制:深入探索其工作原理和架构奥秘
2024-02-12

深入理解Spring事务及传播机制之原理解析与实际应用

Spring事务管理机制提供了多种传播行为,可以控制事务的范围和隔离级别,保证数据一致性和完整性。在实际应用中,需要根据具体业务场景选择合适的传播行为实现事务控制
2023-05-16

解密numpy库:揭秘其背后的算法原理和工作机制

解密numpy库:揭秘其背后的算法原理和工作机制随着科技的飞速发展,数据科学已经成为一个极其重要的领域。其中,数据的处理和分析是数据科学中最为核心的环节。而且,随着数据量越来越大,数据的处理速度也成为了一个不可忽视的问题。在数据科学领域
解密numpy库:揭秘其背后的算法原理和工作机制
2024-01-19

Java注解机制之Spring自动装配实现原理的示例分析

小编给大家分享一下Java注解机制之Spring自动装配实现原理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! Java中使用注解的情况主要在SpringMVC(Spring Boot等),注解实际上相当于一种标
2023-05-31

揭秘PHP Web服务的幕后机制:全方位解析其工作原理!

PHP Web服务是一种流行的网络服务器,用于处理HTTP请求。它支持多种特性和功能,使其成为网站和应用程序的理想选择。本文将揭示PHP Web服务的幕后机制,详细解析其工作原理。
揭秘PHP Web服务的幕后机制:全方位解析其工作原理!
2024-02-05

Java中的反射机制是如何工作的?有哪些应用场景?(请解释Java反射机制的工作原理及其应用场景。)

Java反射机制通过加载类并获取其信息,允许程序在运行时动态检查和调用类、方法和字段。它在动态加载类、创建代理对象、测试自动化、自定义序列化、元编程和JavaBeans内省等场景中广泛应用,但需要注意性能开销、安全隐患和复杂性。
Java中的反射机制是如何工作的?有哪些应用场景?(请解释Java反射机制的工作原理及其应用场景。)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录