登录
首页 >  Golang >  Go问答

OpenCensus是否支持追踪子函数调用?

来源:stackoverflow

时间:2024-03-02 22:06:27 309浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《OpenCensus是否支持追踪子函数调用? 》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

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


解决方案


除了在您想要检测的每个函数中启动一个跨度之外,实际上没有太多选择:

func something(ctx context.context) {
  ctx, span := trace.startspan(ctx, "something")
  defer span.end()
}

如果您的函数具有公共调用签名,或者您可以将函数合并为公共调用签名,则可以编写包装器。这方面的示例可以在 http "middleware" 中看到。

考虑http.handler,您可以为处理span生命周期的函数编写一个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 结构体可以应用类似的模式。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>