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

  1. Use --exporter otlp (or otlp-http) and point it at the collector's OTLP/HTTP endpoint (default 4318)
  2. Use --exporter otlp-grpc to target the collector's OTLP/gRPC endpoint (default 4317)
  3. 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

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


AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01). Data as JSON: /api/errors/3efba73079629b61. Report an issue: GitHub.