jaegertracing/jaeger · error
jaeger exporter is no longer supported, please use otlp
Error message
jaeger exporter is no longer supported, please use otlp
What it means
createOtelExporter in tracegen returns this error when the deprecated 'jaeger' exporter type is requested. Jaeger's own exporter was removed from OpenTelemetry and from this tool; only OTLP variants (otlp, otlp-http, otlp-grpc) are supported for sending generated spans.
Source
Thrown at cmd/tracegen/main.go:130
tp := sdktrace.NewTracerProvider(opts...)
tracers = append(tracers, tp.Tracer(cfg.Service))
shutdown = append(shutdown, tp.Shutdown)
}
return tracers, func(ctx context.Context) error {
var errs []error
for _, f := range shutdown {
errs = append(errs, f(ctx))
}
return errors.Join(errs...)
}
}
func createOtelExporter(exporterType string) (sdktrace.SpanExporter, error) {
var exporter sdktrace.SpanExporter
var err error
switch exporterType {
case "jaeger":
return nil, errors.New("jaeger exporter is no longer supported, please use otlp")
case "otlp", "otlp-http":
client := otlptracehttp.NewClient(
otlptracehttp.WithInsecure(),
)
exporter, err = otlptrace.New(context.Background(), client)
case "otlp-grpc":
client := otlptracegrpc.NewClient(
otlptracegrpc.WithInsecure(),
)
exporter, err = otlptrace.New(context.Background(), client)
case "stdout":
exporter, err = stdouttrace.New()
default:
return nil, fmt.Errorf("unrecognized exporter type %s", exporterType)
}
return exporter, err
}
View on GitHub (pinned to 806f444784)
Solutions
- Use --exporter otlp (or otlp-http) and point it at the collector's OTLP/HTTP endpoint (default 4318)
- Use --exporter otlp-grpc to target the collector's OTLP/gRPC endpoint (default 4317)
- Ensure the Jaeger receiver/collector has OTLP ingest enabled, since the legacy jaeger-thrift path no longer applies
Example fix
// before ./tracegen --exporter jaeger --jaeger-endpoint http://jaeger:14268/api/traces // after ./tracegen --exporter otlp --otlp-endpoint http://jaeger:4318
Defensive patterns
Strategy: validation
Validate before calling
var exporter string = "otlp" // flag value
switch exporter {
case "otlp", "otlp-http", "otlp-grpc":
// ok
default:
return fmt.Errorf("unsupported exporter %q; use otlp, otlp-http, or otlp-grpc", exporter)
} Type guard
func isSupportedExporter(t string) bool {
switch t {
case "otlp", "otlp-http", "otlp-grpc":
return true
}
return false
} Try / catch
tracer, err := createTracers(...)
if err != nil {
if strings.Contains(err.Error(), "jaeger exporter is no longer supported") {
return fmt.Errorf("migrate to --exporter otlp: %w", err)
}
return err
} Prevention
- Stop using --exporter jaeger in scripts and CI
- Target the collector's OTLP endpoints (4317/4318)
- Update docs/runbooks that reference the jaeger exporter
When it happens
Trigger: Running tracegen with --exporter jaeger (or JAEGER_EXPORTER env equivalent); createOtelExporter hits `case "jaeger"` and immediately returns nil exporter with this error, which createTracers propagates.
Common situations: Following an old tutorial or script that used the jaeger exporter; migrating a load-generation harness from pre-OTLP Jaeger setups; CI jobs still passing --exporter jaeger after upgrading tracegen.
Related errors
- unrecognized exporter type %s
- no sampling strategy provider specified, expecting 'adaptive
- only one sampling strategy provider can be specified, 'adapt
- reload interval must be a positive value, or zero to disable
- access denied
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/3efba73079629b61.
Report an issue: GitHub.