资讯专栏INFORMATION COLUMN

中间件增强框架之-CaptureFramework框架

zhaofeihao / 2192人阅读

摘要:本文为大家讲解中的框架。在系统中,中间件增强框架探针提供了应用画像及性能数据收集等功能,其中数据收集功能主要采集四类数据实时数据画像数据调用链接数据生成以及线程数据分析数据。提供服务,供后续抓取使用,其中服务注册了三个,分别为。

本文为大家讲解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/...

宜信技术学院

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72859.html

相关文章

  • 间件增强框架InterceptFramework

    摘要:拦截之前的准备在应用启动的特定生命周期内改写字节码,植入特定的逻辑处理代码进行拦截。劫持通过字节码改写动态代理等技术,在客户端调用代码中嵌入特定处理逻辑,获取调用相关的信息,如调用地址调用协议调用结果等。 这次我们为大家带来中间件增强框架专题(MOF)的最后一篇文章,为大家讲解MOF中的InterceptFramework框架。该框架可以在应用启动过程中获取画像信息,实现应用画像数据采...

    chnmagnus 评论0 收藏0
  • UAVStack的慢SQL数据库监控功能及其实现

    摘要:页面展示的统计追踪等信息则通过的接口获取四功能展示数据库监控目前已实现的功能有分类统计数据库连接池监控慢耗时分布统计慢统计慢追踪以及调用链日志关联功能。 作者: 王林林 出处:UAVStack智能运维 来源:宜信技术学院技术沙龙001期|AI中台:一种敏捷的智能业务支持方案|宜信技术沙龙 3月28日晚8点线上直播,点击报名 UAVStack是一个全维监控与应用运维平台。UAV.Mon...

    luodongseu 评论0 收藏0
  • 前端每周清单第 50 期: AngularJS and Long Term Support, Web

    摘要:在该版本发布之后,开发团队并不会继续发布新的特性,而会着眼于进行重大的错误修复。发布每六个星期,团队就会创建新的分支作为发布通道,本文即是对新近发布的版本进行简要介绍。 showImg(https://segmentfault.com/img/remote/1460000013229009); 前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点;分为新闻热...

    DobbyKim 评论0 收藏0
  • React系列 Redux 架构模式

    摘要:原文地址没想到这篇文章这么晚才出,最近发生了太多的事情,已致于心态全无,最终也离开了现在的公司,没想到是这么的狼狈一个人的光芒可以放到很大也可以小到微乎其微,如果不能好好的规划最终也只能默默的承受世上没有相同的感同身受,感受真实才能真正的 原文地址:https://gmiam.com/post/react-... 没想到这篇文章这么晚才出,最近发生了太多的事情,已致于心态全无,最终也离...

    xfee 评论0 收藏0

发表评论

0条评论

zhaofeihao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<