From 2240c489e8676678b6d4adf32eb70b346ee32524 Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Thu, 3 May 2018 14:59:24 +0200 Subject: [PATCH] support adding arbitrary extra tags in jaeger traces --- cmd/mt-store-cat/main.go | 2 +- conf/tracing.go | 13 +++++++++++-- docker/docker-chaos/metrictank.ini | 2 ++ docker/docker-cluster/metrictank.ini | 2 ++ .../docker-dev-custom-cfg-kafka/metrictank.ini | 2 ++ docs/config.md | 2 ++ metrictank-sample.ini | 2 ++ metrictank.go | 16 +++++++++++++++- scripts/config/metrictank-docker.ini | 2 ++ scripts/config/metrictank-package.ini | 2 ++ 10 files changed, 41 insertions(+), 4 deletions(-) diff --git a/cmd/mt-store-cat/main.go b/cmd/mt-store-cat/main.go index edb38e511a..8660850779 100644 --- a/cmd/mt-store-cat/main.go +++ b/cmd/mt-store-cat/main.go @@ -167,7 +167,7 @@ func main() { if err != nil { log.Fatal(4, "failed to initialize cassandra. %s", err) } - tracer, traceCloser, err := conf.GetTracer(false, "") + tracer, traceCloser, err := conf.GetTracer(false, "", nil) if err != nil { log.Fatal(4, "Could not initialize jaeger tracer: %s", err.Error()) } diff --git a/conf/tracing.go b/conf/tracing.go index 496d0964db..6611325b23 100644 --- a/conf/tracing.go +++ b/conf/tracing.go @@ -9,7 +9,9 @@ import ( jaegerlog "github.com/uber/jaeger-client-go/log" ) -func GetTracer(enabled bool, addr string) (opentracing.Tracer, io.Closer, error) { +// GetTracer returns a jaeger tracer +// any tags specified will be added as process/tracer-level tags +func GetTracer(enabled bool, addr string, tags map[string]string) (opentracing.Tracer, io.Closer, error) { // Sample configuration for testing. Use constant sampling to sample every trace // and enable LogSpan to log every span via configured Logger. cfg := jaegercfg.Configuration{ @@ -26,9 +28,16 @@ func GetTracer(enabled bool, addr string) (opentracing.Tracer, io.Closer, error) jLogger := jaegerlog.StdLogger + options := []jaegercfg.Option{ + jaegercfg.Logger(jLogger), + } + for k, v := range tags { + options = append(options, jaegercfg.Tag(k, v)) + } + tracer, closer, err := cfg.New( "metrictank", - jaegercfg.Logger(jLogger), + options..., ) if err != nil { return nil, nil, err diff --git a/docker/docker-chaos/metrictank.ini b/docker/docker-chaos/metrictank.ini index 6eb993ecee..9f49c7fe34 100644 --- a/docker/docker-chaos/metrictank.ini +++ b/docker/docker-chaos/metrictank.ini @@ -97,6 +97,8 @@ log-level = 2 tracing-enabled = true # address of the jaeger agent to send data to tracing-addr = jaeger:6831 +# tracer/process-level tags to include, specified as comma-separated key:value pairs +tracing-add-tags = ## Retention settings ## [retention] diff --git a/docker/docker-cluster/metrictank.ini b/docker/docker-cluster/metrictank.ini index 3b35d919b4..4b9e384206 100644 --- a/docker/docker-cluster/metrictank.ini +++ b/docker/docker-cluster/metrictank.ini @@ -97,6 +97,8 @@ log-level = 2 tracing-enabled = true # address of the jaeger agent to send data to tracing-addr = jaeger:6831 +# tracer/process-level tags to include, specified as comma-separated key:value pairs +tracing-add-tags = ## Retention settings ## [retention] diff --git a/docker/docker-dev-custom-cfg-kafka/metrictank.ini b/docker/docker-dev-custom-cfg-kafka/metrictank.ini index 0b3baf4177..640b915abf 100644 --- a/docker/docker-dev-custom-cfg-kafka/metrictank.ini +++ b/docker/docker-dev-custom-cfg-kafka/metrictank.ini @@ -97,6 +97,8 @@ log-level = 2 tracing-enabled = false # address of the jaeger agent to send data to tracing-addr = localhost:6831 +# tracer/process-level tags to include, specified as comma-separated key:value pairs +tracing-add-tags = ## Retention settings ## [retention] diff --git a/docs/config.md b/docs/config.md index 31284dae1a..70c55651e7 100644 --- a/docs/config.md +++ b/docs/config.md @@ -126,6 +126,8 @@ log-level = 2 tracing-enabled = false # address of the jaeger agent to send data to tracing-addr = localhost:6831 +# tracer/process-level tags to include, specified as comma-separated key:value pairs +tracing-add-tags = ``` ## Retention settings ## diff --git a/metrictank-sample.ini b/metrictank-sample.ini index 3f7e5cb377..2f1dcd5d51 100644 --- a/metrictank-sample.ini +++ b/metrictank-sample.ini @@ -100,6 +100,8 @@ log-level = 2 tracing-enabled = false # address of the jaeger agent to send data to tracing-addr = localhost:6831 +# tracer/process-level tags to include, specified as comma-separated key:value pairs +tracing-add-tags = ## Retention settings ## [retention] diff --git a/metrictank.go b/metrictank.go index 318627dcbe..8e16b72e94 100644 --- a/metrictank.go +++ b/metrictank.go @@ -101,6 +101,7 @@ var ( tracingEnabled = flag.Bool("tracing-enabled", false, "enable/disable distributed opentracing via jaeger") tracingAddr = flag.String("tracing-addr", "localhost:6831", "address of the jaeger agent to send data to") + tracingAddTags = flag.String("tracing-add-tags", "", "tracer/process-level tags to include, specified as comma-separated key:value pairs") ) func init() { @@ -270,7 +271,20 @@ func main() { /*********************************** Initialize tracer ***********************************/ - tracer, traceCloser, err := conf.GetTracer(*tracingEnabled, *tracingAddr) + *tracingAddTags = strings.TrimSpace(*tracingAddTags) + var tags map[string]string + if len(*tracingAddTags) > 0 { + tagSpecs := strings.Split(*tracingAddTags, ",") + tags = make(map[string]string) + for _, tagSpec := range tagSpecs { + split := strings.Split(tagSpec, ":") + if len(split) != 2 { + log.Fatal(4, "cannot parse tracing-add-tags value %q", tagSpec) + } + tags[split[0]] = split[1] + } + } + tracer, traceCloser, err := conf.GetTracer(*tracingEnabled, *tracingAddr, tags) if err != nil { log.Fatal(4, "Could not initialize jaeger tracer: %s", err.Error()) } diff --git a/scripts/config/metrictank-docker.ini b/scripts/config/metrictank-docker.ini index bdaada54a8..eea78ad1e5 100644 --- a/scripts/config/metrictank-docker.ini +++ b/scripts/config/metrictank-docker.ini @@ -97,6 +97,8 @@ log-level = 2 tracing-enabled = false # address of the jaeger agent to send data to tracing-addr = localhost:6831 +# tracer/process-level tags to include, specified as comma-separated key:value pairs +tracing-add-tags = ## Retention settings ## [retention] diff --git a/scripts/config/metrictank-package.ini b/scripts/config/metrictank-package.ini index 15cda0c853..fd7e27cb07 100644 --- a/scripts/config/metrictank-package.ini +++ b/scripts/config/metrictank-package.ini @@ -97,6 +97,8 @@ log-level = 2 tracing-enabled = false # address of the jaeger agent to send data to tracing-addr = localhost:6831 +# tracer/process-level tags to include, specified as comma-separated key:value pairs +tracing-add-tags = ## Retention settings ## [retention]