我有一个go项目,它使用以下命令在一个docker容器中发送OpenTracing spans,并在其自己的容器中运行jaegertracing:
docker run -p 6831:6831/udp -p 16686:16686 jaegertracing/all-in-one:latest
当我运行以下go测试代码时,我可以在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
}
但是当代码在单独的docker容器中执行时不会。
有什么想法我需要在go app docker容器中传递什么?
答案 0 :(得分:0)
我的问题是与配置有关。使用上述配置无法读取环境变量。我必须使用以下内容在开放式跟踪中读取环境变量:
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