Jaeger 介绍 | 青训营大项目笔记

99 阅读2分钟

这是我与第五届青训营办学笔记创作活动的第二天。

什么是Jaeger

Jaeger是一个Uber开发的分布式跟踪系统,后端采用GO语言实现,适用于进行链路追踪,分布式跟踪消息传递,分布式事务监控和分析等场景。

什么是链路追踪

在传统的单体程序中,遇到问题时,我们可以通过函数间的调用栈来查看函数间的调用关系。但是在分布式的架构中,一个请求可能会导致多个不同网络的服务调用,这给我们调试问题带来了困难。Jaeger可以简单理解为微服务的函数调用栈,其记录了一个请求的各种调用关系,以便于我们分析问题。

Jeager基础概念

123.jpg span:表示具有操作名称、操作开始时间和持续时间的逻辑工作单元。跨度可以被嵌套和排序,以模拟因果关系。

trace: 通过系统的数据/执行路径,是一个服务跨度上的有向无环图

Span表示Jaeger中的逻辑工作单元,具有操作名称,操作的开始时间和持续时间。跨度可以嵌套并排序以建立因果关系模型。

OpenTracing

Opentracing是一套与平台无关的标准,方便开发人员进行链路追踪。

引用关系

  1. Child Of:

    • RPC服务端的SPAN,可以是ChildOf该RPC客户端的SPAN
    • SQL插入的Span,可以是ChildOf ORM save方法的Span
     [-Parent Span---------]
              [-Child Span----]
         [-Parent Span--------------]
              [-Child Span A----]
               [-Child Span B----]
             [-Child Span C----]
              [-Child Span D---------------]
              [-Child Span E----]
    
  2. FollowsFrom

    parent Spans不以任何方式依赖他们的child Spans的结果。 在这些情况下,我们只说child Span从因果意义上来自parent Span。

Jaeger 架构设计

1foamoi1o8.png

Jaeger Client

客户端lib,收集并发送数据到agent

Agent 客户端代理

一个监听在UDP端口上接受Span数据的网络守护进程(daemon),具有以下特点:

  1. 收集并汇聚span信息到collector
  2. 被设计成一个组件,作为基础架构组件部署到所有的宿主机
  3. 将client library和collector解耦,为client library屏蔽了路由和发现collector的细节

Collector

从agent收集trace信息,通过处理管道处理他们,写入后端存储(backends)。当前的collector的主要工作是管理trace,建立索引,执行相关转化,存储他们。Collector中运行着sampling逻辑,根据我们设定的sampling方式对数据进行收集和处理。

Data Store

数据存储