Skip to content

Latest commit

 

History

History
108 lines (73 loc) · 4.76 KB

README.md

File metadata and controls

108 lines (73 loc) · 4.76 KB

DistributedTraceProject - 分布式追踪

DistributedTraceProject 是一个用于在数据库中间件中进行分布式追踪的开源项目。它旨在帮助开发人员实现对分布式系统中请求的全链路跟踪,以便更好地理解和优化分布式系统的性能和可靠性。

简介

在现代分布式系统中,跨多个服务和组件的请求链往往变得非常复杂。DistributedTraceProject 提供了一种轻量级、低侵入性的方式来收集、汇总和展示分布式系统中的请求数据。通过使用 DistributedTraceProject ,开发人员可以追踪请求的完整路径,了解各个组件之间的相互作用,并识别潜在的性能瓶颈和错误。

快速入门

以下步骤将帮助您开始使用.

  1. 安装 首先,您需要下载并安装:
$ git clone https://github.com/your-username/distrace.git
$ cd distrace
$ make install

集成

在您的数据库中间件代码中引入并初始化:

初始化 Distrace

distrace.init()

追踪请求

在您希望追踪的地方插入追踪点:

添加追踪点

with distrace.span("database_query"):
    # 执行数据库查询操作
    result = perform_database_query()

对追踪点添加标签

span.add_tag("query_status", "success" if result else "failure")

查看追踪数据

启动 Distrace 的 Web UI 来查看追踪数据:

$ distrace-ui

然后,访问 http://localhost:8080 在 Web UI 中查看追踪数据。

代码逻辑

这个代码中的追踪逻辑是使用 OpenTelemetry 和 Jaeger 进行分布式追踪。首先让我解释一下代码的主要部分:

config.go 定义了应用的配置和数据结构,包括 Trace 和其他各种类型。值得注意的是 Context 结构,它包含了请求的上下文信息,这在分布式追踪中是很重要的。

jaeger.go 是与 Jaeger 进行交互的地方。这里定义了 Jaeger 的初始化和 trace context 的提取过程。Initialize 方法设置了全局的 TracerProvider 和 TextMapPropagator。tracerProvider 方法设置了 Jaeger 的 exporter 和 TracerProvider。Extract 方法从 hints 中提取 trace context。

trace.go 是追踪的主要逻辑部分。它允许注册多个追踪提供者,并管理当前的追踪提供者。Initialize 方法初始化追踪提供者,而 Extract 方法从请求的上下文中提取 trace context。

main.go 是程序的入口首先初始化追踪配置,并调用 trace.Initialize 来初始化追踪。然后创建一个请求上下文,和一个包含 trace context 的 hint。然后调用 trace.Extract 提取 trace context。

模拟的请求处理过程中,可以使用 otel.Tracer 来创建新的 spans,并记录相关的信息。

要注意,这个例子中的 trace context 是硬编码的,实际使用中应该从请求的头部提取。在这个例子中,我们也没有创建任何 spans,实际使用中应该为每个请求创建一个新的 span。

在运行这个程序之前,需要启动一个 Jaeger 的实例,你可以使用 Jaeger 提供的 docker 镜像。然后,可以在 Jaeger 的界面上查看到追踪信息。

追踪逻辑:

当一个请求到达时,首先创建一个 config.Context,其中包含了请求的数据和上下文。

使用 trace.Extract 方法从请求的上下文中提取 trace context。这里使用的是当前的追踪提供者(在这个例子中是 Jaeger)的 Extract 方法。

在请求的处理过程中,可以使用 otel.Tracer 来创建新的 spans,并记录相关的信息。

当请求处理完成,可以结束当前的 span,并可能将其发送到 Jaeger。

这样,就可以在 Jaeger 的界面上看到请求的追踪信息了。

使用

可以使用以下命令来启动一个 Jaeger 实例:

docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14268:14268 \
  -p 14250:14250 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.21

这个命令会在后台启动一个名为 jaeger 的容器,该容器运行所有的 Jaeger 组件(包括 agent, collector, query 和 ingester),并暴露必要的端口。如果你的 Docker 宿主机和你的程序在同一台机器上,你就可以通过 http://localhost:16686 访问 Jaeger 的界面。

在运行你的程序后,你可以进行以下操作来查看追踪信息:

打开 Jaeger 界面:http://localhost:16686

在 "Service" 下拉菜单中选择你的服务,本例中应该是 "gaea"。

点击 "Find Traces" 按钮。

你就会看到你的程序发送的所有 trace。点击其中一个 trace,你可以看到该 trace 的详细信息,包括每个 span 的开始时间、结束时间、标签等信息。