Make Zipkin trace rate configurable

This commit is contained in:
Nic Cope 2018-10-09 01:18:02 -07:00 committed by Traefiker Bot
parent 51650c1412
commit 32f7fb8bff
6 changed files with 24 additions and 10 deletions

View file

@ -208,6 +208,7 @@ func NewTraefikDefaultPointersConfiguration() *TraefikConfiguration {
SameSpan: false, SameSpan: false,
ID128Bit: true, ID128Bit: true,
Debug: false, Debug: false,
SampleRate: 1.0,
}, },
DataDog: &datadog.Config{ DataDog: &datadog.Config{
LocalAgentHostPort: "localhost:8126", LocalAgentHostPort: "localhost:8126",

View file

@ -206,6 +206,7 @@ func (gc *GlobalConfiguration) initTracing() {
SameSpan: false, SameSpan: false,
ID128Bit: true, ID128Bit: true,
Debug: false, Debug: false,
SampleRate: 1.0,
} }
} }
if gc.Tracing.Jaeger != nil { if gc.Tracing.Jaeger != nil {

View file

@ -120,6 +120,7 @@ func TestSetEffectiveConfigurationTracing(t *testing.T) {
SameSpan: false, SameSpan: false,
ID128Bit: true, ID128Bit: true,
Debug: false, Debug: false,
SampleRate: 1.0,
}, },
}, },
}, },
@ -138,6 +139,7 @@ func TestSetEffectiveConfigurationTracing(t *testing.T) {
SameSpan: true, SameSpan: true,
ID128Bit: true, ID128Bit: true,
Debug: true, Debug: true,
SampleRate: 0.02,
}, },
}, },
expected: &tracing.Tracing{ expected: &tracing.Tracing{
@ -148,6 +150,7 @@ func TestSetEffectiveConfigurationTracing(t *testing.T) {
SameSpan: true, SameSpan: true,
ID128Bit: true, ID128Bit: true,
Debug: true, Debug: true,
SampleRate: 0.02,
}, },
}, },
}, },

View file

@ -100,7 +100,7 @@ Træfik supports three tracing backends: Jaeger, Zipkin and DataDog.
spanNameLimit = 150 spanNameLimit = 150
[tracing.zipkin] [tracing.zipkin]
# Zipking HTTP endpoint used to send data # Zipkin HTTP endpoint used to send data
# #
# Default: "http://localhost:9411/api/v1/spans" # Default: "http://localhost:9411/api/v1/spans"
# #
@ -112,17 +112,23 @@ Træfik supports three tracing backends: Jaeger, Zipkin and DataDog.
# #
debug = false debug = false
# Use ZipKin SameSpan RPC style traces # Use Zipkin SameSpan RPC style traces
# #
# Default: false # Default: false
# #
sameSpan = false sameSpan = false
# Use ZipKin 128 bit root span IDs # Use Zipkin 128 bit root span IDs
# #
# Default: true # Default: true
# #
id128Bit = true id128Bit = true
# The rate between 0.0 and 1.0 of requests to trace.
#
# Default: 1.0
#
sampleRate = 0.2
``` ```
## DataDog ## DataDog

View file

