第 29 期 2019-01-23 Go opentracing jaeger 集成及源码分析

观看视频

分享者

jukylin

Go opentracing jaeger 集成及源码分析

一、分布式追踪论文

论文地址:http://bigbully.github.io/Dapper-translation/

为什么要用分布式追踪

当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。
互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、
可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。
因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具。

分布式系统调用过程

image

使用分布式追踪要留意哪些问题

  • 低损耗

    跟踪系统对在线服务的影响应该做到足够小。

  • 应用透明

    对于应用的程序员来说,是不需要知道有跟踪系统这回事的。

二、Opentracing简介

Opentracing的作用

  • OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。

  • 可以很自由的在不同的分布式追
    踪系统中切换

  • 不负责具体实现

Opentracing主要组成

  • 一个Trace

    一个trace代表了一个事务或者流程在(分布式)系统中的执行过程

  • Span

    记录Trace在执行过程中的信息

  • 无限极分类

    服务与服务之间使用无限极分类的方式,通过HTTP头部或者请求地址传输到最低层,从而把整个调用链串起来。

Jaeger-client的实现

Jaeger-client源码

提取
  • 为什么要提取

主要作用是为了找到父亲

注入
异步report

低消耗

  • 消耗在哪里

    Jaeger-client作用于应用层,提取、注入、生成span、序列化成Thrift、发送到远程等,一系列操作这些都会带来性能上的损耗。

  • 如何处理

    选择合适采集策略:

    1. Constant
    2. Probabilistic
    3. Rate Limiting
    4. Remote

应用透明

三、Jaeger服务端源码阅读

服务端组件职责

各组件按照微服务架构风格设计,职责单一

  • Jaeger-agent负责上报数据的整理

  • Jaeger-collector负责数据保存

  • Jaeger-query负责数据查询

  • Jaeger-agent和Jaeger-collector使用基于TCP协议实现的RPC进行通讯

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执行时间进行监控调优