thanos-io/thanos · error

new tracer provider err

Error message

new tracer provider err

What it means

When tracingConf.Type is 'JAEGER', NewTracer calls jaeger.NewTracerProvider with the backend config and wraps any returned error with 'new tracer provider err'. The underlying error comes from Jaeger client construction (invalid endpoint, bad sampler config, unsupported transport, TLS settings, etc.).

Solutions

  1. Inspect the wrapped inner error for the exact Jaeger client failure
  2. Verify endpoint/collector URL format and reachability
  3. Check sampler type and param values against jaeger-client-go docs
  4. Confirm config keys are supported by the vendored Jaeger client version

Example fix

// before
tracing:
  type: JAEGER
  config:
    endpoint: collector:14268
// after
tracing:
  type: JAEGER
  config:
    endpoint: http://collector:14268/api/traces
Defensive patterns

Strategy: try-catch

Validate before calling

// Validate Jaeger endpoint before construction
endpoint, _ := jaegerCfg["endpoint"].(string)
if endpoint != "" {
    if u, err := url.Parse(endpoint); err != nil || u.Scheme == "" || u.Host == "" {
        return fmt.Errorf("invalid jaeger endpoint %q", endpoint)
    }
}

Try / catch

tracer, closer, err := tracing.NewTracer(ctx, logger, reg, cfgYaml)
if err != nil && strings.Contains(err.Error(), "new tracer provider err") {
    logger.Error(err, "jaeger tracer construction failed; check wrapped cause")
    return err
}

Prevention

When it happens

Trigger: Type: JAEGER in tracing config with an invalid nested config, e.g. wrong 'endpoint' URL, invalid sampler_type/sampler_param, or misconfigured agent/collector flags passed to jaeger.NewTracerProvider.

Common situations: Pointing at a collector with a typo'd or unreachable endpoint URL, passing sampler_param of wrong type, or using config keys not recognized by the Jaeger client library version in use.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


AI-assisted analysis of thanos-io/thanos@35b8b99117 (2026-09-07). Data as JSON: /api/errors/ffc98ea1dbcfa13b. Report an issue: GitHub.

Appendix: source

Thrown at pkg/tracing/client/factory.go:70

	if tracingConf.Config != nil {
		config, err = yaml.Marshal(tracingConf.Config)
		if err != nil {
			return nil, nil, errors.Wrap(err, "marshal content of tracing configuration")
		}
	}

	switch strings.ToUpper(string(tracingConf.Type)) {
	case string(Stackdriver), string(GoogleCloud):
		tracerProvider, err := google_cloud.NewTracerProvider(ctx, logger, config)
		if err != nil {
			return nil, nil, err
		}
		tracer, closerFunc := migration.Bridge(tracerProvider, logger)
		return tracer, closerFunc, nil
	case string(Jaeger):
		tracerProvider, err := jaeger.NewTracerProvider(ctx, logger, config)
		if err != nil {
			return nil, nil, errors.Wrap(err, "new tracer provider err")
		}
		tracer, closerFunc := migration.Bridge(tracerProvider, logger)
		return tracer, closerFunc, nil
	case string(ElasticAPM):
		return elasticapm.NewTracer(config)
	case string(Lightstep):
		return lightstep.NewTracer(ctx, config)
	case string(OpenTelemetryProtocol):
		tracerProvider, err := otlp.NewTracerProvider(ctx, logger, config)
		if err != nil {
			return nil, nil, errors.Wrap(err, "new tracer provider err")
		}
		tracer, closerFunc := migration.Bridge(tracerProvider, logger)
		return tracer, closerFunc, nil
	default:
		return nil, nil, errors.Errorf("tracing with type %s is not supported", tracingConf.Type)
	}
}

View on GitHub (pinned to 35b8b99117)