单进程示例
单进程的链路跟踪即进程内方法之间的调用链关系。这种场景的跟踪没有涉及到分布式跟踪,比较简单,以该示例作为我们入门的一个例子吧。示例代码地址: https://github.com/gogf/gf/tree/master/example/trace/inprocess
Root Span
root span
即链路中第一个 span
对象。在这里的单进程场景中,往往需要手动创建一个。随后在方法内部创建的 span
都会作为它的子级 span
。
在分布式架构的服务间通信场景中,往往不需要开发者手动创建 root span
,而是由客户端/服务端请求的拦截器来自动创建。
创建 tracer
,生成 root span
:
func main() {
const (
serviceName = "otlp-http-client"
endpoint = "tracing-analysis-dc-hz.aliyuncs.com"
path = "adapt_******_******/api/otlp/traces"
)
var ctx = gctx.New()
shutdown, err := otlphttp.Init(serviceName, endpoint, path)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer shutdown()
ctx, span := gtrace.NewSpan(ctx, "main")
defer span.End()
// Trace 1.
user1 := GetUser(ctx, 1)
g.Dump(user1)
// Trace 2.
user100 := GetUser(ctx, 100)
g.Dump(user100)
}
上述代码创建了一个 root span
,并将该 span
通过 context
传递给 GetUser
方法,以便在 GetUser
方法中将追踪链继续延续下去。