我想用Opencensus和Jaeger追踪整个项目。我在入门服务中添加了HTTP trace,并在中间件中添加了stratspan,这些中间件包围了我服务以及在Jaeger上调用和显示的这两个跨度。我的问题是每个服务都包含很多功能,我想查看所有功能的轨迹,但这样就不能显示整体服务,也不能显示每个功能。我不喜欢为每个函数添加一个stratspan。我使用ctx context.Context进入我所有的函数,但没有什么不同!
发布于 2020-03-26 08:44:08
除了在你想要插装的每个函数中开始一个跨度之外,实际上没有太多的选择:
func something(ctx context.Context) {
ctx, span := trace.StartSpan(ctx, "something")
defer span.End()
}如果你的函数有一个共同的调用签名,或者你可以将你的函数合并成一个共同的调用签名,你可以写一个包装器。这方面的例子可以在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结构也可以应用类似的模式。
https://stackoverflow.com/questions/60846142
复制相似问题