这是我与第五届青训营办学笔记创作活动的第二天。
什么是Jaeger
Jaeger是一个Uber开发的分布式跟踪系统,后端采用GO语言实现,适用于进行链路追踪,分布式跟踪消息传递,分布式事务监控和分析等场景。
什么是链路追踪
在传统的单体程序中,遇到问题时,我们可以通过函数间的调用栈来查看函数间的调用关系。但是在分布式的架构中,一个请求可能会导致多个不同网络的服务调用,这给我们调试问题带来了困难。Jaeger可以简单理解为微服务的函数调用栈,其记录了一个请求的各种调用关系,以便于我们分析问题。
Jeager基础概念
span:表示具有操作名称、操作开始时间和持续时间的逻辑工作单元。跨度可以被嵌套和排序,以模拟因果关系。
trace: 通过系统的数据/执行路径,是一个服务跨度上的有向无环图
Span表示Jaeger中的逻辑工作单元,具有操作名称,操作的开始时间和持续时间。跨度可以嵌套并排序以建立因果关系模型。
OpenTracing
Opentracing是一套与平台无关的标准,方便开发人员进行链路追踪。
引用关系
-
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----] -
FollowsFrom
parent Spans不以任何方式依赖他们的child Spans的结果。 在这些情况下,我们只说child Span从因果意义上来自parent Span。
Jaeger 架构设计
Jaeger Client
客户端lib,收集并发送数据到agent
Agent 客户端代理
一个监听在UDP端口上接受Span数据的网络守护进程(daemon),具有以下特点:
- 收集并汇聚span信息到collector
- 被设计成一个组件,作为基础架构组件部署到所有的宿主机
- 将client library和collector解耦,为client library屏蔽了路由和发现collector的细节
Collector
从agent收集trace信息,通过处理管道处理他们,写入后端存储(backends)。当前的collector的主要工作是管理trace,建立索引,执行相关转化,存储他们。Collector中运行着sampling逻辑,根据我们设定的sampling方式对数据进行收集和处理。
Data Store
数据存储