dropbox1111 2019-05-10 17:18
浏览 67
已采纳

在一个Docker容器中进行Opentracing go代码,在另一个容器中进行jaegertracing

I have my go project which sends OpenTracing spans in one docker container and the jaegertracing running in it's own container using the following command:

docker run -p 6831:6831/udp -p 16686:16686 jaegertracing/all-in-one:latest

When I run the following go test code I can see them in the jaegerui:

 import (
    "testing"
    //"fmt"
    "io"

    opentracing "github.com/opentracing/opentracing-go"
    jaeger "github.com/uber/jaeger-client-go"
    config "github.com/uber/jaeger-client-go/config"
    log2 "github.com/sirupsen/logrus"
   // olog"github.com/opentracing/opentracing-go/log"
    jaegerlog "github.com/uber/jaeger-client-go/log"
    "github.com/uber/jaeger-lib/metrics"
)

func TestSum(t *testing.T) {
     log2.Info("start opentracing")
   // helloTo := "sonam"
    tracer, closer := initJaeger("opentracing_test")
    defer closer.Close()

    helloStr := "Sonam"
    //tracer := opentracing.GlobalTracer()

    span := tracer.StartSpan("TestSum")
    println(helloStr)
    span.Finish()
}


// initJaeger returns an instance of Jaeger Tracer that samples 100% of traces and logs all spans to stdout.
func initJaeger(service string) (opentracing.Tracer, io.Closer) {
    cfg := config.Configuration{
        ServiceName: service,
        Sampler:     &config.SamplerConfig{
            Type:  jaeger.SamplerTypeConst,
            Param: 1,
        },
        Reporter:    &config.ReporterConfig{
            LogSpans: true,
        },
    }

    //add
    jLogger := jaegerlog.StdLogger
    jMetricsFactory := metrics.NullFactory

    // Initialize tracer with a logger and a metrics factory
    tracer, closer, _ := cfg.NewTracer(
        config.Logger(jLogger),
        config.Metrics(jMetricsFactory),
    )
    // Set the singleton opentracing.Tracer with the Jaeger tracer.
    opentracing.SetGlobalTracer(tracer)
    return tracer, closer
}

but not when the code executes in a separate docker container.

Any ideas what I need to pass in my go app docker container?

  • 写回答

1条回答 默认 最新

  • dpcnm2132 2019-05-20 14:58
    关注

    My problem was with the configuration. The environment variables were not getting read using the above config. I had to use the following to read the environment variables in open tracing:

    cfg, err := jconfig.FromEnv()
        if err != nil {
            log.Error("cannot parse Jaeger env vars")
        }
    
        cfg.ServiceName = service
        cfg.Sampler.Type = jaeger.SamplerTypeConst
        cfg.Sampler.Param = 1
        cfg.Reporter.LogSpans = true
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