中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-11 16:49:26 來源:ITPUB博客 閱讀:169 作者:宜信技術學院 欄目:網絡管理

一、前言

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智能運維

來源:宜信技術學院


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

繁峙县| 新安县| 图们市| 高安市| 东乡族自治县| 遂川县| 舟曲县| 丁青县| 康乐县| 防城港市| 洛阳市| 德清县| 青冈县| 屯昌县| 广宁县| 航空| 沧源| 七台河市| 易门县| 通道| 黄浦区| 南昌市| 河池市| 岳池县| 昆明市| 五指山市| 布拖县| 庆阳市| 东丰县| 化德县| 井陉县| 榆中县| 雷波县| 池州市| 延安市| 巴塘县| 凉城县| 通许县| 和静县| 合肥市| 罗定市|