我想用 Opencensus 和 Jaeger 追踪整个项目。我在入口服务中添加了 HTTP 跟踪,并添加 stratspan
了包围我的整个服务的中间件,这两个跨度在 Jaeger 上调用和显示。我的问题是每个服务都包含很多功能,我想查看我所有功能的踪迹,但是这样不显示整体服务,不显示每个功能。我不喜欢 add per function add one stratspan
。我使用ctx context.Context
了我所有的功能,但没有什么不同!
问问题
73 次
1 回答
0
除了在您要检测的每个函数中开始一个跨度之外,实际上没有太多选择:
func something(ctx context.Context) {
ctx, span := trace.StartSpan(ctx, "something")
defer span.End()
}
如果您的函数具有通用调用签名,或者您可以将函数合并为通用调用签名,则可以编写包装器。这方面的例子可以在 http "middleware"中看到。
考虑 http.Handler,您可以为处理跨度生命周期的函数编写一个装饰器:
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))
}
}
嵌入结构可以应用类似的模式。
于 2020-03-26T00:44:07.830 回答