traefik/pkg/tracing/zipkin/zipkin.go

60 lines
2.1 KiB
Go
Raw Normal View History

2018-01-10 16:48:04 +00:00
package zipkin
import (
"io"
"time"
2018-01-10 16:48:04 +00:00
2019-08-03 01:58:23 +00:00
"github.com/containous/traefik/v2/pkg/log"
2018-07-03 08:02:03 +00:00
"github.com/opentracing/opentracing-go"
2019-04-05 09:58:06 +00:00
zipkin "github.com/openzipkin-contrib/zipkin-go-opentracing"
2018-01-10 16:48:04 +00:00
)
2018-11-14 09:18:03 +00:00
// Name sets the name of this tracer.
2018-01-10 16:48:04 +00:00
const Name = "zipkin"
2018-11-14 09:18:03 +00:00
// Config provides configuration settings for a zipkin tracer.
2018-01-10 16:48:04 +00:00
type Config struct {
2019-07-01 09:30:05 +00:00
HTTPEndpoint string `description:"HTTP Endpoint to report traces to." json:"httpEndpoint,omitempty" toml:"httpEndpoint,omitempty" yaml:"httpEndpoint,omitempty"`
SameSpan bool `description:"Use Zipkin SameSpan RPC style traces." json:"sameSpan,omitempty" toml:"sameSpan,omitempty" yaml:"sameSpan,omitempty" export:"true"`
ID128Bit bool `description:"Use Zipkin 128 bit root span IDs." json:"id128Bit,omitempty" toml:"id128Bit,omitempty" yaml:"id128Bit,omitempty" export:"true"`
Debug bool `description:"Enable Zipkin debug." json:"debug,omitempty" toml:"debug,omitempty" yaml:"debug,omitempty" export:"true"`
SampleRate float64 `description:"The rate between 0.0 and 1.0 of requests to trace." json:"sampleRate,omitempty" toml:"sampleRate,omitempty" yaml:"sampleRate,omitempty" export:"true"`
2018-01-10 16:48:04 +00:00
}
// SetDefaults sets the default values.
func (c *Config) SetDefaults() {
c.HTTPEndpoint = "http://localhost:9411/api/v1/spans"
c.SameSpan = false
c.ID128Bit = true
c.Debug = false
c.SampleRate = 1.0
}
2018-01-10 16:48:04 +00:00
// Setup sets up the tracer
func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error) {
collector, err := zipkin.NewHTTPCollector(c.HTTPEndpoint)
2018-02-15 09:28:03 +00:00
if err != nil {
return nil, nil, err
}
2018-11-14 09:18:03 +00:00
2018-01-10 16:48:04 +00:00
recorder := zipkin.NewRecorder(collector, c.Debug, "0.0.0.0:0", serviceName)
2018-11-14 09:18:03 +00:00
2018-01-10 16:48:04 +00:00
tracer, err := zipkin.NewTracer(
recorder,
zipkin.ClientServerSameSpan(c.SameSpan),
zipkin.TraceID128Bit(c.ID128Bit),
zipkin.DebugMode(c.Debug),
zipkin.WithSampler(zipkin.NewBoundarySampler(c.SampleRate, time.Now().Unix())),
2018-01-10 16:48:04 +00:00
)
if err != nil {
return nil, nil, err
}
// Without this, child spans are getting the NOOP tracer
opentracing.SetGlobalTracer(tracer)
2018-11-14 09:18:03 +00:00
log.WithoutContext().Debug("Zipkin tracer configured")
2018-04-16 15:42:03 +00:00
2018-01-10 16:48:04 +00:00
return tracer, collector, nil
}