该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

技术方案说明书


[toc]

核心组件名称:

1.Sampler采样器

​ 即埋点时的信息收集器,是所有数据的源头和触发点

2.Collector收集器

​ Sampler提供初始样本信息,Collector则从这些样本信息中负责筛选和加工,具体筛选逻辑和加工方式由业务决定。

3.IEventStorage 转储承载介质

​ 不论是采集到的样本,还是过滤加工后的数据,都需要进行一个存储(永久、缓存、转储到第三方服务)承载过程。

4. 框架处理流程图:

框架处理流程图


Sampler采集器相关能力特征:

1.代码侵入性

​ 对于大多数系统来说,业务功能都是先行的,往往都是业务相对稳定时,数据埋点相关需求才逐渐浮现,而这种埋点需求明显滞后于业务功能。 ​ 也就意味着,埋点采集时不能够改变业务代码本身的功能逻辑以及代码结构。

目前方案上是基于AOP的方式显示声明的拦截于方法签名上,并提供基于方法入参和方法返回结果值的方式进行业务回调。
该方案带来的特点是,基于Spring AOP的实现,可以对接口进行动态代理,也可以直接基于CGLIB做类增强。
但对于业务代码上也存在对应的前置条件,即需要原有的业务功能设计应该要有良好的接口设计规范和基于面向接口约定的意识。

( Spring AOP 相关资料)

2.功能影响性

​ 埋点采集或者样本采集,都是明确建立于业务目标之上,且与业务功能代码并行完成。 ​ 但由于业务功能代码的正常执行,不允许受到采样器异常的干扰。即采样器本身的处理异常,不能够对正常的业务功能有影响。

目前方案上对于采样过程默认是做了全局的异常捕获,并主动打印错误日志。
带来的效果是,不论框架上本身出现任何故障,都不会发生异常外抛.
但是,由于框架异常只能通过日志方式跟踪,开发者需要细心的跟踪异常日志。

3.采样效率(性能)

​ 采样的本身,就是在业务功能前后做一定的逻辑添加。这种逻辑添加多少会对主线的业务功能有一定的性能影响。 ​ 特别是采集的初始来源往往只有几个关键信息,比如来自于方法入参,或者方法返回值。 ​ 为了达到业务上的采样目的,则需要对采样源的关键信息做扩展,并汇总相关信息,而这种扩展可能涉及到大量的IO操作。

目前方案上,样本采集支持样本率的概念,即允许业务上间隙性的抽取样本。但默认上是全量抽取。
采集过程则提供了异步采集和同步采集二种方式。
对于异步采集主要是基于线程池,并支持线程池相关配置,以及一些采样时的过滤正则支持,合适的参数配置,可用于调整吞吐量。

4.数据的转储

​ 对于已经获得的采样信息,需要**高效的转储到相应的存储介质或者后续的数据清洗流程 **

原始样本数据从采样到清洗加工,中间需要依赖一定的流通承载管道。
一般来说处理方式有二种:
a) 通过网络直接发送到收集器,比如:HTTP协议
b) (同步或者异步,实时或者批处理)写入样本池,再由收集器从样本池中读取并消费数据,比如:数据库或者文件

目前方案上提供了三种模式,即IEventStorage对应的三种实现策略:
a) HTTP。直接发送至收集器的endpoint
b) MQ。消息队列转储,比如:Kafka,ActiveMQ等
c) Redis。基于Redis List的简单MQ实现
d) Console或者文件日志打印。主要用于本机测试,请不要使用于生产环境。

其中MQ模式,为框架默认方式。


使用方法

1. 引入pom:

​ <dependency> ​ <groupId>com.hyw</groupId> ​ <artifactId>trace</artifactId> ​ <version>0.0.1</version> ​ </dependency> ​

2. 采集端需要在启动类上添加如下注解:@EnableZTraceClient

​ 由于默认采集到的样本数据是基本MQ转储的,故需要开发上配置相应的MQ信息。 ​ 此配置信息请参考Spring cloud Stream的相关配置参数即可。

  • TraceSampler 业务核心采样器
    此为开发者需要根据业务需求自行扩展并注入到注解上下文,具体使用描述,请参考API说明文档

  • TraceSource 核心注解
    用于定义采集的方式和相关分组类别,此注解必须要求注入TraceSampler的扩展实现 (注:对于注解使用,请务必遵循AOP原则,此不在本框架讨论范围)

  • MultiTraceSources 多TraceSource支持
    考虑到同一个AOP业务上可能需要多种维护的逻辑采集,故提供一个多TraceSource的采集支持

3. 收集端需要在启动类上添加如下注解:@EnableZTraceServer

​ 由于默认读取的样本源是从MQ中消费的,故需要开发上配置相应的MQ信息。 ​ 此配置信息请参考Spring cloud Stream的相关配置参数即可。

4. ZTraceClient的相关配置

属性 数据类型 描述 默认值
ztrace.sampler.defalut.core.thread Integer Thread pool core size when sampling data if run aync task,dafault 200 200
ztrace.sampler.defalut.max.thread Integer Thread pool max size when sampling data if run aync task,dafault 400 400
ztrace.sampler.defalut.max.queue Integer Thread pool max queue size when sampling data if run aync task,dafault 5000 5000
ztrace.sampler.group.skip-pattern String Regx expression for Group property filter,default 'null' null
ztrace.sampler.type.skip-pattern String Regx expression for type property filter,default 'null' null
ztrace.client.meta.send.type String Approach of storage if sampling data. Support type: 'MQ' ,'HTTP',‘REDIS’ MQ
ztrace.client.meta.send.uri String Applicable if ztrace.client.meta.send.type=HTTP. Target receiver to collect trace event http://localhost:8080/ztrace/collect
ztrace.client.meta.send.dubug Boolean Applicable if ztrace.client.meta.send.type=HTTP. System will print out all request to the target URI true
ztrace.sampler.defalut.thread.keepalive Long when the number of threads is greater than the core, this is the maximum time that excess idle threads will wait for new tasks before terminating 1000
ztrace.client.meta.redis.topic String Applicable if ztrace.client.meta.send.type=REDIS. Setup the channel for data posting. ZTrace

5. ZTraceServer的相关配置

属性 数据类型 描述 默认值
ztrace.server.meta.receive.type String Approach of receive if collect data. Support type: 'MQ' ,'HTTP','REDIS'. System will automatically register the specific endpoint: /ztrace/collect. MQ
ztrace.server.meta.redis.topic String Applicable if ztrace.server.meta.receive.type=REDIS. Setup the channel for data receiving. ZTrace

空文件

简介

服务端埋点采集方案,已经涵盖采集、转储、管道流的实现,同时增加了基于多种不同介质的默认实现方案。 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化