如何进行CaptureFramework框架分析


这篇文章跟大家分析一下“如何进行CaptureFramework框架分析”。内容详细易懂,对“如何进行CaptureFramework框架分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“如何进行CaptureFramework框架分析”的知识吧。应用服务监控是智能运维系统的重要组成部分。在UAV系统中,中间件增强框架(MOF)探针提供了应用画像及性能数据收集等功能,其中数据收集功能主要采集四类数据:实时数据、画像数据、调用链接数据生成以及线程数据分析数据。为实现实时数据采集,UAVStack设计了CaptureFramework框架,提供统一的数据抓取行为和生成抓取结果能力。JavaAssistMonitor捕获体系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异步比同步多增加了一个参数CaptureContextM免费云主机域名apFromAnotherThread,该参数若不为空,则需要合并上下文的信息。一般情况下在使用异步方法埋点时,在方法执行前调用异步捕获方法传入的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提供了两种模式来暴露接口数据,分别为JMX和HTTP:HTTP方式:由HttpDataObserverWorker.start作为入口点,分别注册了三个handler,分别为获取JVM数据、Monitor数据以及profile数据的handler。不同的handler暴露了不同的接口,最终都返回了JSON格式的数据。JMX方式:JMX代理通过getMBeanInfo方法获取暴露的接口,来获取数据。DataObServer还提供了安装与卸载monitor、增加与移除listener以及获取profile和monitor的方法:关于如何进行CaptureFramework框架分析就分享到这里啦,希望上述内容能够让大家有所提升。如果想要学习更多知识,请大家多多留意小编的更新。谢谢大家关注一下云编程开发博客网站!

相关推荐: Webshell收集项目有哪些

这篇文章主要介绍Webshell收集项目有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、JSP高级对抗样本这个一个可能会改变你对JSP Webshell认知的项目,提供了18个JSP高级样本具有很高的研究价值。Github项目地…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/07 17:50
下一篇 02/07 17:50