赵志浩
Published on 2023-03-01 / 17 Visits
1
0

1、Skywalking

apm-application-toolkit

该服务下的代码都是给对应的客户端应用程序提供的 API 服务。比如上述的apm-toolkit-log4j-2.x 这个服务中定义的相关 Appender,都是需要在对应的客户端的 log.xml 中配置对应的 Appender 使用的。

但是你仔细去看这个 Appender 的具体实现,会发现都是空的定义,并没有具体的实现,那么具体的实现方式是什么?

好吧,实际具体的实现是在 Agent 里面,此处定义空的 API 主要是做 Agent 切面用的。后面看 Agent 的代码时会一目了然了。

apm-toolkit-activation

apm-toolkit-activation 服务,俗称激活服务,实际就是对应的 Agent 插件,该 Agent 插件主要就是拦截对应 API 服务中的相关类和方法,然后实现对应的内容发送。

也就是,具体的代码实现,日志发送到那里,这些能力,都是在对应插件的代码中实现的。

换句话说,客户端服务只是引入了apm-application-toolkit这个服务包中的 API 是没有具体含义的,必须要配合 Agent 启动后才会有具体效果。

目的是客户端的包里引用 Jar 时,不需要再弱引用各种 Skywalking 的其他 core 的jar了,只需要使用 Agent 就自动激活该 API 中的能力。

apm-agent-core

使用 OpenTelemetry 零代码修改接收 SkyWalking 追踪数据

Sky 本身是基于Dapper的思想设计的,所以虽然设计思路相同,但对于具体的协议标准,字段定义,和 Opentelmetry 这些的字段定义是完全不同的。

所以才会有各种插件来实现数据格式协议的转换,比如上述的插件添加到对应的 Opentelmetry 的 server 端后,可以实现支持 Sky Agent 上报数据的兼容。

Sky Server 端本身,也支持了对于 OpenTelmetry 协议格式的上报。

TracingContextTest

debug 执行一下这个测试类中testSpanLimit()的方法,就会很明确的知道 Sky 针对全链路中所设计的数据结构。TracingContext 内维护 TraceSegment。

createEntrySpan,createLocalSpan,createExitSpan 三者 Span 使用上的区别。

Span 最初被创建后会存储在 TracingContext 的 LinkList 当中;

stopSpan后会将 span 转移到 TraceSegment 的 spans 属性当中。

表示当前 span 已经结束,tracecontext 则不再维护该 Span,由对应的 TraceSegment 来维护;

每次 stopSpan 转移该 span 到 TraceSegment 中时,会检测该 Segment 是否符合推送标准,符合,则讲 TraceSegment 对象和对象属性中引用的数据全部推送到远端。

关于 EntrySpan 和 LocalSpan 以及 ExitSpan 的区别也可以参考这里

原创声明:作者:赵志浩、个人博客地址:https://zhaozhihao.com

原创声明:笔名:陈咬金、 博客园地址:https://www.cnblogs.com/zh94/


Comment