目錄
一、背景
二、CaptureFramework運作原理
2.1 關鍵技術說明
三、即時數據採集
3.1 什麼是即時數據
3.2 服務端資料擷取
#3.3 用戶端資料擷取
3.4 DataObServer的實作
首頁 運維 安全 如何進行CaptureFramework框架分析

如何進行CaptureFramework框架分析

Jun 02, 2023 pm 10:01 PM
captureframework

一、背景

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

二、CaptureFramework運作原理

如何進行CaptureFramework框架分析

2.1 關鍵技術說明

  • JavaAssist

  • #Monitor擷取系統

  • precap/docap

  • #2.2 架構說明

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

  • UAVServer單例:作為統一的捕獲入口點,提供了同步和非同步方法。

StandardMonitor:實作了Monitor接口,是即時資料抓取實作類,提供了doCapture方法,負責抓取行為和產生抓取結果。

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

  • StandardMonitorRepository:儲存即時資料擷取資料結構。

  • DataObserver:暴露了JMX/HTTP介面資料。

2.3 關鍵類別說明

#Monitor即時監控主要是從DefaultMonitorSupporter類別啟動初始化StandardMonitor對象,透過CaptureFramework將monitor物件安裝到DataStore物件中。
  • DataObserver提供JMX/HTTP服務,供後續MA抓取使用,其中Http服務註冊了三個handler,分別為HttpJEEJVMObserver、HttpJEEMonitorObserver、 HttpJEEProfileObserver。不同的handler暴露了不同的介面。
  • MonitorHandler套件下的Handler類別具體處理Monitor的指標資料計算和統計。
2.4 捕獲點剖析

CaptureFrameWork框架提供了統一的捕獲入口點,在UAVServer中分別提供了同步方法與非同步方法:
  • 同步擷取入口點:runMonitorCaptureOnServerCapPoint

如何進行CaptureFramework框架分析#非同步擷取入口點:runMonitorAsyncCaptureOnServerCapPoint

  • #2.4.1 同步與非同步呼叫的差異分析

  • 非同步比同步多增加了一個參數CaptureContextMapFromAnotherThread,若不為空,則需要合併上下文的資訊。一般情況下在使用非同步方法埋點時,在方法執行前調用異步捕獲方法傳入的CaptureContextMapFromAnotherThread為空,並返回封裝好的上下文信息,在方法執行結束後調用異步捕獲方法傳入上下文信息,並進行上下文資訊合併,再進行具體的擷取操作,具體可參考以下程式碼片段:

如何進行CaptureFramework框架分析

#方法執行前的非同步呼叫

  • 方法執行後的非同步呼叫如下,其中ccMap為非同步呼叫傳回的封裝好的上下文資訊

  • 2.5 抓取行為剖析

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

StandardMonitor類別: Monitor介面的具體實作類別。

如何進行CaptureFramework框架分析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實例,然後再進行抓取行為結果的處理,其中包含最大值消峰、最大值、最小值、傳回狀態碼、時間戳更新、計數等對應的資料處理。

三、即時數據採集

3.1 什麼是即時數據

即運行時數據,指的是程式運行時產生的信息,程式佔用的CPU、堆記憶體、JVM資訊以及提供服務存取與客戶端呼叫的相關統計資訊(平均回應時間、存取計數等)。

3.2 服務端資料擷取

DefaultMonitorSupporter的實作

如何進行CaptureFramework框架分析

服務端資料擷取以DefaultMonitorSupporter.start為入口點,建構monitor實例:

如何進行CaptureFramework框架分析

預設建置service類型的StandardMonitor實例,其中包含StandardMonitorRepository實例,StandardMonitorRepository實例註冊monitor,一個該實例包含多個MonitorElement實例,並將所有的MonitorElement實例儲存在elemsMap屬性中。

elemsMap屬性根據不同的採集物件保存不同的採集類別handler:

  • ServerEndRespTimeCapHandler:擷取Server、APP、URL的回應時間和載入計數等.

  • JVMStateCapHandler:採集jvm狀態,包含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框架分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)