中间件增强框架之InterceptFramework

栏目: 数据库 · 发布时间: 7年前

内容简介:本周我们为大家带来中间件增强框架专题(MOF)的最后一篇文章,为大家讲解MOF中的InterceptFramework框架。该框架可以在应用启动过程中获取画像信息,实现应用画像数据采集和存储。在智能运维中,应用服务所使用的组件及JAR包等相关信息非常重要,这些信息能够清晰地描绘一个应用服务的骨架,我们称这些信息为应用画像。在UAVStack中,中间件增强框架(MOF)下的

本周我们为大家带来中间件增强框架专题(MOF)的最后一篇文章,为大家讲解MOF中的InterceptFramework框架。该框架可以在应用启动过程中获取画像信息,实现应用画像数据采集和存储。

前言

在智能运维中,应用服务所使用的组件及JAR包等相关信息非常重要,这些信息能够清晰地描绘一个应用服务的骨架,我们称这些信息为应用画像。在UAVStack中,中间件增强框架(MOF)下的 InterceptFramework 可以在应用启动过程中获取画像信息。本文主要介绍InterceptFramework的架构原理和在此基础上实现的应用画像数据采集与存储。

整体架构

中间件增强框架之InterceptFramework

关键技术

  • Javaassist
  • Hook

关键类及功能

  • Profile数据和客户端监控指标主要通过 InterceptSupporthookProxy 机制捕获和监控。
  • Profile也会安装至 DataObserver 对象并暴露JMX/HTTP接口。

拦截之前的准备

1.在应用启动的特定生命周期内改写字节码,植入特定的逻辑处理代码进行拦截。

2.拦截框架对应的 Supporter 启动,从配置文件中获取应该装载的 Listener ,构建 InterceptSupport实例 ,把Listener添加到InterceptSupport实例中。

具体的拦截逻辑

在应用启动过程中的特定生命周期,之前植入的代码拦截逻辑开始执行InterceptSupport的 doIntercept 方法,遍历已注册的 Listener 监听器。每个监听器都继承自 InterceptEventListener类 。不同的子Listener对相应类型的画像采集处理: AppProfilingListener 负责监听所有服务画像事件, AppFrkHookFactoryListener 负责监听客户端画像事件。

架构说明

  • InterceptSupport: 单例作为统一的Profile/Client hook捕获入口点
  • InterceptContext: 捕获上下文接口, 所有捕获参数由Context封装
  • InterceptEventListener: 事件劫持监听器, 所有监听器需继承并注册监听
  • AppProfilingListener: 服务画像监听器, 监听所有服务画像事件
  • AppFrkHookFactoryListener: 客户端画像监听代理

关键类说明

  • StandardProfile: 实现了Profile接口,是画像数据抓取实现类,提供了doProfiling方法负责抓取行为和生成抓取结果;
  • ProfileHandler: 不同的抓取逻辑和抓取点的共同接口,实现不同的抓取逻辑;提供了抓取行为的doProfiling方法;
  • StandardProfileRepository: 存储画像数据抓取数据结构;
  • DataObserver: 暴露了JMX/HTTP接口数据;
  • Profile实时监控 在从AppProfilingListener类调用startProfiling时,将Profile对象安装到DataObserver对象中;
  • DataObserver 提供JMX/HTTP服务,供后续抓取使用,其中Http服务注册了 HttpJEEProfileObserver ,主要负责画像数据的抓取服务;
  • 各个 Handler 类具体处理抓取的各类数据。

画像数据

画像数据即静态数据,是在进程启动时即可得到的数据,包括操作系统相关的信息、程序相关的信息、程序启动后相关的初始化信息。

中间件增强框架之InterceptFramework

画像数据主要包括服务画像、溯源感知画像和客户端画像三部分,如上图所示。以下分别从这三个方面介绍画像采集:

服务画像采集

中间件增强框架之InterceptFramework

服务画像描述了服务本体的信息,包括应用唯一标识(AppID)、服务名(Service ID)、服务实例的URI、服务接口的URI、服务接口的元数据(类、方法、入参出参、注解、部署描述符)。

