我可以使用OpenCensus跟踪子函数吗?

问题描述 投票:1回答:1

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

go trace jaeger opencensus
1个回答
0
投票

除了要在每个要检测的函数中开始跨度外,实际上没有太多选择:

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结构可以应用类似的模式。

© www.soinside.com 2019 - 2024. All rights reserved.