Skip to content

gongna-au/DistributedTraceProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 的开始时间、结束时间、标签等信息。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages