当前位置: 首页 > 知识库问答 >
问题:

如何在gRPC服务器存根中从ctx创建OpenTelem计跨度

梅修贤
2023-03-14

我的Go gRPC服务器安装了

>

  • Google跟踪范围导出器:

    import texporter "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace"
    ...
    gcp, err := texporter.NewExporter()
    ...
    tracer := trace.NewTracerProvider(trace.WithSyncer(traceExporter),
        trace.WithSampler(trace.AlwaysSample()))
    otel.SetTracerProvider(tracer)
    

    Otelgrpc拦截器在gRPC服务器上注册。

    unaryInterceptors := grpc_middleware.WithUnaryServerChain(
        otelgrpc.UnaryServerInterceptor(),
    )
    streamInterceptors := grpc_middleware.WithStreamServerChain(
        otelgrpc.StreamServerInterceptor(),
    )
    

    现在,我正在尝试在RPC实现中创建一个跟踪范围,以便为该方法创建子范围,例如:

    func (s *srv) Test(ctx context.Context, req *pb.Request) (*pb.TestResponse, error) {
        // create a span here
        span1 := [??????].Start()
        doWork1()
        span1.End()
    
        span2 := [??????].Start()
        doWork2()
        span2.End()
        ...
    }
    

    然而,从OpenTelemetry文档中还不清楚人们是如何做到这一点的。

    离我最近的是奥特尔。GetTracerProvider()。Tracer(“这里有一些字符串?”) 提供启动(ctx)(ctx,Span)。但我不清楚这里要提供什么字符串(我的导出器没有文档所示的url),这似乎很不方便。

    我在想有一种类似于otelgrpc的东西。span fromCTX(ctx)方法在某个地方拉动跟踪器,创建一个带有rpc ctx的span,我找不到它。遗憾的是,OT gRPC Go上的文档非常缺乏。

  • 共有1个答案

    聂翼
    2023-03-14

    因为您正在使用github。com/GoogleCloudPlatform/opentelemetry操作,您应该使用自身来创建span,而不是opentelemetry。

    可以创建如下新范围:

        // Create custom span.
        tracer := otel.TraceProvider().Tracer("example.com/trace")
        err = func(ctx context.Context) error {
            ctx, span := tracer.Start(ctx, "foo")
            defer span.End()
    
            // Do some work.
    
            return nil
        }(ctx)
    

    有关更多详细信息,您可以参考OpenTelemeter Google Cloud Trace Exporter

     类似资料:
    • 根据这个http://www.grpc.io/docs/tutorials/basic/python.html#creating-这里的服务器和示例https://github.com/grpc/grpc/tree/v1.0.0/examples/python/route_guide,当我生成我的pb2时。py文件中,应创建几个名为Stub和Servicer的类。但是,我生成了pb2。py文件不包

    • 我有一个方法,可以启动一个简单的cpp grpc服务器。 我想做

    • 问题内容: 是否有任何教程或指南显示如何用PHP编写一个简单的Websockets服务器?我曾尝试在Google上寻找它,但没有找到很多。我找到了phpwebsockets,但是现在已经过时了,不支持最新的协议。我尝试自己更新它,但似乎不起作用。 和客户: 如果我的代码有任何错误,您可以帮我解决它吗?Firefox中的Concole说 问题答案: 我和您最近在同一条船上,这是我的工作: 1)我使用

    • 问题内容: 给定一个SSL密钥和证书,如何创建HTTPS服务? 问题答案: 我发现以下示例。 这适用于节点v0.1.94-v0.3.1。在新版本的节点中被删除。 直接从该来源:

    • 我在eclipse中创建了一个新服务器,但后来由于某种原因删除了它,现在我无法创建一个新服务器。我得到了Apache Tomcat7,但是当我从列表中选择Tomcat v7服务器时,服务器名称字段是不可编辑的,而且按钮也不工作(完成,下一步)。