溫馨提示×

溫馨提示×

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

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

如何進行CaptureFramework框架分析

發(fā)布時間:2022-01-19 10:57:40 來源:億速云 閱讀:111 作者:柒染 欄目:網絡管理

這篇文章跟大家分析一下“如何進行CaptureFramework框架分析”。內容詳細易懂,對“如何進行CaptureFramework框架分析”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠對大家有所幫助。下面跟著小編一起深入學習“如何進行CaptureFramework框架分析”的知識吧。

一、背景

應用服務監(jiān)控是智能運維系統(tǒng)的重要組成部分。在UAV系統(tǒng)中,中間件增強框架(MOF)探針提供了應用畫像及性能數據收集等功能,其中數據收集功能主要采集四類數據:實時數據、畫像數據、調用鏈接數據生成以及線程數據分析數據。為實現實時數據采集,UAVStack設計了CaptureFramework框架,提供統(tǒng)一的數據抓取行為和生成抓取結果能力。

二、CaptureFramework運行原理

如何進行CaptureFramework框架分析

2.1 關鍵技術說明

  • JavaAssist

  • Monitor捕獲體系

  • precap/docap

2.2 架構說明

  • 捕獲點:支持Tomcat、MSCP、Springboot、Jetty埋點。

  • UAVServer單例:作為統(tǒng)一的捕獲入口點,提供了同步和異步方法。

  • StandardMonitor:實現了Monitor接口,是實時數據抓取實現類,提供了doCapture方法,負責抓取行為和生成抓取結果。

  • MonitorElemCapHandler:不同的抓取邏輯和抓取點的共同接口實現不同的埋點邏輯,提供了抓取行為的方法preCap與doCap以及生成抓取結果的方法preStore。

  • StandardMonitorRepository:存儲實時數據抓取數據結構。

  • DataObserver:暴露了JMX/HTTP接口數據。

2.3 關鍵類說明

  • Monitor實時監(jiān)控主要是從DefaultMonitorSupporter類啟動初始化StandardMonitor對象,通過CaptureFramework將monitor對象安裝到DataStore對象中。

  • DataObserver提供JMX/HTTP服務,供后續(xù)MA抓取使用,其中Http服務注冊了三個handler,分別為HttpJEEJVMObserver、HttpJEEMonitorObserver、 HttpJEEProfileObserver。不同的handler暴露了不同的接口。

  • MonitorHandler包下的Handler類具體處理Monitor的指標數據計算和統(tǒng)計。

2.4 捕獲點剖析

CaptureFrameWork框架提供了統(tǒng)一的捕獲入口點,在UAVServer中分別提供了同步方法與異步方法:

  • 同步捕獲入口點:runMonitorCaptureOnServerCapPoint

  • 異步捕獲入口點:runMonitorAsyncCaptureOnServerCapPoint

2.4.1 同步與異步調用的差異分析

異步比同步多增加了一個參數CaptureContextMapFromAnotherThread,該參數若不為空,則需要合并上下文的信息。一般情況下在使用異步方法埋點時,在方法執(zhí)行前調用異步捕獲方法傳入的CaptureContextMapFromAnotherThread為空,并返回封裝好的上下文信息,在方法執(zhí)行結束后調用異步捕獲方法傳入上下文信息,并進行上下文信息合并,再進行具體的捕獲操作,具體可參考以下代碼片段:

  • 方法執(zhí)行前的異步調用

如何進行CaptureFramework框架分析

  • 方法執(zhí)行后的異步調用如下,其中ccMap為異步調用返回的封裝好的上下文信息

如何進行CaptureFramework框架分析

2.5 抓取行為剖析

  • Monitor接口:提供了多個接口,其中最主要的是doCapture與doPreStore方法,doCapture用來實現在特定的捕獲點執(zhí)行抓取數據行為,doPreStore方法用來實現在存儲到數據結構之前的一些捕獲動作,做一些特殊數據的處理。

  • StandardMonitor類: Monitor接口的具體實現類。

  • StandardMonitorRepository類:存儲實時數據抓取數據結構。

  • MonitorElementInstance接口:存儲實時數據抓取數據結構的實例接口。

  • StandardMonitorElementInstance類:MonitorElementInstance接口的具體實現類。

