跳到主要内容
版本: 最新版本-3.5

Trace

背景

 分布式追踪,更常被称为 Trace,记录请求(由应用程序或最终用户发出)在多服务架构(如微服务和无服务器应用程序)中传播所经过的路径。如果没有追踪,很难查明分布式系统中性能问题的原因。它可以提高我们的应用程序或系统健康状况的可见性,并让我们调试难以在本地重现的行为。追踪对于分布式系统至关重要,这些系统通常具有不确定的问题或过于复杂而无法在本地重现。 追踪通过分解请求在分布式系统中流动时发生的事情,从而降低了调试和理解分布式系统的难度。一个 Trace 由一个或多个 Span 组成。第一个 Span 代表 Root Span。每个 Root Span 代表从开始到结束的请求。父 Span 下面的 Span 提供了更深入的上下文,说明请求期间发生的事情(或构成请求的步骤)。许多可观测性后端将 Trace 可视化为瀑布图,可能看起来像这张图片。

trace_pic1

 瀑布图显示了 Root Span 与其子 Span 之间的父子关系。当一个 Span 封装另一个 Span 时,这也代表了一种嵌套关系。  最近 SR 添加了一个追踪框架。它利用 opentelemetry 和 jaeger 来追踪系统中的分布式事件。

  • Opentelemetry 是一个检测/追踪 SDK。开发人员可以使用它来检测代码并将追踪数据发送到可观测性后端。它支持多种语言。我们在 SR 中使用 java 和 CPP SDK。
  • 目前,Jaeger 被用作可观测性后端。

基本用法

在 SR 中启用追踪的步骤

  1. 安装 Jaeger 上面的指南使用 docker。为简单起见,您也可以只下载 二进制包 并在本地运行。
    decster@decster-MS-7C94:~/soft/jaeger-1.31.0-linux-amd64$ ll
total 215836
drwxr-xr-x 2 decster decster 4096 02-05 05:01:30 ./
drwxrwxr-x 28 decster decster 4096 05-18 18:24:07 ../
-rwxr-xr-x 1 decster decster 19323884 02-05 05:01:31 example-hotrod*
-rwxr-xr-x 1 decster decster 23430444 02-05 05:01:29 jaeger-agent*
-rwxr-xr-x 1 decster decster 51694774 02-05 05:01:29 jaeger-all-in-one*
-rwxr-xr-x 1 decster decster 41273869 02-05 05:01:30 jaeger-collector*
-rwxr-xr-x 1 decster decster 37576660 02-05 05:01:30 jaeger-ingester*
-rwxr-xr-x 1 decster decster 47698843 02-05 05:01:30 jaeger-query*

decster@decster-MS-7C94:~/soft/jaeger-1.31.0-linux-amd64$ ./jaeger-all-in-one
  1. 配置 FE&FE 以启用追踪。目前,opentelemetry java & cpp sdk 使用不同的协议,java 使用 grpc proto,而 cpp 使用 thrift&UDP,因此端点端口不同。
    fe.conf

# Enable jaeger tracing by setting jaeger_grpc_endpoint
# jaeger_grpc_endpoint = https://:14250


be.conf

# Enable jaeger tracing by setting jaeger_endpoint
# jaeger_endpoint = localhost:6831
  1. 打开 jaeger web UI,通常在 https://:16686/search
  2. 进行一些数据摄取(streamload/insert into)并在 web UI 上搜索 TXN traces

trace_pic2.png(trace_pic2.png) trace_pic3.png(trace_pic3.png)

添加 traces

  • 要添加 trace,首先熟悉 tracer、span、trace 传播等基本概念,请阅读 observability primer
  • 阅读实用程序类及其在 SR 中的用法:TraceManager.java(java) common/tracer.h/cpp (cpp),它当前的用法(例如写入 txn(load/insert/update/delete) trace,以及它到 BE 的传播)。
  • 添加您自己的 trace