猿问

跟踪器发送跨度

我正在尝试在 Go 中与 Jaeger 一起使用仪器。


我正在使用 docker 运行 Jaeger 后端,如下所示(如https://www.jaegertracing.io/docs/1.15/getting-started/中所述):


docker run -d --name jaeger \

  -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \

  -p 5775:5775/udp \

  -p 6831:6831/udp \

  -p 6832:6832/udp \

  -p 5778:5778 \

  -p 16686:16686 \

  -p 14268:14268 \

  -p 9411:9411 \

  jaegertracing/all-in-one:1.15

但是,运行以下 Go 代码后,我无法在http://localhost:16686 的Jaeger UI 中看到跨度,并且我不确定这段代码有什么问题?我从一段类似的 Python 代码开始,它能够在 Jaeger UI 上发布跨度。


package main


import (

    "fmt"

    "io"


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

    jaeger "github.com/uber/jaeger-client-go"

    jaegercfg "github.com/uber/jaeger-client-go/config"

)


func initJaeger(service string) (opentracing.Tracer, io.Closer) {

    agentIP := "localhost"

    agentPort := "5775"

    so := jaeger.SamplerOptionsFactory{}

    logger := jaeger.StdLogger

    logger.Infof("Sending Traces to %s %s", agentIP, agentPort)

    cfg := &jaegercfg.Configuration{

        Sampler: &jaegercfg.SamplerConfig{

            Type:    "const",

            Param:   1,

            Options: []jaeger.SamplerOption{so.Logger(logger)},

        },

        ServiceName: service,

        Reporter: &jaegercfg.ReporterConfig{

            LogSpans:           true,

            LocalAgentHostPort: agentIP + ":" + agentPort,

        },

    }

    tracer, closer, err := cfg.NewTracer(jaegercfg.Logger(logger))

    if err != nil {

        panic(fmt.Sprintf("ERROR: cannot init Jaeger: %v\n", err))

    }


    opentracing.SetGlobalTracer(tracer)

    return opentracing.GlobalTracer(), closer

}


func main() {


    tracer, closer := initJaeger("foo-go-service")


    span := tracer.StartSpan("GoTestSpan")

    var myMap = make(map[string]interface{})

    myMap["foo"] = 42

    myMap["bar"] = "42"

    span.LogKV(myMap)


}

我正在挖掘这里的文档https://godoc.org/github.com/uber/jaeger-client-go以及这里的开放跟踪项目的文档https://godoc.org/github.com/opentracing/opentracing -go但我对术语和库函数/方法有点困惑。


我想将“通用”事件发布到 Jaeger 后端并在 Jaeger UI 中查看这些事件。

我还想使用某种请求结构的自动包装器来发布“HTTP 请求”事件,但现在即使是简单/通用事件也很好。


心有法竹
浏览 105回答 1
1回答

一只甜甜圈

我能够发布一些跨度,以便我可以在http://localhost:16686上看到它们我们应该SetOperationName在 Span 上,以便我们可以在 UI 上使用人类可读的名称来识别它我们还应该推迟span.Finish()通话,看来这就是为什么我在用户界面上看不到任何内容的原因这是更新后的主要功能:func main() {    tracer, closer := initJaeger("foo-go-service")    defer closer.Close()    span := tracer.StartSpan("GoTestSpan")    defer span.Finish()    span.SetOperationName("opNameGoTestSpan")    var myMap = make(map[string]interface{})    myMap["foo"] = 42    myMap["bar"] = "42"    span.LogKV(myMap)    // time.Sleep(2 * time.Second)    childSpanRef := opentracing.ChildOf(span.Context())    childSpan := tracer.StartSpan("GoChildSpan", childSpanRef)    defer childSpan.Finish()    childSpan.SetOperationName("opNameGoChildSpan")    var myMap2 = make(map[string]interface{})    myMap2["foo2"] = 42    myMap2["bar2"] = "42"    childSpan.LogKV(myMap2)}
随时随地看视频慕课网APP

相关分类

Go
我要回答