首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能用OpenCensus跟踪子调用的函数吗?

我能用OpenCensus跟踪子调用的函数吗?
EN

Stack Overflow用户
提问于 2020-03-25 17:35:20
回答 1查看 65关注 0票数 1

我想用Opencensus和Jaeger追踪整个项目。我在入门服务中添加了HTTP trace,并在中间件中添加了stratspan,这些中间件包围了我服务以及在Jaeger上调用和显示的这两个跨度。我的问题是每个服务都包含很多功能,我想查看所有功能的轨迹,但这样就不能显示整体服务,也不能显示每个功能。我不喜欢为每个函数添加一个stratspan。我使用ctx context.Context进入我所有的函数,但没有什么不同!

EN

回答 1

Stack Overflow用户

发布于 2020-03-26 08:44:08

除了在你想要插装的每个函数中开始一个跨度之外,实际上没有太多的选择:

代码语言:javascript
复制
func something(ctx context.Context) {
  ctx, span := trace.StartSpan(ctx, "something")
  defer span.End()
}

如果你的函数有一个共同的调用签名,或者你可以将你的函数合并成一个共同的调用签名,你可以写一个包装器。这方面的例子可以在http "middleware"中看到。

以http.Handler为例,您可以为处理跨度生命周期的函数编写decorator

代码语言:javascript
复制
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结构也可以应用类似的模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60846142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档