diff --git a/tracing/tracing.go b/tracing/tracing.go index df6144b7dd054b4dfde6640d95351f872050275a..544ca1a0a0d917e47e7f06af2b75915fe4530f3b 100644 --- a/tracing/tracing.go +++ b/tracing/tracing.go @@ -8,6 +8,7 @@ import ( "net/http" "os" "path/filepath" + "strconv" "sync" openzipkin "github.com/openzipkin/zipkin-go" @@ -31,6 +32,7 @@ const globalTracingConfigPath = "/etc/tracing/client.conf" type tracingConfig struct { ReportURL string `json:"report_url"` + Sample string `json:"sample"` } // Read the global tracing configuration file. Its location is @@ -100,9 +102,23 @@ func initTracing(endpointAddr string) { reporter := zipkinHTTP.NewReporter(config.ReportURL) ze := zipkin.NewExporter(reporter, localEndpoint) - trace.RegisterExporter(ze) - trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()}) + + var tc trace.Config + switch config.Sample { + case "", "always": + tc.DefaultSampler = trace.AlwaysSample() + case "never": + tc.DefaultSampler = trace.NeverSample() + default: + frac, err := strconv.ParseFloat(config.Sample, 64) + if err != nil { + log.Printf("warning: error in tracing configuration: sample: %v, tracing disabled", err) + return + } + tc.DefaultSampler = trace.ProbabilitySampler(frac) + } + trace.ApplyConfig(tc) log.Printf("tracing enabled (report_url %s)", config.ReportURL)