分散式链路追踪 - Jaeger

在 OpenTelemetry 中有提到 trace 的概念。而 Trace 由多个 Span 组成。今天的内容组要是针对 Jaeger 这个服务进行简易的介绍,并使用官方提供范例来搭建环境。

Span

一个 span 代表系统中具有开始时间和执行时长的逻辑运行单元。会有以下资讯:

  • 操作名称
  • 开始与完成的时间戳
  • 一组键值队的属性(Attributes)
  • 一组零或多个事件,每个事件本身就是一个元组(时间戳、名称、属性),名称必须是字符串
  • 父级 Span 标识
  • 链接(Links)到零个或多个因果相关的 Span
    • 藉由相关 Span 的 SpanContext
  • 引用 Span 所需的 SpanContext 讯息
    • 其中包含 Trace ID 和 Span ID 引用关系

Span Context

可在调用服务之间进行传送。包含从父 Span 传播到子 Span 的追踪标识和选项。
每个 Span 包含如下状态:

  • TraceId 是追踪的标识符,用於将所有过程中特定追踪的所有范围分组在一起
  • SpanId 是 Span 的标识符,当传递给子 Span 时,此标识符将成为子 Span 的父 Span 标识符
  • TraceFlags 表示追踪的选项
    • Sampling bit 表示是否采样追踪的 Bit
  • Tracestate 在键值对列表中包含特定於追踪系统的上下文
    • 允许不同的供应商传播其他讯息,并与他们的旧 ID 格式进行交互操作

详细内容可参考 opentelemetry 此链接或 opentracing 参考资源

Jaeger

用於监控和诊断基於微服务的分散式系统,包括以下

  • 分散式传播
  • 分散式交易监控
  • 根本原因分析
  • 服务依赖分析
  • 性能/延迟优化

在 Jaeger 中工作单元为 Span,该 Span 有触发时间、持续时间,并利用嵌套方式建立父子因果关系。一个 Trace 是一个执行路径,可说是是由一组 Span 定义的有向无环图(DAG)组合。

组件

官方描述可直接将数据写入 DB 或是使用 Kafka 做一个缓冲在送至 DB。

Agent

为一个守护程序,监听 UDP 端口发送的 Span,然後将其分批发送给收集器(jaeger-collector)。他为一个基本组件,将会布署至每台主机,

Collector

从 Jaeger Agent 接收 tracing,并藉由管道运行处里它们。管道中会验证 tracing,为其建立索引,执行任何转换最後储存它们。

Query

是一项从储存中检索追踪并交给 UI 来显示追踪的服务

Ingester

是一个从 Kafka topic 读取并写入储存後端(Elasticsearch等)的服务。

实验

启动 Jaeger 服务,但这边需要启用 Elasticsearch 作为储存。

docker run -it -d --name=jaeger -e SPAN_STORAGE_TYPE=elasticsearch -e ES_SERVER_URLS=http://192.168.101.129:3001 -e ES_TAGS_AS_FIELDS_ALL=true -p 3006:16686 jaegertracing/opentelemetry-all-in-one

官方提供的测试数据

docker run --rm --link jaeger --env JAEGER_AGENT_HOST=jaeger --env JAEGER_AGENT_PORT=6831 -p8080-8083:8080083 jaegertracing/example-hotrod:latest all

UI 呈现

明天会使用 Spring boot 作为范例,结合 Opentelemetry 和 Jaeger 来实现链路追踪。更详细的细节可以直接看官方


<<:  Day#08 查看、删除

>>:  [第九天]从0开始的UnityAR手机游戏开发-介绍Unity写程序的基本语法。

从零开始学游戏设计:模型基础 Part.3 雕塑场景

这是 Roblox 从零开始系列,入门章节的第十六个单元,今天你想亲手制作在海洋上的安静孤岛,就由你...

Day 03 Introduction to AI

Challenges and risks with AI Bias can affect resul...

[NestJS 带你飞!] DAY15 - Dynamic Module

前面有介绍过 Module 的一些基本使用方式,然而有一项非常强大的功能没有被提及,就是 动态模组(...

登录档的增删改查--风险技能平民都会

今天迈入第7天,根据计画,前几天我们介绍了一些登录档的基础知识和前置作业,假设读者跟笔者一样略懂略懂...

第30天 致谢与心得分享

铁人30天,实际在不简单,在这30天的过程,中间一度想要放弃、不知道要写什麽。 能持续产出优质文章的...