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
- Inspect the wrapped inner error for the exact Jaeger client failure
- Verify endpoint/collector URL format and reachability
- Check sampler type and param values against jaeger-client-go docs
- 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
- Use fully-qualified Jaeger endpoint URLs including scheme and path
- Match sampler_type/sampler_param values to jaeger-client-go docs
- Verify collector reachability with a curl before starting
- Keep Jaeger config keys aligned with the vendored client version
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
- parsing config tracing YAML
- tracing with type is not supported
- raw resolution must be higher than the minimum block size…
- 5m resolution retention must be higher than the minimum…
- building gRPC client
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)