iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何进行CaptureFramework框架分析
  • 833
分享到

如何进行CaptureFramework框架分析

2023-06-04 23:06:23 833人浏览 安东尼
摘要

这篇文章跟大家分析一下“如何进行CaptureFramework框架分析”。内容详细易懂,对“如何进行CaptureFramework框架分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起

这篇文章跟大家分析一下“如何进行CaptureFramework框架分析”。内容详细易懂,对“如何进行CaptureFramework框架分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“如何进行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框架分析就分享到这里啦,希望上述内容能够让大家有所提升。如果想要学习更多知识,请大家多多留意小编的更新。谢谢大家关注一下编程网网站!

--结束END--

本文标题: 如何进行CaptureFramework框架分析

本文链接: https://www.lsjlt.com/news/240420.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行CaptureFramework框架分析
    这篇文章跟大家分析一下“如何进行CaptureFramework框架分析”。内容详细易懂,对“如何进行CaptureFramework框架分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起...
    99+
    2023-06-04
  • 如何进行jQuery源码的整体框架分析
    这篇文章将为大家详细讲解有关如何进行jQuery源码的整体框架分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。先附上jQuery的代码结构。JS代码(fu...
    99+
    2024-04-02
  • 如何进行分布式事务框架GTS全解析
    今天就跟大家聊聊有关如何进行分布式事务框架GTS全解析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。全局事务服务(Global Transaction Service,简称 GTS)...
    99+
    2023-06-04
  • 如何进行Spring AOP框架实现的结构分析
    如何进行Spring AOP框架实现的结构分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。从实现的角度来认识SpringAOP框架。观察的角度:从外部接口,内部实现,组成部分...
    99+
    2023-06-17
  • 如何进行C#实现AOP微型框架基础的分析
    如何进行C#实现AOP微型框架基础的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在向大家详细介绍C#实现AOP微型框架之前,首先让大家了解下微型框架的.cs文件,然后全面...
    99+
    2023-06-17
  • 如何进行iOS 容器化框架的基本思路分析
    这期内容当中小编将会给大家带来有关如何进行iOS 容器化框架的基本思路分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框...
    99+
    2023-06-05
  • Caffe框架如何进行视频分类任务
    要在Caffe框架中进行视频分类任务,可以按照以下步骤进行: 数据准备:首先需要准备好视频数据集,包括训练集和测试集。每个视频需...
    99+
    2024-04-02
  • 如何进行JDK7新特性中fork/join框架的原理分析
    如何进行JDK7新特性中fork/join框架的原理分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原理解析:fork分解,join结合。这个框架的本质是将一个任务分解成多个...
    99+
    2023-06-17
  • 如何在 Go 框架中使用 NumPy 存储进行数据分析?
    在数据科学领域,NumPy 是一个重要的 Python 库,它提供了高效的多维数组操作和数学函数。而 Go 语言作为另一种常用的编程语言,也有其自己的优点。本文将介绍如何在 Go 框架中使用 NumPy 存储进行数据分析,帮助您更好地利用这...
    99+
    2023-08-14
    框架 numpy 存储
  • 如何进行Hystrix开源框架
    本篇文章给大家分享的是有关如何进行Hystrix开源框架,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Spring Cloud集成了Hystrix,Hystrix在很多大公司里...
    99+
    2023-06-19
  • 如何进行安装ThinkPHP框架
    本文小编为大家详细介绍“如何进行安装ThinkPHP框架”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何进行安装ThinkPHP框架”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、环境要求在安装 Think...
    99+
    2023-07-05
  • 如何对SSM框架进行整合
    今天就跟大家聊聊有关如何对SSM框架进行整合,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。SSM(Spring+SpringMVC+Mybatis)是目前较为主流的企业级架构方案,不...
    99+
    2023-05-31
    ssm
  • Caffe框架如何进行目标实例分割任务
    Caffe框架通常用于图像分类和物体检测任务,而目标实例分割任务则需要更复杂的网络架构和训练技巧。以下是一种可能的方法来在Caffe...
    99+
    2024-04-02
  • 如何进行数据库的架构整体分析
    这期内容当中小编将会给大家带来有关如何进行数据库的架构整体分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  很少谈架构方面的事情,主要是因为这确实是个对知识面和知识深...
    99+
    2024-04-02
  • 怎么进行Java Spring框架的解析
    这篇文章给大家介绍怎么进行Java Spring框架的解析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Spring框架概述Spring是轻量级的开源的JAVAEE框架Spring可以解决企业应用开发的复杂性...
    99+
    2023-06-26
  • 如何进行Keras vs PyTorch框架比较
    如何进行Keras vs PyTorch框架比较,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在 Keras 与 PyTorch 的对比中,作者还给出了相同神经...
    99+
    2023-06-04
  • Caffe框架如何进行模型微调
    在Caffe框架中,模型微调通常通过在预训练模型的基础上对新数据集进行训练来实现。以下是在Caffe框架中进行模型微调的一般步骤: ...
    99+
    2024-04-02
  • 如何进行Python虚拟机的执行框架
    今天就跟大家聊聊有关如何进行Python虚拟机的执行框架,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在Python虚拟机中一个最核心的概念,在Python语言中,一切都是对象,也就...
    99+
    2023-06-17
  • 如何进行asmcmd的分析
    如何进行asmcmd的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在ASM实例中,所有的存储于ASM磁盘组中的文件对于操作系统命令而言是...
    99+
    2024-04-02
  • 如何进行Django Celery分析
    本篇文章为大家展示了如何进行Django Celery分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。对于任务调度的实现方案,其实开源的项目有很多。我先说说对于任务调度的认识,如果从数据库层面来说...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作