UAVMOF工作原理之Agent注入機(jī)制原理-創(chuàng)新互聯(lián)

一、前言

MOF(Moniter Framwork)作為UAV應(yīng)用數(shù)據(jù)捕獲框架,不但實現(xiàn)了對應(yīng)用無侵入的數(shù)據(jù)捕獲,而且在框架層面實現(xiàn)了功能的靈活控制,并且保證了良好的可擴(kuò)展性,在UAV中具有舉足輕重的地位。

創(chuàng)新互聯(lián)公司 - 綿陽服務(wù)器托管,四川服務(wù)器租用,成都服務(wù)器租用,四川網(wǎng)通托管,綿陽服務(wù)器托管,德陽服務(wù)器托管,遂寧服務(wù)器托管,綿陽服務(wù)器托管,四川云主機(jī),成都云主機(jī),西南云主機(jī),綿陽服務(wù)器托管,西南服務(wù)器托管,四川/成都大帶寬,成都機(jī)柜租用,四川老牌IDC服務(wù)商

MOF Agent注入機(jī)制作為UAV MOF工作的基礎(chǔ),也為UAV無侵入捕獲應(yīng)用數(shù)據(jù)提供可能。UAV Agent代碼注入機(jī)制結(jié)合javaagent(premain)和javaassist技術(shù),在應(yīng)用字節(jié)碼加載到JVM之前進(jìn)行字節(jié)碼改寫。通過適配器適配(adaptor)不同應(yīng)用服務(wù)器,目前支持的包括Tomcat(6+)、SpringBoot、Jetty(7+)等,結(jié)合攔截器(interceptor)實現(xiàn)對不同應(yīng)用服務(wù)器切點,為MOF框架和應(yīng)用數(shù)據(jù)捕獲提供基礎(chǔ)。

二、Java Agent技術(shù)

自JDK1.5開始, JDK中引入了java.lang.Instrument包,提供在Java程序類加載之前修改class字節(jié)碼和運(yùn)行時動態(tài)修改系統(tǒng)中Class類型的能力,其中一個核心概念即Java Agent,可以理解為一個字節(jié)碼轉(zhuǎn)換器或者Class對象轉(zhuǎn)換器。針對字節(jié)碼轉(zhuǎn)化和Class對象轉(zhuǎn)化,Java agent分別提供了相應(yīng)的方式,即Java agent premain方式和Java agent agentmain方式。UAV MOF使用的是Java agent premain方式,因此本文主要講解該轉(zhuǎn)化方式。

Java agent premain方式提供了在字節(jié)碼class文件被JVM加載之前攔截并修改的神奇能力,目前基本所有基于探針的監(jiān)控系統(tǒng)(如ONEAPM Servers)都是基于這種能力實現(xiàn)的對應(yīng)用的無侵入監(jiān)控。Java agent premain中有兩個重要的概念,分別是premain和transformer。

premain將在程序的main方法之前執(zhí)行,我們知道程序的入口是main方法,premain代表了在程序正式啟動之前執(zhí)行的動作,具備類似AOP的能力。transformer,寓意轉(zhuǎn)化器,提供字節(jié)碼文件流轉(zhuǎn)化的能力。

UAV MOF工作原理之Agent注入機(jī)制原理

圖1 Class文件轉(zhuǎn)化圖

集合premain和transformer兩大神器,可以對加載進(jìn)JVM的任意Class文件進(jìn)行修改。其流程如圖1所示,任何Class文件加載時候,都要經(jīng)過premain這一關(guān)卡,通過一系列的transformer,Class字節(jié)碼文件流最終變成那個完美的它,然后被加載到JVM中。當(dāng)然,修改Class字節(jié)碼文件流的動作是在transformer中進(jìn)行的。這就有個問題,拿到了字節(jié)碼文件流,怎么修改呢?當(dāng)然是發(fā)揮人類的特長,借助工具,比如說javassist。

三、Javassist技術(shù)