以Tomcat为例,应用的启动过程需要经过StandardContext的start方法。我们可以在此方法的最后植入代码逻辑进行拦截,通过拦截可以获取到以下信息:

  1. 应用名、webworkdir(工作目录)、servletcontext、contextpath、basepath(应用实际路径)等容器上下文信息;
  2. 根据相应的技术规范(Servlet、JAXRS、JAXWS、Spring等)获取画像数据,主要包括:通过反射的方式获取类和方法名以及出参入参信息、扫描注解类、获取注解信息、解析部署描述符文件(web.xml等)信息。

服务画像除了获取以上信息外,还获取应用的日志路径和所用JAR包等信息。

溯源画像采集

中间件增强框架之InterceptFramework

溯源画像采集主要借助HTTP协议Header中的字段进行溯源,通过中间件劫持技术拦截Tomcat中StandardEngineValve的Invoke方法,获取溯源数据。

收集的数据有以下几种:

  • Client Address: 直连客户端IP地址;
  • X-Forwarded-For: 如果存在,则为代理路由地址链,则直连客户端为代理服务;
  • Host: 表明远程主机甚至端口信息,如果直连客户端是代理服务,则Host为代理IP地址和端口;
  • User-Agent: 代理描述,可用来区分浏览器还是程序客户端,还可以提取很多浏览器终端信息;
  • UAV-Client-Src: HTTP客户端劫持加入的Header字段,用于UAV应用之间调用的拟合。

客户端画像采集

中间件增强框架之InterceptFramework

客户端画像通过对一系列常用中间件客户端进行劫持实现,目前已支持同步/异步http、数据库jdbc、redis(jedis,aredis,lettuce)、 mongodb 、rocketmq/rabbitmq/Kafka、ESClient等。

劫持通过javaassist字节码改写、动态代理等AOP技术,在客户端调用代码中嵌入特定处理逻辑,获取调用相关的信息,如调用地址、调用协议、调用结果等。

画像数据基于调用地址、访问协议、调用结果的特征提取来确定目标服务。

调用地址: 以类URI格式表示

  • http/https服务(业务/代理服务):http://:/
  • 关系型数据库(数据源服务):jdbc:<数据库类型>://:,:/<数据库名>
  • 非关系型数据库或缓存(数据源服务):<数据源类型>://:,:/<数据库集合名>
  • 消息队列(消息服务):mq:<消息中间件类型>://:/<队列名>

访问协议: 某种访问动作。例如HTTP的POST、 SQL 插入、发送/订阅消息、 Redis 的hgethashall、Mongo的Collection操作等。

访问结果特征: 服务的基础栈类型、是否集群,例如Nginx、Tomcat、Apache等。

以ESClient为例,我们可以劫持TransportService的sendRequest方法,植入我们的拦截代码逻辑。

与服务画像不同的是,客户端画像发生在具体客户端调用过程中,并非在应用的启动环节。

画像存储结构

画像存储按以下结构分层存储:

  • StandardProfileRespository存储某个应用的整个画像;
  • StandardProfileElement存储某类组件画像(服务端、客户端、日志、jar等);
  • ProfileElementInstance存储某类组件当中的某一个组件画像,以服务组件画像为例,如:如组件JAXRS、Servlets各为一个ProfileElementInstance,但它们同属于服务组件这一StandardProfileElement.

中间件增强框架之InterceptFramework

DataObserver提供了JMX和HTTP两种模式来暴露接口画像数据,这一点与实时数据类似,在我们MOF系列的兄弟篇《中间件增加框架之CaptureFramework》中已经详细介绍过,在此处不再赘述。

读完这篇文章,相信大家对中间件增加框架InterceptFramwork和应用画像实现过程有了一定的认识。后续我们将继续为大家推送更多UAV技术干货,敬请期待!

作者:李兴胜     宜信技术学院官网:http://college.creditease.cn/#/index


以上所述就是小编给大家介绍的《中间件增强框架之InterceptFramework》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Hacking

Hacking

Jon Erickson / No Starch Press / 2008-2-4 / USD 49.95

While other books merely show how to run existing exploits, Hacking: The Art of Exploitation broke ground as the first book to explain how hacking and software exploits work and how readers could deve......一起来看看 《Hacking》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具