02975256d1
Closes #17006
92 lines
2.5 KiB
Markdown
92 lines
2.5 KiB
Markdown
# Zipkin compatibility features
|
|
|
|
## `NewZipkinB3HTTPHeaderPropagator()`
|
|
|
|
Adds support for injecting and extracting Zipkin B3 Propagation HTTP headers,
|
|
for use with other Zipkin collectors.
|
|
|
|
```go
|
|
|
|
// ...
|
|
import (
|
|
opentracing "github.com/opentracing/opentracing-go"
|
|
jaeger "github.com/uber/jaeger-client-go"
|
|
"github.com/uber/jaeger-client-go/zipkin"
|
|
)
|
|
|
|
func main() {
|
|
// ...
|
|
|
|
zipkinPropagator := zipkin.NewZipkinB3HTTPHeaderPropagator()
|
|
injector := jaeger.TracerOptions.Injector(opentracing.HTTPHeaders, zipkinPropagator)
|
|
extractor := jaeger.TracerOptions.Extractor(opentracing.HTTPHeaders, zipkinPropagator)
|
|
|
|
// Zipkin shares span ID between client and server spans; it must be enabled via the following option.
|
|
zipkinSharedRPCSpan := jaeger.TracerOptions.ZipkinSharedRPCSpan(true)
|
|
|
|
// create Jaeger tracer
|
|
tracer, closer := jaeger.NewTracer(
|
|
"myService",
|
|
mySampler, // as usual
|
|
myReporter // as usual
|
|
injector,
|
|
extractor,
|
|
zipkinSharedRPCSpan,
|
|
)
|
|
|
|
opentracing.SetGlobalTracer(tracer)
|
|
|
|
// continue main()
|
|
}
|
|
```
|
|
|
|
If 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.
|
|
|
|
```go
|
|
import (
|
|
"time"
|
|
|
|
opentracing "github.com/opentracing/opentracing-go"
|
|
"github.com/uber/jaeger-client-go"
|
|
jaegerClientConfig "github.com/uber/jaeger-client-go/config"
|
|
"github.com/uber/jaeger-client-go/zipkin"
|
|
"github.com/uber/jaeger-client-go/log"
|
|
"github.com/uber/jaeger-lib/metrics"
|
|
)
|
|
|
|
func main(){
|
|
//...
|
|
|
|
// Recommended configuration for production.
|
|
cfg := jaegercfg.Configuration{}
|
|
|
|
// 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 := jaegerlog.StdLogger
|
|
jMetricsFactory := metrics.NullFactory
|
|
|
|
// Zipkin shares span ID between client and server spans; it must be enabled via the following option.
|
|
zipkinPropagator := zipkin.NewZipkinB3HTTPHeaderPropagator()
|
|
|
|
// Create tracer and then initialize global tracer
|
|
closer, err := cfg.InitGlobalTracer(
|
|
serviceName,
|
|
jaegercfg.Logger(jLogger),
|
|
jaegercfg.Metrics(jMetricsFactory),
|
|
jaegercfg.Injector(opentracing.HTTPHeaders, zipkinPropagator),
|
|
jaegercfg.Extractor(opentracing.HTTPHeaders, zipkinPropagator),
|
|
jaegercfg.ZipkinSharedRPCSpan(true),
|
|
)
|
|
|
|
if err != nil {
|
|
log.Printf("Could not initialize jaeger tracer: %s", err.Error())
|
|
return
|
|
}
|
|
defer closer.Close()
|
|
|
|
// continue main()
|
|
}
|
|
|
|
```
|