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