我想用Opencensus和Jaeger追踪整个项目。我在入口服务中添加了HTTP跟踪,并在包围我的服务的中间件中添加了stratspan
,这两个跨区在Jaeger上调用并显示。我的问题是每个服务都包含很多功能,我想查看我所有功能的痕迹,但是这样一来,未显示总体服务,而未显示每个功能。我不喜欢为每个函数添加一个stratspan
。我使用ctx context.Context
输入所有我的功能,但没有什么不同!
最佳答案
除了在要检测的每个函数中开始跨度外,实际上没有太多选择:
func something(ctx context.Context) {
ctx, span := trace.StartSpan(ctx, "something")
defer span.End()
}
如果您的函数具有 public 调用签名,或者可以将函数合并为 public 调用签名,则可以编写包装器。有关示例,请参见http "middleware"。
考虑一下http.Handler,您可以为处理跨度生命周期的函数编写一个decorator:
func WithTraced(handler http.Handler, opName string) http.Handler {
return func(w http.ResponseWriter, r *http.Request) {
ctx, span := trace.StartSpan(ctx, opName)
defer span.End()
handler.ServeHTTP(w, r.WithContext(ctx))
}
}
embedding结构可以应用类似的模式。
关于go - 如何使用OpenCensus跟踪称为函数的子函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60846142/