Javaassist是一個開源的分析、編輯和創(chuàng)建Java字節(jié)碼的類庫,能運(yùn)行時動態(tài)生成類,修改類,并且能直接使用java編碼。

前文Java agent技術(shù)中,在transformer中拿到了類的字節(jié)碼文件流,利用Javaassist解析字節(jié)碼流為類對象,并對其進(jìn)行修改,非??焖俦憬荨avassist與Java agent結(jié)合將事半功倍。關(guān)于Javaassist的使用還請參考官網(wǎng)http://www.javassist.org。

四、MOF Agent注入機(jī)制

前文中介紹了一對好伙伴:Javaagent技術(shù)和Javassit技術(shù)。Java agent負(fù)責(zé)攔截和轉(zhuǎn)換字節(jié)碼流,轉(zhuǎn)換的過程中使用Javaassist進(jìn)行解析和修改。此兩者技術(shù)為MOF Agent注入機(jī)制提供了技術(shù)基礎(chǔ)。相信小伙伴對MOF Agent注入機(jī)制已經(jīng)有了一定了猜想。

圖2為MOF Agent的組件圖,MOFAgent基于java agent premain技術(shù)實現(xiàn),攔截所有加載的Class字節(jié)碼文件流;并通過UAV的transformer(MOFClsTransformer)進(jìn)行字節(jié)碼劫持和轉(zhuǎn)化。UAV做的不僅僅是這些,還能自動感知不同應(yīng)用服務(wù)器,并對不同應(yīng)用服務(wù)器生命周期中的重要位置注入切點。UAV通過適配器(Adaptor)進(jìn)行不同應(yīng)用服務(wù)適配,通過攔截器(interceptor)進(jìn)行具體的切點注入實現(xiàn)。

UAV MOF工作原理之Agent注入機(jī)制原理

圖2 MOF Agent組件圖

MOFAgent注入機(jī)制將對應(yīng)用服務(wù)器生命周期中關(guān)鍵位置注入切點,為MOF框架初始化、應(yīng)用的畫像信息和實時監(jiān)控數(shù)據(jù)信息捕獲提供基礎(chǔ)。MOF Agent注入的不同切點會產(chǎn)生不同的事件,通過事件驅(qū)動后續(xù)MOF框架。MOF支持的主要切點如下:

1)應(yīng)用服務(wù)器入口

應(yīng)用服務(wù)器入口切點,UAV將完成MOF Jar包加載和配置文件初始化;

2)應(yīng)用服務(wù)器啟動

應(yīng)用服務(wù)器啟動時,切將保證UAV MOF將隨應(yīng)用服務(wù)器啟動完成MOF內(nèi)部代碼的自啟動和初始化;

3)應(yīng)用服務(wù)器請求處理和回復(fù)

應(yīng)用服務(wù)器請求和回復(fù)切點,是UAV對應(yīng)用實時監(jiān)控數(shù)據(jù)捕獲的重要切點,監(jiān)控應(yīng)用服務(wù)器,應(yīng)用,所有的URL的性能指標(biāo);

4)應(yīng)用初始化

應(yīng)用初始化切點時,UAV將對應(yīng)用的Filter進(jìn)行改寫,支持MOF的Global Filter機(jī)制;同時完成對應(yīng)用畫像信息進(jìn)行捕獲等;

5)應(yīng)用停止

應(yīng)用停止時切點,UAV將完成MOF相關(guān)機(jī)制的停止等操作

本文主要目的是讓讀者了解UAV MOF Agent代碼注入機(jī)制原理和相關(guān)實現(xiàn)。MOF中其它重要框架及其實現(xiàn)原理將會在后續(xù)文章中依次剖析。

作者:曾禮

首發(fā):UAVStack智能運(yùn)維

來源:宜信技術(shù)學(xué)院

當(dāng)前文章:UAVMOF工作原理之Agent注入機(jī)制原理-創(chuàng)新互聯(lián)
文章地址:http://muchs.cn/article20/dpeico.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站全網(wǎng)營銷推廣、品牌網(wǎng)站制作、自適應(yīng)網(wǎng)站、建站公司、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)