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