摘要:本文為大家講解中的框架。在系統(tǒng)中,中間件增強(qiáng)框架探針提供了應(yīng)用畫(huà)像及性能數(shù)據(jù)收集等功能,其中數(shù)據(jù)收集功能主要采集四類數(shù)據(jù)實(shí)時(shí)數(shù)據(jù)畫(huà)像數(shù)據(jù)調(diào)用鏈接數(shù)據(jù)生成以及線程數(shù)據(jù)分析數(shù)據(jù)。提供服務(wù),供后續(xù)抓取使用,其中服務(wù)注冊(cè)了三個(gè),分別為。
本文為大家講解MOF中的CaptureFramework框架。該框架提供統(tǒng)一的數(shù)據(jù)抓取行為和生成抓取結(jié)果能力,實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集。
背景應(yīng)用服務(wù)監(jiān)控是智能運(yùn)維系統(tǒng)的重要組成部分。在UAV系統(tǒng)中,中間件增強(qiáng)框架(MOF)探針提供了應(yīng)用畫(huà)像及性能數(shù)據(jù)收集等功能,其中數(shù)據(jù)收集功能主要采集四類數(shù)據(jù):實(shí)時(shí)數(shù)據(jù)、畫(huà)像數(shù)據(jù)、調(diào)用鏈接數(shù)據(jù)生成以及線程數(shù)據(jù)分析數(shù)據(jù)。為實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集,UAVStack設(shè)計(jì)了CaptureFramework框架,提供統(tǒng)一的數(shù)據(jù)抓取行為和生成抓取結(jié)果能力。
CaptureFramework運(yùn)行原理 關(guān)鍵技術(shù)說(shuō)明:JavaAssist
Monitor捕獲體系
precap/docap
架構(gòu)說(shuō)明:捕獲點(diǎn):支持Tomcat、MSCP、Springboot、Jetty埋點(diǎn)。
UAVServer單例:作為統(tǒng)一的捕獲入口點(diǎn),提供了同步和異步方法。
StandardMonitor:實(shí)現(xiàn)了Monitor接口,是實(shí)時(shí)數(shù)據(jù)抓取實(shí)現(xiàn)類,提供了doCapture方法,負(fù)責(zé)抓取行為和生成抓取結(jié)果。
MonitorElemCapHandler:不同的抓取邏輯和抓取點(diǎn)的共同接口實(shí)現(xiàn)不同的埋點(diǎn)邏輯,提供了抓取行為的方法preCap與doCap以及生成抓取結(jié)果的方法preStore。
StandardMonitorRepository:存儲(chǔ)實(shí)時(shí)數(shù)據(jù)抓取數(shù)據(jù)結(jié)構(gòu)。
DataObserver:暴露了JMX/HTTP接口數(shù)據(jù)。
關(guān)鍵類說(shuō)明Monitor實(shí)時(shí)監(jiān)控主要是從DefaultMonitorSupporter類啟動(dòng)初始化StandardMonitor對(duì)象,通過(guò)CaptureFramework將monitor對(duì)象安裝到DataStore對(duì)象中。
DataObserver提供JMX/HTTP服務(wù),供后續(xù)MA抓取使用,其中Http服務(wù)注冊(cè)了三個(gè)handler,分別為HttpJEEJVMObserver、HttpJEEMonitorObserver、 HttpJEEProfileObserver。不同的handler暴露了不同的接口。
MonitorHandler包下的Handler類具體處理Monitor的指標(biāo)數(shù)據(jù)計(jì)算和統(tǒng)計(jì)。
捕獲點(diǎn)剖析CaptureFrameWork框架提供了統(tǒng)一的捕獲入口點(diǎn),在UAVServer中分別提供了同步方法與異步方法:
同步捕獲入口點(diǎn):
runMonitorCaptureOnServerCapPoint
異步捕獲入口點(diǎn):
runMonitorAsyncCaptureOnServerCapPoint
同步與異步調(diào)用的差異分析:
異步比同步多增加了一個(gè)參數(shù)CaptureContextMapFromAnotherThread,該參數(shù)若不為空,則需要合并上下文的信息。一般情況下在使用異步方法埋點(diǎn)時(shí),在方法執(zhí)行前調(diào)用異步捕獲方法傳入的CaptureContextMapFromAnotherThread為空,并返回封裝好的上下文信息,在方法執(zhí)行結(jié)束后調(diào)用異步捕獲方法傳入上下文信息,并進(jìn)行上下文信息合并,再進(jìn)行具體的捕獲操作,具體可參考以下代碼片段:
方法執(zhí)行前的異步調(diào)用:
方法執(zhí)行后的異步調(diào)用如下,其中ccMap為異步調(diào)用返回的封裝好的上下文信息:
抓取行為剖析Monitor接口:提供了多個(gè)接口,其中最主要的是doCapture與doPreStore方法,doCapture用來(lái)實(shí)現(xiàn)在特定的捕獲點(diǎn)執(zhí)行抓取數(shù)據(jù)行為,doPreStore方法用來(lái)實(shí)現(xiàn)在存儲(chǔ)到數(shù)據(jù)結(jié)構(gòu)之前的一些捕獲動(dòng)作,做一些特殊數(shù)據(jù)的處理。
StandardMonitor類: Monitor接口的具體實(shí)現(xiàn)類。
StandardMonitorRepository類:存儲(chǔ)實(shí)時(shí)數(shù)據(jù)抓取數(shù)據(jù)結(jié)構(gòu)。
MonitorElementInstance接口:存儲(chǔ)實(shí)時(shí)數(shù)據(jù)抓取數(shù)據(jù)結(jié)構(gòu)的實(shí)例接口。
StandardMonitorElementInstance類:MonitorElementInstance接口的具體實(shí)現(xiàn)類。
無(wú)論是同步捕獲入口點(diǎn)還是異步捕獲入口點(diǎn)都會(huì)執(zhí)行doCapture方法,代碼片段如下:
monitor.doCapture是調(diào)用了Monitor接口中的doCapture,其實(shí)現(xiàn)類是StandardMonitor。
StandardMonitor中的doCapture方法主要做了如下操作:
根據(jù)參數(shù)獲取當(dāng)前的MonitorElement數(shù)組,MonitorElement數(shù)組通過(guò)StandardMonitorRepository的getElementByCapId實(shí)現(xiàn);
循環(huán)處理MonitorElement數(shù)組,獲取捕捉數(shù)據(jù)實(shí)現(xiàn)類,根據(jù)實(shí)現(xiàn)類獲取當(dāng)前要執(zhí)行的handler,最后根據(jù)當(dāng)前獲取的handler判斷捕獲階段(precap/docap),然后進(jìn)行相應(yīng)的處理。不同的handler根據(jù)不同的特性處理生成MonitorElementInstance,最后將結(jié)果存儲(chǔ)在StandardMonitorRepository數(shù)據(jù)結(jié)構(gòu)中。
以ServerEndRespTimeCapHandler(服務(wù)端抓取行為)為例:
preCap方法:只記錄了服務(wù)的開(kāi)始請(qǐng)求時(shí)間。
doCap方法:根據(jù)不同的monitorElemId進(jìn)行不同的邏輯處理,最后封裝好MonitorElementInstance實(shí)例,然后再進(jìn)行抓取行為結(jié)果的處理,其中包含最大值消峰、最大值、最小值、返回狀態(tài)碼、時(shí)間戳更新、計(jì)數(shù)等相應(yīng)的數(shù)據(jù)處理。
什么是實(shí)時(shí)數(shù)據(jù)即運(yùn)行時(shí)數(shù)據(jù),指的是在程序運(yùn)行時(shí)產(chǎn)生的信息,程序占用的CPU、堆內(nèi)存、JVM信息以及提供服務(wù)訪問(wèn)與客戶端調(diào)用的相關(guān)統(tǒng)計(jì)信息(平均響應(yīng)時(shí)間、訪問(wèn)計(jì)數(shù)等)。
服務(wù)端數(shù)據(jù)采集DefaultMonitorSupporter的實(shí)現(xiàn)
服務(wù)端數(shù)據(jù)采集以DefaultMonitorSupporter.start為入口點(diǎn),構(gòu)建monitor實(shí)例:
默認(rèn)構(gòu)建service類型的StandardMonitor實(shí)例,其中包含StandardMonitorRepository實(shí)例,StandardMonitorRepository實(shí)例注冊(cè)monitor,一個(gè)該實(shí)例包含多個(gè)MonitorElement實(shí)例,并將所有的MonitorElement實(shí)例保存在elemsMap屬性中。
elemsMap屬性根據(jù)不同的采集對(duì)象保存不同的采集類handler:
ServerEndRespTimeCapHandler:采集Server、APP、URL的響應(yīng)時(shí)間和加載計(jì)數(shù)等.
JVMStateCapHandler:采集jvm狀態(tài),包括Heap使用、GC計(jì)數(shù)、線程計(jì)數(shù)、CPU、class計(jì)數(shù)等。
代碼片段如下:
客戶端數(shù)據(jù)采集DefaultClientMonitorSupporter的實(shí)現(xiàn)
客戶端數(shù)據(jù)采集以DefaultClientMonitorSupporter.start為入口點(diǎn),構(gòu)建monitor實(shí)例:
默認(rèn)構(gòu)建client類型的StandardMonitor實(shí)例,其中包含StandardMonitorRepository實(shí)例,StandardMonitorRepository實(shí)例注冊(cè)monitor,一個(gè)該實(shí)例包含多個(gè)MonitorElement實(shí)例,并將所有的MonitorElement實(shí)例保存在elemsMap屬性中。
elemsMap:屬性只保存一個(gè)ClientRespTimeCapHandler采集類。
ClientRespTimeCapHandler:采集客戶端的響應(yīng)時(shí)間和加載計(jì)數(shù)等。
無(wú)論是客戶端的數(shù)據(jù)采集還是服務(wù)端的數(shù)據(jù)采集,都會(huì)將monitor安裝到DataObserver中;并且最后都會(huì)將構(gòu)建成功的monitor綁定至指定的捕獲方法(即precap和docap)。
DataObServer的實(shí)現(xiàn)DataObServer提供了兩種模式來(lái)暴露接口數(shù)據(jù),分別為JMX和HTTP:
HTTP方式:
由HttpDataObserverWorker.start作為入口點(diǎn),分別注冊(cè)了三個(gè)handler,分別為獲取JVM數(shù)據(jù)、Monitor數(shù)據(jù)以及profile數(shù)據(jù)的handler。不同的handler暴露了不同的接口,最終都返回了JSON格式的數(shù)據(jù)。
JMX方式:
JMX代理通過(guò)getMBeanInfo方法獲取暴露的接口,來(lái)獲取數(shù)據(jù);
DataObServer還提供了安裝與卸載monitor、增加與移除listener以及獲取profile和monitor的方法:
讀完本文后相信大家對(duì)CaptureFramework框架有了基本的了解,并對(duì)CaptureFramework的應(yīng)用有了一定的感悟。本文只介紹了MOF相關(guān)的一部分內(nèi)容,若大家對(duì)MOF感興趣,歡迎大家后臺(tái)留言或添加小助手“uavstack-assist”申請(qǐng)加入官方用戶群,相信您一定會(huì)有所收獲。
官方網(wǎng)站:https://uavorg.github.io/main/
開(kāi)源地址:https://github.com/uavorg
UAV MOF工作原理之Agent注入機(jī)制原理:http://college.creditease.cn/...
宜信技術(shù)學(xué)院
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72859.html
摘要:攔截之前的準(zhǔn)備在應(yīng)用啟動(dòng)的特定生命周期內(nèi)改寫(xiě)字節(jié)碼,植入特定的邏輯處理代碼進(jìn)行攔截。劫持通過(guò)字節(jié)碼改寫(xiě)動(dòng)態(tài)代理等技術(shù),在客戶端調(diào)用代碼中嵌入特定處理邏輯,獲取調(diào)用相關(guān)的信息,如調(diào)用地址調(diào)用協(xié)議調(diào)用結(jié)果等。 這次我們?yōu)榇蠹規(guī)?lái)中間件增強(qiáng)框架專題(MOF)的最后一篇文章,為大家講解MOF中的InterceptFramework框架。該框架可以在應(yīng)用啟動(dòng)過(guò)程中獲取畫(huà)像信息,實(shí)現(xiàn)應(yīng)用畫(huà)像數(shù)據(jù)采...
摘要:頁(yè)面展示的統(tǒng)計(jì)追蹤等信息則通過(guò)的接口獲取四功能展示數(shù)據(jù)庫(kù)監(jiān)控目前已實(shí)現(xiàn)的功能有分類統(tǒng)計(jì)數(shù)據(jù)庫(kù)連接池監(jiān)控慢耗時(shí)分布統(tǒng)計(jì)慢統(tǒng)計(jì)慢追蹤以及調(diào)用鏈日志關(guān)聯(lián)功能。 作者: 王林林 出處:UAVStack智能運(yùn)維 來(lái)源:宜信技術(shù)學(xué)院技術(shù)沙龍001期|AI中臺(tái):一種敏捷的智能業(yè)務(wù)支持方案|宜信技術(shù)沙龍 3月28日晚8點(diǎn)線上直播,點(diǎn)擊報(bào)名 UAVStack是一個(gè)全維監(jiān)控與應(yīng)用運(yùn)維平臺(tái)。UAV.Mon...
摘要:在該版本發(fā)布之后,開(kāi)發(fā)團(tuán)隊(duì)并不會(huì)繼續(xù)發(fā)布新的特性,而會(huì)著眼于進(jìn)行重大的錯(cuò)誤修復(fù)。發(fā)布每六個(gè)星期,團(tuán)隊(duì)就會(huì)創(chuàng)建新的分支作為發(fā)布通道,本文即是對(duì)新近發(fā)布的版本進(jìn)行簡(jiǎn)要介紹。 showImg(https://segmentfault.com/img/remote/1460000013229009); 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn);分為新聞熱...
摘要:原文地址沒(méi)想到這篇文章這么晚才出,最近發(fā)生了太多的事情,已致于心態(tài)全無(wú),最終也離開(kāi)了現(xiàn)在的公司,沒(méi)想到是這么的狼狽一個(gè)人的光芒可以放到很大也可以小到微乎其微,如果不能好好的規(guī)劃最終也只能默默的承受世上沒(méi)有相同的感同身受,感受真實(shí)才能真正的 原文地址:https://gmiam.com/post/react-... 沒(méi)想到這篇文章這么晚才出,最近發(fā)生了太多的事情,已致于心態(tài)全無(wú),最終也離...
閱讀 2273·2023-04-25 14:50
閱讀 1273·2021-10-13 09:50
閱讀 1874·2019-08-30 15:56
閱讀 1853·2019-08-29 15:29
閱讀 2892·2019-08-29 15:27
閱讀 3569·2019-08-29 15:14
閱讀 1205·2019-08-29 13:01
閱讀 3306·2019-08-26 14:06