README.md
1# Zipkin compatibility features
2
3## `NewZipkinB3HTTPHeaderPropagator()`
4
5Adds support for injecting and extracting Zipkin B3 Propagation HTTP headers,
6for use with other Zipkin collectors.
7
8```go
9
10// ...
11import (
12 opentracing "github.com/opentracing/opentracing-go"
13 jaeger "github.com/uber/jaeger-client-go"
14 "github.com/uber/jaeger-client-go/zipkin"
15)
16
17func main() {
18 // ...
19
20 zipkinPropagator := zipkin.NewZipkinB3HTTPHeaderPropagator()
21 injector := jaeger.TracerOptions.Injector(opentracing.HTTPHeaders, zipkinPropagator)
22 extractor := jaeger.TracerOptions.Extractor(opentracing.HTTPHeaders, zipkinPropagator)
23
24 // Zipkin shares span ID between client and server spans; it must be enabled via the following option.
25 zipkinSharedRPCSpan := jaeger.TracerOptions.ZipkinSharedRPCSpan(true)
26
27 // create Jaeger tracer
28 tracer, closer := jaeger.NewTracer(
29 "myService",
30 mySampler, // as usual
31 myReporter // as usual
32 injector,
33 extractor,
34 zipkinSharedRPCSpan,
35 )
36
37 opentracing.SetGlobalTracer(tracer)
38
39 // continue main()
40}
41```
42
43If you'd like to follow the official guides from https://godoc.org/github.com/uber/jaeger-client-go/config#example-Configuration-InitGlobalTracer-Production, here is an example.
44
45```go
46import (
47 "time"
48
49 opentracing "github.com/opentracing/opentracing-go"
50 "github.com/uber/jaeger-client-go"
51 jaegerClientConfig "github.com/uber/jaeger-client-go/config"
52 "github.com/uber/jaeger-client-go/zipkin"
53 "github.com/uber/jaeger-client-go/log"
54 "github.com/uber/jaeger-lib/metrics"
55)
56
57func main(){
58 //...
59
60 // Recommended configuration for production.
61 cfg := jaegercfg.Configuration{}
62
63 // Example logger and metrics factory. Use github.com/uber/jaeger-client-go/log
64 // and github.com/uber/jaeger-lib/metrics respectively to bind to real logging and metrics
65 // frameworks.
66 jLogger := jaegerlog.StdLogger
67 jMetricsFactory := metrics.NullFactory
68
69 // Zipkin shares span ID between client and server spans; it must be enabled via the following option.
70 zipkinPropagator := zipkin.NewZipkinB3HTTPHeaderPropagator()
71
72 // Create tracer and then initialize global tracer
73 closer, err := cfg.InitGlobalTracer(
74 serviceName,
75 jaegercfg.Logger(jLogger),
76 jaegercfg.Metrics(jMetricsFactory),
77 jaegercfg.Injector(opentracing.HTTPHeaders, zipkinPropagator),
78 jaegercfg.Extractor(opentracing.HTTPHeaders, zipkinPropagator),
79 jaegercfg.ZipkinSharedRPCSpan(true),
80 )
81
82 if err != nil {
83 log.Printf("Could not initialize jaeger tracer: %s", err.Error())
84 return
85 }
86 defer closer.Close()
87
88 // continue main()
89}
90
91```
92