您好,登錄后才能下訂單哦!
MOF(Moniter Framwork)作為UAV應用數據捕獲框架,不但實現了對應用無侵入的數據捕獲,而且在框架層面實現了功能的靈活控制,并且保證了良好的可擴展性,在UAV中具有舉足輕重的地位。
MOF Agent注入機制作為UAV MOF工作的基礎,也為UAV無侵入捕獲應用數據提供可能。UAV Agent代碼注入機制結合javaagent(premain)和javaassist技術,在應用字節碼加載到JVM之前進行字節碼改寫。通過適配器適配(adaptor)不同應用服務器,目前支持的包括Tomcat(6+)、SpringBoot、Jetty(7+)等,結合攔截器(interceptor)實現對不同應用服務器切點,為MOF框架和應用數據捕獲提供基礎。
自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,寓意轉化器,提供字節碼文件流轉化的能力。
圖1 Class文件轉化圖
集合premain和transformer兩大神器,可以對加載進JVM的任意Class文件進行修改。其流程如圖1所示,任何Class文件加載時候,都要經過premain這一關卡,通過一系列的transformer,Class字節碼文件流最終變成那個完美的它,然后被加載到JVM中。當然,修改Class字節碼文件流的動作是在transformer中進行的。這就有個問題,拿到了字節碼文件流,怎么修改呢?當然是發揮人類的特長,借助工具,比如說javassist。
Javaassist是一個開源的分析、編輯和創建Java字節碼的類庫,能運行時動態生成類,修改類,并且能直接使用java編碼。
前文Java agent技術中,在transformer中拿到了類的字節碼文件流,利用Javaassist解析字節碼流為類對象,并對其進行修改,非常快速便捷。Javassist與Java agent結合將事半功倍。關于Javaassist的使用還請參考官網http://www.javassist.org。
前文中介紹了一對好伙伴:Javaagent技術和Javassit技術。Java agent負責攔截和轉換字節碼流,轉換的過程中使用Javaassist進行解析和修改。此兩者技術為MOF Agent注入機制提供了技術基礎。相信小伙伴對MOF Agent注入機制已經有了一定了猜想。
圖2為MOF Agent的組件圖,MOFAgent基于java agent premain技術實現,攔截所有加載的Class字節碼文件流;并通過UAV的transformer(MOFClsTransformer)進行字節碼劫持和轉化。UAV做的不僅僅是這些,還能自動感知不同應用服務器,并對不同應用服務器生命周期中的重要位置注入切點。UAV通過適配器(Adaptor)進行不同應用服務適配,通過攔截器(interceptor)進行具體的切點注入實現。
圖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智能運維
來源:宜信技術學院
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。