围棋GRPC公开赛中的儿童跨度 [英] Child span in Go GRPC opentracing

查看:18
本文介绍了围棋GRPC公开赛中的儿童跨度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Jaeger在我们的微服务中增加Open Rating。我有两台GRPC服务器和一台REST服务器。

在GRPC服务器和所有REST-GRPC请求都完全正常的情况下,默认开放竞争被跟踪在一个父范围下。使用Java GRPC,我能够添加自定义子范围,并且它在Jaeger UI中以完美的层次结构显示。但是,当我尝试在Go Lang中添加相同的定制子对象时,它没有添加到调用GRPC服务的父REST服务范围中。以下是Golang代码

"github.com/opentracing/opentracing-go"

cfg := jaegerConfig.Configuration{
    ServiceName: t.Name,
}

tracer, closer, err := cfg.NewTracer(
    jaegerConfig.Logger(jLogger),
    jaegerConfig.Metrics(jMetricsFactory),
)

gRPCServer := grpc.NewServer(
        grpc.UnaryInterceptor(
            otgrpc.OpenTracingServerInterceptor(tracer)),
        grpc.StreamInterceptor(
            otgrpc.OpenTracingStreamServerInterceptor(tracer)))

var span = tracer.StartSpan("Test Span")
span.SetTag("one", "value")
span.Finish()

我不想提取整个http头文件,因为GRPC库已经负责了。即使使用Java GRPC,我也不进行任何提取。Go lang opentracking不提供我在opentrace中使用的作用域管理器。

提前谢谢!

干杯。

推荐答案

您可以尝试在您的grpc处理程序中使用StartSpanFromContext

    // import "github.com/opentracing/opentracing-go"
    
    span, _ := opentracing.StartSpanFromContext(ctx, "some_child_span")
    defer span.Finish()

    span.SetTag("foo", "bar")

正如otgrpc.OpenTracingServerInterceptor的文档所说:

[...]服务器跨度将嵌入到上下文中。 要访问的特定于应用程序的GRPC处理程序。

如果我们看一下函数实现:

// import "github.com/opentracing/opentracing-go"

func OpenTracingServerInterceptor(tracer opentracing.Tracer, optFuncs ...Option) grpc.UnaryServerInterceptor {
        // ... a lot omitted
        ctx = opentracing.ContextWithSpan(ctx, serverSpan)
        // ...
        resp, err = handler(ctx, req) // your gRPC handler
        // ...   
}



编辑:考虑到上述情况,您可能可以省略此代码:

var span = tracer.StartSpan("Test Span")
span.SetTag("one", "value")
span.Finish()

这篇关于围棋GRPC公开赛中的儿童跨度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