メインコンテンツまでスキップ

Trace

背景

 分布式跟踪,更常被称为跟踪(Trace),记录了请求(由应用程序或终端用户发出)在多服务架构(如微服务和无服务器应用程序)中传播的路径。在分布式系统中,如果没有跟踪,很难确定性能问题的原因。它提高了我们应用程序或系统的健康度的可见性,并允许我们调试本地难以复现的行为。跟踪对于常见具有非确定性问题或太复杂以在本地重现的分布式系统至关重要。  跟踪通过分解请求在分布式系统中的流程,使得调试和理解分布式系统变得更加简单。一个跟踪由一个或多个跨度(Span)组成。第一个跨度代表根跨度。每个根跨度代表一个完整的请求。父级下面的跨度提供了请求期间发生的更详细的上下文(或者组成请求的步骤)。许多观测后端将跟踪可视化为瀑布图,可能是这个图片的样子。

trace_pic1

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

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

基本用法

启用SR的跟踪的步骤:

  1. 安装Jaeger 上面的指南使用了Docker。为了简便起见,你也可以只下载二进制包并在本地运行,https://github.com/jaegertracing/jaeger/releases
    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

# 通过设置jaeger_grpc_endpoint启用jaeger跟踪
# jaeger_grpc_endpoint = http://localhost:14250


be.conf

# 通过设置jaeger_endpoint启用jaeger跟踪
# jaeger_endpoint = localhost:6831
  1. 打开jaeger web界面,通常在http://localhost:16686/search
  2. 进行一些数据摄取(streamload/insert into)并在web界面上搜索TXN跟踪

(trace_pic2.png) (trace_pic3.png)

trace_pic3.png
trace_pic2.png

添加跟踪记录

  • 要添加跟踪记录,首先要熟悉基本概念,如追踪器(tracer)、跨度(span)、追踪传播,阅读observability primer
  • 阅读实用类以及在SR中的用法:TraceManager.java(java)common/tracer.h/cpp(cpp),了解当前的用法(如写txn(load/insert/update/delete)跟踪,并将其传播到BE)。
  • 添加你自己的跟踪记录