無論是同步捕獲入口點還是異步捕獲入口點都會執(zhí)行doCapture方法,代碼片段如下:

如何進行CaptureFramework框架分析

monitor.doCapture是調用了Monitor接口中的doCapture,其實現類是StandardMonitor。

StandardMonitor中的doCapture方法主要做了如下操作:

  • 根據參數獲取當前的MonitorElement數組,MonitorElement數組通過StandardMonitorRepository的getElementByCapId實現;

  • 循環(huán)處理MonitorElement數組,獲取捕捉數據實現類,根據實現類獲取當前要執(zhí)行的handler,最后根據當前獲取的handler判斷捕獲階段(precap/docap),然后進行相應的處理。不同的handler根據不同的特性處理生成MonitorElementInstance,最后將結果存儲在StandardMonitorRepository數據結構中。

以ServerEndRespTimeCapHandler(服務端抓取行為)為例:

  • preCap方法:只記錄了服務的開始請求時間。

  • doCap方法:根據不同的monitorElemId進行不同的邏輯處理,最后封裝好MonitorElementInstance實例,然后再進行抓取行為結果的處理,其中包含最大值消峰、最大值、最小值、返回狀態(tài)碼、時間戳更新、計數等相應的數據處理。

三、實時數據采集

3.1 什么是實時數據

即運行時數據,指的是在程序運行時產生的信息,程序占用的CPU、堆內存、JVM信息以及提供服務訪問與客戶端調用的相關統(tǒng)計信息(平均響應時間、訪問計數等)。

3.2 服務端數據采集

DefaultMonitorSupporter的實現

如何進行CaptureFramework框架分析

服務端數據采集以DefaultMonitorSupporter.start為入口點,構建monitor實例:

如何進行CaptureFramework框架分析

默認構建service類型的StandardMonitor實例,其中包含StandardMonitorRepository實例,StandardMonitorRepository實例注冊monitor,一個該實例包含多個MonitorElement實例,并將所有的MonitorElement實例保存在elemsMap屬性中。

elemsMap屬性根據不同的采集對象保存不同的采集類handler:

  • ServerEndRespTimeCapHandler:采集Server、APP、URL的響應時間和加載計數等.

  • JVMStateCapHandler:采集jvm狀態(tài),包括Heap使用、GC計數、線程計數、CPU、class計數等。

代碼片段如下:

如何進行CaptureFramework框架分析

如何進行CaptureFramework框架分析

3.3 客戶端數據采集

DefaultClientMonitorSupporter的實現 如何進行CaptureFramework框架分析

客戶端數據采集以DefaultClientMonitorSupporter.start為入口點,構建monitor實例:

如何進行CaptureFramework框架分析

默認構建client類型的StandardMonitor實例,其中包含StandardMonitorRepository實例,StandardMonitorRepository實例注冊monitor,一個該實例包含多個MonitorElement實例,并將所有的MonitorElement實例保存在elemsMap屬性中。

  • elemsMap:屬性只保存一個ClientRespTimeCapHandler采集類。

  • ClientRespTimeCapHandler:采集客戶端的響應時間和加載計數等。

如何進行CaptureFramework框架分析

無論是客戶端的數據采集還是服務端的數據采集,都會將monitor安裝到DataObserver中;并且最后都會將構建成功的monitor綁定至指定的捕獲方法(即precap和docap)。

3.4 DataObServer的實現

DataObServer提供了兩種模式來暴露接口數據,分別為JMX和HTTP:

  • HTTP方式:由HttpDataObserverWorker.start作為入口點,分別注冊了三個handler,分別為獲取JVM數據、Monitor數據以及profile數據的handler。不同的handler暴露了不同的接口,最終都返回了JSON格式的數據。

  • JMX方式:JMX代理通過getMBeanInfo方法獲取暴露的接口,來獲取數據。

DataObServer還提供了安裝與卸載monitor、增加與移除listener以及獲取profile和monitor的方法:

如何進行CaptureFramework框架分析

關于如何進行CaptureFramework框架分析就分享到這里啦,希望上述內容能夠讓大家有所提升。如果想要學習更多知識,請大家多多留意小編的更新。謝謝大家關注一下億速云網站!

向AI問一下細節(jié)

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

AI