【云原生】【Jaeger】架构

举报
huahua.Dr 发表于 2021/07/31 11:08:05 2021/07/31
【摘要】 一、什么是Jaegerjaeger是一款开源的分布式追踪系统,为微服务场景而生,它主要用于分析多个服务的调用过程,图形化服务调用轨迹,是诊断性能问题、分析系统故障的利器。二、Jaeger的0层架构分析jaeger由以下组件构成:jaeger-Client(必选) :为不同语言实现了符合 OpenTracing 标准的 SDK。应用程序通过 API 写入数据,client library 把 ...

一、什么是Jaeger

jaeger是一款开源的分布式追踪系统,为微服务场景而生,它主要用于分析多个服务的调用过程,图形化服务调用轨迹,是诊断性能问题、分析系统故障的利器。

二、Jaeger的0层架构分析

jaeger由以下组件构成:

  • jaeger-Client(必选) :为不同语言实现了符合 OpenTracing 标准的 SDK。应用程序通过 API 写入数据,client library 把 trace 信息按照应用程序指定的采样策略传递给 jaeger-agent。
  • jaeger-agent(可选): 它是一个监听在 UDP 端口上接收 span 数据的网络守护进程,它会将数据批量发送给 collector。它被设计成一个基础组件,部署到所有的宿主机上。Agent 将 client library 和 collector 解耦,为 client library 屏蔽了路由和发现 collector 的细节。
  • jaeger-collector(必选) : 接收 jaeger-agent 或者jaeger-client发送来的数据,然后将数据写入后端存储。Collector 被设计成无状态的组件,因此您可以同时运行任意数量的 jaeger-collector。
  • jaeger-db (必选): 后端存储被设计成一个可插拔的组件,支持将数据写入 cassandra、elastic search,最常用的就是elastic search数据库了。
  • jaeger-query(可选) : 接收查询请求,然后从后端存储系统中检索 trace 并通过 UI 进行展示。Query 是无状态的,可以启动多个实例。
  • jaeger-UI(可选):用于将jaeger存储在db中的数据可视化呈现出来,如果jaeger-db使用的是elasticsearch存储数据,那么可是直接使用elasticsearch更实用的kibana可视化UI来检索数据(需要你对jaeger收集的trace信息数据结构有一定的了解方可)。

三、Jaeger的具体工作流程

  • Application(微服务等)-->jaeger-client:jaeger-client通过应用程序(微服务等)指定的采样策略获取到trace信息。
  • jaeger-client-->jaeger-agent: client通过UDP协议将trace信息数据传输给jaeger-agent。
  • jaeger-agent-->jaeger-collector: agent通过TChannel协议将trace信息数据传输给jager-collector。
  • jaeger-collector-->DB: collector将trace信息数据写入到指定数据库中。
  • jaeger-db-->jaeger-query: jaeger-query通过查询数据库获取指定的trace信息数据。
  • jaeger-query-->jaeger-UI:jaeger-query将获取的trace信息数据呈现在UI上。
  • jaeger-collector-->jaeger-agent-->jaeger-client: collector可以通过发起control flow控制流给jaeger-client,比如collector想要对trace数据进行sampling抽样,就发起samping flow,jaeger-client收到之后就进行响应。

四、Jaeger存储的数据结构体

Jaeger通过采集应用程序服务之间调用的轨迹数据,并保存在相应数据库中,那么其捕获的数据有一定的结构,方便UI呈现,只要有下面几个部分:

  • Span:追踪中的逻辑单元,比如一次请求的过程/一个函数的执行,包含操作名称、开始时间、持续时间(其所有的Span统称Spans)。
  • SpanContext:表示需要传播到下游的Spans数据和跨应用/进程的 Spans数据,可以简单理解为串在各个系统里的统一标识对象。
  • Baggage:字符串组成的键值对,和 Span/SpanContext 互相关联,会在所有的下游 Spans 中进行传播。(可以做一些强大的功能,如在整个链路夹带数据,使用成本高,小心使用)
  • Trace:项目中的追踪实例,追踪项目里数据变化/函数执行的过程,可以认为是一个定向非循环的 span 的集合图(Spans)。

trace和span的关系如下图:

                     

在Jaeger-UI的视图对应关系如下图:

              


五、实际应用部署

如下图是一个简单的实例应用部署:

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。