如何进行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

  • 异步捕获入口点:runMonitorAsyncCaptureOnServerCapPoint

2.4.1 同步与异步调用的差异分析

异步比同步多增加了一个参数CaptureContextMapFromAnotherThread,该参数若不为空,则需要合并上下文的信息。一般情况下在使用异步方法埋点时,在方法执行前调用异步捕获方法传入的CaptureContextMapFromAnotherThread为空,并返回封装好的上下文信息,在方法执行结束后调用异步捕获方法传入上下文信息,并进行上下文信息合并,再进行具体的捕获操作,具体可参考以下代码片段:

  • 方法执行前的异步调用

如何进行CaptureFramework框架分析

  • 方法执行后的异步调用如下,其中ccMap为异步调用返回的封装好的上下文信息

如何进行CaptureFramework框架分析

2.5 抓取行为剖析

  • Monitor接口:提供了多个接口,其中最主要的是doCapture与doPreStore方法,doCapture用来实现在特定的捕获点执行抓取数据行为,doPreStore方法用来实现在存储到数据结构之前的一些捕获动作,做一些特殊数据的处理。

  • StandardMonitor类: Monitor接口的具体实现类。

  • StandardMonitorRepository类:存储实时数据抓取数据结构。

  • MonitorElementInstance接口:存储实时数据抓取数据结构的实例接口。

  • StandardMonitorElementInstance类:MonitorElementInstance接口的具体实现类。

无论是同步捕获入口点还是异步捕获入口点都会执行doCapture方法,代码片段如下:

如何进行CaptureFramework框架分析

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框架分析就分享到这里啦,希望上述内容能够让大家有所提升。如果想要学习更多知识,请大家多多留意小编的更新。谢谢大家关注一下亿速云网站!

文章标题:如何进行CaptureFramework框架分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/22982

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月5日 下午11:57
下一篇 2022年9月5日 下午11:58

相关推荐

  • windows notion中文版怎么设置

    notion变成中文版的方法 一、桌面版: 1、首先我们要下载一个汉化文件。 2、然后在其中下载“notion-zh_CN.js”这个文件。 3、下载完成后,我们找到“notion”软件,打开文件所在的位置。 4、进入后,打开“resources”文件夹。 5、接着依次进入“app”和“render…

    2022年9月20日
    1.3K00
  • windows该内存不能为read如何解决

    解决该内存不能为read的方法 名列前茅种:内存不能为read工具下载 1、内存不能为read工具在网上有好多版本,小编用过小黑内存不能为read工具,感觉还不错。这款软件通过处理调用CMD指令逐步恢复此BUG,很好的解决了因软件或者系统本身原因产生的不能为read错误 2、双击即可完成修复,重启电…

    2022年9月2日
    56400
  • 远程代码执行漏洞实例分析

    0x01 认识 mongo-express mongo-express是一个MongoDB的Admin Web管理界面,使用NodeJS、Express、Bootstrap3编写而成。目前mongo-express应该是Github上Star非常多的MongoDB admin管理界面。部署方便,使用…

    2022年9月26日
    85000
  • APACHE OFBIZ XMLRPC远程代码执行漏洞实例分析

    概述 研究人员报告了一个存在于Apache OFBiz中的反序列化漏洞。这个漏洞是由多个Java反序列化问题所导致的,当代码在处理发送至/webtools/control/xmlrpc的请求时,便有可能触发该漏洞。未经认证的远程攻击者将能够通过发送精心构造的恶意请求来触发并利用该漏洞,并实现任意代码…

    2022年9月13日
    81000
  • mysql的case when如何用

    在mysql中,“case when”用于计算条件列表并返回多个可能结果表达式之一;“case when”具有两种语法格式:1、简单函数“CASE[col_name]WHEN[value1]THEN[result1]…ELSE[default]END”;2、搜索函数“CASE WHEN[expr]T…

    2022年9月6日
    1.0K00
  • windows浩辰cad看图王图形怎么填充颜色

    浩辰cad看图王图形填充颜色: 答:浩辰cad看图王没有图形填充功能。 1、浩辰cad看图王只能修改图纸的背景颜色。 2、通过修改背景颜色,可以让图纸的观感更加清晰。 3、只有在CAD本体软件中才能使用图形填充颜色。 4、下载安装完成后,打开软件,在下方命令中输入“H”,回车运行。 5、打开图案填充…

    2022年9月21日
    95400
  • 电脑提示该内存不能为read如何解决

    电脑提示该内存不能为read的解决方法 1、打开运行窗口。 2、在运行窗口中输入命令cmd,回车确定。 2、将下面代码“for %1 in (%windir%system32*.dll) do regsvr32.exe /s %1”复制粘贴到管理员窗口中。 4、点击回车键,等待程序运行结束。 以上就…

    2022年9月2日
    67900
  • 如何用rank函数排名

    用rank函数排名的方法: 1、首先进入空白单元格,然后输入:=RANK( )来进行排名。 2、然后去点击E2单元格,即可获得rank的名列前茅个参数,然后输入逗号。 3、之后就可以去框选所有的数据,并且去获取函数的第二个参数。 4、然后按下F4,即可对rank函数的第二个参数做绝对引用。 5、按下…

    2022年8月30日
    78600
  • 网络安全的基础知识有哪些

    1、什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2、OSI参考模型的层次是什么? 有7个OSI层:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。 3、什么是骨干网? 骨干网络是集中的基础设施,旨在将不同的路由和数据分发到各种网络。…

    2022年8月29日
    48100
  • 同时利用多个僵尸网络攻击目标的示例分析

    APT33常以石油和航空业为攻击目标,最近的调查结果显示,该组织一直在使用大约12台经过多重混淆的C&C服务器来攻击特定目标。该组织主要在中东、美国和亚洲地区开展的针对性极强的恶意攻击活动。 每一个僵尸网络由12台以上受感染的计算机组成,用来攻击的恶意软件只有基本的功能,包括下载和运行其他恶…

    2022年9月18日
    55800
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部