package common
|
|
import (
|
"fmt"
|
"io"
|
"time"
|
|
"github.com/opentracing/opentracing-go"
|
"github.com/uber/jaeger-client-go"
|
jaegercfg "github.com/uber/jaeger-client-go/config"
|
"github.com/uber/jaeger-lib/metrics"
|
)
|
|
func NewJaegerTracer(serviceName, addr string) (opentracing.Tracer, io.Closer, error) {
|
// Sample configuration for testing. Use constant sampling to sample every trace
|
// and enable LogSpan to log every span via configured Logger.
|
cfg := jaegercfg.Configuration{
|
Sampler: &jaegercfg.SamplerConfig{
|
Type: jaeger.SamplerTypeConst,
|
Param: 1,
|
},
|
Reporter: &jaegercfg.ReporterConfig{
|
LogSpans: true,
|
BufferFlushInterval: 1 * time.Second,
|
},
|
}
|
|
cfg.ServiceName = serviceName
|
|
// Example logger and metrics factory. Use github.com/uber/jaeger-client-go/log
|
// and github.com/uber/jaeger-lib/metrics respectively to bind to real logging and metrics
|
// frameworks.
|
jLogger := &jaegerLogger{}
|
jMetricsFactory := metrics.NullFactory
|
|
metricsFactory := metrics.NullFactory
|
metrics := jaeger.NewMetrics(metricsFactory, nil)
|
|
sender, err := jaeger.NewUDPTransport(addr, 0)
|
if err != nil {
|
fmt.Println("could not initialize jaeger sender:", err.Error())
|
return nil, nil, err
|
}
|
|
repoter := jaeger.NewRemoteReporter(sender, jaeger.ReporterOptions.Metrics(metrics))
|
|
return cfg.NewTracer(
|
jaegercfg.Logger(jLogger),
|
jaegercfg.Metrics(jMetricsFactory),
|
jaegercfg.Reporter(repoter),
|
)
|
|
}
|
|
type jaegerLogger struct{}
|
|
func (l *jaegerLogger) Error(msg string) {
|
fmt.Println("ERROR:", msg)
|
}
|
|
// Infof logs a message at info priority
|
func (l *jaegerLogger) Infof(msg string, args ...interface{}) {
|
fmt.Println(msg, args)
|
}
|