@ -85,7 +85,7 @@ func (s *TracingSuite) TestZipkinRateLimit(c *check.C) {
err = try.GetRequest("http://127.0.0.1:8000/ratelimit", 500*time.Millisecond, try.StatusCodeIs(http.StatusTooManyRequests)) err = try.GetRequest("http://127.0.0.1:8000/ratelimit", 500*time.Millisecond, try.StatusCodeIs(http.StatusTooManyRequests))
c.Assert(err, checker.IsNil) c.Assert(err, checker.IsNil)
err = try.GetRequest("http://"+s.ZipkinIP+":9411/api/v2/spans?serviceName=tracing", 10*time.Second, try.BodyContains("forward frontend1/backend1", "rate limit")) err = try.GetRequest("http://"+s.ZipkinIP+":9411/api/v2/spans?serviceName=tracing", 20*time.Second, try.BodyContains("forward frontend1/backend1", "rate limit"))
c.Assert(err, checker.IsNil) c.Assert(err, checker.IsNil)
} }
@ -109,7 +109,7 @@ func (s *TracingSuite) TestZipkinRetry(c *check.C) {
err = try.GetRequest("http://127.0.0.1:8000/retry", 500*time.Millisecond, try.StatusCodeIs(http.StatusBadGateway)) err = try.GetRequest("http://127.0.0.1:8000/retry", 500*time.Millisecond, try.StatusCodeIs(http.StatusBadGateway))
c.Assert(err, checker.IsNil) c.Assert(err, checker.IsNil)
err = try.GetRequest("http://"+s.ZipkinIP+":9411/api/v2/spans?serviceName=tracing", 10*time.Second, try.BodyContains("forward frontend2/backend2", "retry")) err = try.GetRequest("http://"+s.ZipkinIP+":9411/api/v2/spans?serviceName=tracing", 20*time.Second, try.BodyContains("forward frontend2/backend2", "retry"))
c.Assert(err, checker.IsNil) c.Assert(err, checker.IsNil)
} }
@ -132,6 +132,6 @@ func (s *TracingSuite) TestZipkinAuth(c *check.C) {
err = try.GetRequest("http://127.0.0.1:8000/auth", 500*time.Millisecond, try.StatusCodeIs(http.StatusUnauthorized)) err = try.GetRequest("http://127.0.0.1:8000/auth", 500*time.Millisecond, try.StatusCodeIs(http.StatusUnauthorized))
c.Assert(err, checker.IsNil) c.Assert(err, checker.IsNil)
err = try.GetRequest("http://"+s.ZipkinIP+":9411/api/v2/spans?serviceName=tracing", 10*time.Second, try.BodyContains("entrypoint http", "auth basic")) err = try.GetRequest("http://"+s.ZipkinIP+":9411/api/v2/spans?serviceName=tracing", 20*time.Second, try.BodyContains("entrypoint http", "auth basic"))
c.Assert(err, checker.IsNil) c.Assert(err, checker.IsNil)
} }

View file

@ -2,6 +2,7 @@ package zipkin
import ( import (
"io" "io"
"time"
"github.com/containous/traefik/log" "github.com/containous/traefik/log"
"github.com/opentracing/opentracing-go" "github.com/opentracing/opentracing-go"
@ -13,10 +14,11 @@ const Name = "zipkin"
// Config provides configuration settings for a zipkin tracer // Config provides configuration settings for a zipkin tracer
type Config struct { type Config struct {
HTTPEndpoint string `description:"HTTP Endpoint to report traces to." export:"false"` HTTPEndpoint string `description:"HTTP Endpoint to report traces to." export:"false"`
SameSpan bool `description:"Use ZipKin SameSpan RPC style traces." export:"true"` SameSpan bool `description:"Use Zipkin SameSpan RPC style traces." export:"true"`
ID128Bit bool `description:"Use ZipKin 128 bit root span IDs." export:"true"` ID128Bit bool `description:"Use Zipkin 128 bit root span IDs." export:"true"`
Debug bool `description:"Enable Zipkin debug." export:"true"` Debug bool `description:"Enable Zipkin debug." export:"true"`
SampleRate float64 `description:"The rate between 0.0 and 1.0 of requests to trace." export:"true"`
} }
// Setup sets up the tracer // Setup sets up the tracer
@ -31,6 +33,7 @@ func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error
zipkin.ClientServerSameSpan(c.SameSpan), zipkin.ClientServerSameSpan(c.SameSpan),
zipkin.TraceID128Bit(c.ID128Bit), zipkin.TraceID128Bit(c.ID128Bit),
zipkin.DebugMode(c.Debug), zipkin.DebugMode(c.Debug),
zipkin.WithSampler(zipkin.NewBoundarySampler(c.SampleRate, time.Now().Unix())),
) )
if err != nil { if err != nil {