关键词语:
全链路追踪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( 映射调试上下文 )原理:
保证不同g的现场间的变量隔壁 , 保证线程上下文共享变量数据 原理是ThreadLocal
如果涉及父子线程 ,需要使用 InheritableThreadLocal
Java Agent :
通过启动时对执行方法字节码的修改,来执行一些前置或者后置修改的操作
sleuth zipkin学习:
zipkin通过每次调用各个服务实例的spanId,组成Trace树,来存储一次完整调用链路 ,对应一个TraceId
sleuth 来收集调用信息, 发送给zipkin
zipkin来做调用信息的存储统计展示
arthas:
动态追踪技术
思考:
三个维度
日志 + 度量 + 追踪
日志收集通过业务代码 代理 或者 Java agent 或者 服务调用抓包或者主动上报收集
追踪: spaceId + trace , 可视化图标展示 或者链路展示
**
**
分布式链路话术 :
APM 性能监控
1.JVM 通过jvm打印日志实现
2.全链路追踪 - 可观测性
三要素 日志+度量+追踪
日志业务代码代理输出, Java Agent 字节码打桩的方式
分布式链路追踪关键结构 trace + span
涉及的技术 从小到大
服务内: MDC ,ThreadLocal ,java agent
中间件: Sleuth + Zipkin + ELK + skywalking + 普罗米修斯等