liuxiaolong
2020-05-27 0b026a39029cf04954e2fc2ffe52e40720a7faa7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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)
}