Оперативный код go в одном контейнере Docker и jaegertracing в другом контейнере - PullRequest
0 голосов
/ 10 мая 2019

У меня есть проект go, который отправляет диапазоны OpenTracing в один докер-контейнер, а jaegertracing запускается в своем собственном контейнере с помощью следующей команды:

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

Когда я запускаю следующий код go test, я вижу его в 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?

1 Ответ

0 голосов
/ 20 мая 2019

Моя проблема была с конфигурацией.Переменные среды не читались с использованием вышеуказанного конфига.Мне пришлось использовать следующее, чтобы прочитать переменные среды в открытой трассировке:

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
...