分布式专题-链路追踪

175 阅读2分钟

关键词语:

全链路追踪Zipkin,Brave、Dapper等

分布式traceId的组成: MDC 

spring cloud sleuth

探针 ,Java agent

traceId  ,span

ELK  、 Prometheus,skywalking ,Arthas

可观测特征

1.日志  2.追踪 3.度量

数据收集的方式

1.基于日志的追踪   Sleuth  ,依赖日志的完整性,不够精确

 2.基于服务的追踪  注入追踪探针 JAVA AGENT  ,会有额外的http或者rpc发送调用信息 。 

        侵入性高,性能损耗 , 但是精确度高 

        zipkin ,skywalking ,Pinpoint 

3.基于边车代理的追踪, 在服务网格场景下使用, 只能实现服务调用层面的追踪     Envoy

MDC( 映射调试上下文 )原理: 

juejin.cn/post/725324…

juejin.cn/post/711433…

保证不同g的现场间的变量隔壁 , 保证线程上下文共享变量数据 原理是ThreadLocal

如果涉及父子线程 ,需要使用    InheritableThreadLocal  

Java Agent :

通过启动时对执行方法字节码的修改,来执行一些前置或者后置修改的操作 

sleuth  zipkin学习:

zipkin通过每次调用各个服务实例的spanId,组成Trace树,来存储一次完整调用链路 ,对应一个TraceId

sleuth 来收集调用信息, 发送给zipkin 

zipkin来做调用信息的存储统计展示

arthas:

动态追踪技术 

mp.weixin.qq.com/s/pL8ulnjdR…

思考:

三个维度

日志 + 度量 + 追踪

日志收集通过业务代码 代理 或者 Java agent 或者 服务调用抓包或者主动上报收集

追踪: spaceId  + trace , 可视化图标展示 或者链路展示 

**
**

分布式链路话术 :

APM 性能监控

1.JVM  通过jvm打印日志实现

2.全链路追踪  - 可观测性 

三要素 日志+度量+追踪

日志业务代码代理输出, Java Agent 字节码打桩的方式

分布式链路追踪关键结构  trace + span 

涉及的技术 从小到大 

服务内: MDC ,ThreadLocal  ,java agent  

中间件: Sleuth + Zipkin + ELK  + skywalking  + 普罗米修斯等