1

我想用 Opencensus 和 Jaeger 追踪整个项目。我在入口服务中添加了 HTTP 跟踪,并添加 stratspan了包围我的整个服务的中间件,这两个跨度在 Jaeger 上调用和显示。我的问题是每个服务都包含很多功能,我想查看我所有功能的踪迹,但是这样不显示整体服务,不显示每个功能。我不喜欢 add per function add one stratspan。我使用ctx context.Context了我所有的功能,但没有什么不同!

4

1 回答 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 回答