观看视频
分享者
jukylin
Go opentracing jaeger 集成及源码分析
一、分布式追踪论文
论文地址:Dapper,大规模分布式系统的跟踪系统 by bigbully
为什么要用分布式追踪
当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。
互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、
可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。
因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具。
分布式系统调用过程

使用分布式追踪要留意哪些问题
低损耗
跟踪系统对在线服务的影响应该做到足够小。
应用透明
对于应用的程序员来说,是不需要知道有跟踪系统这回事的。
二、Opentracing简介
Opentracing的作用
Opentracing主要组成
一个Trace
一个trace代表了一个事务或者流程在(分布式)系统中的执行过程
Span
记录Trace在执行过程中的信息
无限极分类
服务与服务之间使用无限极分类的方式,通过HTTP头部或者请求地址传输到最低层,从而把整个调用链串起来。
Jaeger-client的实现
Jaeger-client源码
提取
主要作用是为了找到父亲
注入
异步report
低消耗
消耗在哪里
Jaeger-client作用于应用层,提取、注入、生成span、序列化成Thrift、发送到远程等,一系列操作这些都会带来性能上的损耗。
如何处理
选择合适采集策略:
- Constant
- Probabilistic
- Rate Limiting
- Remote
应用透明
三、Jaeger服务端源码阅读
服务端组件职责
各组件按照微服务架构风格设计,职责单一
Jaeger-agent 源码阅读
Jaeger-collector 源码阅读
四、Jaeger使用经验
监听指标
Jaeger-client 监听 reporter_spans
Jaeger-agent 监听 thrift.udp.server.packets.dropped
Jaeger-collector 监听 spans.dropped
http://localhost:16686/metrics
测试环境debug
测试环境记录执行mysql语句,redis命令,RPC参数、结果
可以很方便定位问题
性能调优
观察Jaeger-ui,对线上接口,mysql执行时间进行监控调优