中间件增强框架之-CaptureFramework框架
一、背景
应用服务监控是智能运维系统的重要组成部分。在UAV系统中,中间件增强框架(MOF)探针提供了应用画像及性能数据收集等功能,其中数据收集功能主要采集四类数据:实时数据、画像数据、调用链接数据生成以及线程数据分析数据。为实现实时数据采集,UAVStack设计了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为空,并返回封装好的上下文信息,在方法执行结束后调用异步捕获方法传入上下文信息,并进行上下文信息合并,再进行具体的捕获操作,具体可参考以下代码片段:
- 方法执行前的异步调用
- 方法执行后的异步调用如下,其中ccMap为异步调用返回的封装好的上下文信息
2.5 抓取行为剖析
- 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实例,然后再进行抓取行为结果的处理,其中包含最大值消峰、最大值、最小值、返回状态码、时间戳更新、计数等相应的数据处理。
三、实时数据采集
3.1 什么是实时数据
即运行时数据,指的是在程序运行时产生的信息,程序占用的CPU、堆内存、JVM信息以及提供服务访问与客户端调用的相关统计信息(平均响应时间、访问计数等)。
3.2 服务端数据采集
DefaultMonitorSupporter的实现
服务端数据采集以DefaultMonitorSupporter.start为入口点,构建monitor实例:
默认构建service类型的StandardMonitor实例,其中包含StandardMonitorRepository实例,StandardMonitorRepository实例注册monitor,一个该实例包含多个MonitorElement实例,并将所有的MonitorElement实例保存在elemsMap属性中。
elemsMap属性根据不同的采集对象保存不同的采集类handler:
- ServerEndRespTimeCapHandler:采集Server、APP、URL的响应时间和加载计数等.
- JVMStateCapHandler:采集jvm状态,包括Heap使用、GC计数、线程计数、CPU、class计数等。
代码片段如下:
3.3 客户端数据采集
DefaultClientMonitorSupporter的实现
客户端数据采集以DefaultClientMonitorSupporter.start为入口点,构建monitor实例:
默认构建client类型的StandardMonitor实例,其中包含StandardMonitorRepository实例,StandardMonitorRepository实例注册monitor,一个该实例包含多个MonitorElement实例,并将所有的MonitorElement实例保存在elemsMap属性中。
- elemsMap:属性只保存一个ClientRespTimeCapHandler采集类。
- ClientRespTimeCapHandler:采集客户端的响应时间和加载计数等。
无论是客户端的数据采集还是服务端的数据采集,都会将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的方法:
官方网站:https://uavorg.github.io/main/
开源地址:https://github.com/uavorg
作者:王林林
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云Link TEE助力平头哥CK810T安全处理器获全球首个Ali ISA架构的GP TEE功能认证
2019年7月3日,平头哥半导体有限公司(以下简称:平头哥)基于810T安全处理器的TEE操作系统,正式获得GlobalPlatform(以下简称GP)TEE兼容性认证证书,这标志着平头哥CPU IP高性能处理器成为大陆首家获得认证的CPU IP企业,同时阿里云Link TEE技术助力平头哥810T安全处理器开拓高性能CPU在安防监控、人工智能、机器视觉等领域,全面开启阿里巴巴集团新技术赛道下,面向IC生态发展的云端协同、软硬一体的新时代里程碑。 可信执行环境TEE是一种整合系统硬件与软件的全系统的安全解决方案,其可以保证加载到该环境内部的代码和数据的安全性、机密性以及完整性。GP作为跨行业的国际标准组织,也是全球基于安全芯片的统一基础设施标准制定者,由数百家标准化安全组件成员公司,通过制定支持协作和开放性生态系统的规范来推动信任和
- 下一篇
Bytom Dapp 开发笔记(一):架构设计
简介 研究比原链已经一年了,用比原链做了几个dapp,而且最近还做了一个基于他们插件钱包的dapp,总结了一些遇到的坑,还有一些技术细节,接下来我会分成三章,从dapp设计架构上,到深入到源码分析去帮各位介绍一下比原链的dapp,还有分析比原官方最近发布的dapp的架构。 Dapp架构设计 这个是所有工作的基础,从看完比原链源码使用过比原的钱包后,我们就在思考比原链的dapp如何做,应该说是区块链应用应该如何做,我们之前尝试过用以太坊、比特币、超级账本去做dapp。先总结一下区块链dapp的痛点: 1)没办法保证上链前数据的真实性; 2)Tps很低; 3)接入成本高,需要自己搭建节点; Dapp架构方案 我现在总结了两个基于比原链的dapp架构方案:(如果有新版或者比较好的解决方案欢迎交流) Dapp肯定离不开复杂的业务,所以肯定会用到比原链的智能合约,以下方案都支持智能合约。 一、搭建区块链node 其实就是自己搭建个节点,然后应用直接调用节点提供的接口,完成了区块链的业务内容,比原链的源码整合了钱包功能,搭建也比较方便,几句代码就可以搭建完了,但是这样的业务视乎不大合理,因为这种后...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Hadoop3单机部署,实现最简伪集群
- CentOS关闭SELinux安全模块
- CentOS7,8上快速安装Gitea,搭建Git服务器
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 设置Eclipse缩进为4个空格,增强代码规范