jaegertracing/jaeger · error

cannot find traces archive storage factory: %w

Error message

cannot find traces archive storage factory: %w

What it means

addArchiveStorage is invoked only when archive storage is configured; it looks up the archive trace store factory by Storage.TracesArchive name. If jaegerstorage.GetTraceStoreFactory cannot find that factory in the host, the error 'cannot find traces archive storage factory' is returned.

Source

Thrown at cmd/jaeger/internal/extension/jaegerquery/server.go:203

		Check:    aihealth.NewACPCheck(aiCfg.AgentURL, aiCfg.AgentHeaders, logger),
		Interval: aiCfg.HealthCheckInterval,
		Timeout:  aiCfg.HealthCheckTimeout,
		Logger:   logger,
	}
}

func (s *server) addArchiveStorage(
	opts *querysvc.QueryServiceOptions,
	host component.Host,
) error {
	if s.config.Storage.TracesArchive == "" {
		s.telset.Logger.Info("Archive storage not configured")
		return nil
	}

	f, err := jaegerstorage.GetTraceStoreFactory(s.config.Storage.TracesArchive, host)
	if err != nil {
		return fmt.Errorf("cannot find traces archive storage factory: %w", err)
	}

	traceReader, traceWriter := s.initArchiveStorage(f)
	if traceReader == nil || traceWriter == nil {
		return nil
	}

	opts.ArchiveTraceReader = traceReader
	opts.ArchiveTraceWriter = traceWriter

	return nil
}

func (s *server) initArchiveStorage(f tracestore.Factory) (tracestore.Reader, tracestore.Writer) {
	reader, err := f.CreateTraceReader()
	if err != nil {
		s.telset.Logger.Error("Cannot init traces archive storage reader", zap.Error(err))
		return nil, nil

View on GitHub (pinned to 806f444784)

Solutions

  1. Define a jaeger_storage backend whose name matches storage.traces_archive
  2. Fix the archive storage name spelling in the query extension config
  3. If archive storage is not wanted, remove the traces_archive key so addArchiveStorage is skipped
  4. Verify the archive backend extension started successfully before the query extension

Example fix

// before
jaeger_storage:
  backends:
    main: {badger: {}}
jaeger_query:
  storage:
    traces_archive: archive-es  # undefined
// after
jaeger_storage:
  backends:
    main: {badger: {}}
    archive-es: {elasticsearch: {server_urls: ["http://es:9200"]}}
jaeger_query:
  storage:
    traces_archive: archive-es
Defensive patterns

Strategy: validation

Validate before calling

// Only set traces_archive if the backend is actually defined
if cfg.Storage.TracesArchive != "" {
	if _, ok := storageBackends[cfg.Storage.TracesArchive]; !ok {
		return fmt.Errorf("archive backend %q not defined", cfg.Storage.TracesArchive)
	}
}

Try / catch

if err := ext.Start(ctx, host); err != nil {
	if strings.Contains(err.Error(), "cannot find traces archive storage factory") {
		log.Fatalf("archive backend %q missing — define it or unset traces_archive", archiveName)
	}
	return err
}

Prevention

When it happens

Trigger: config.Storage.TracesArchive is set (non-empty) but no jaeger_storage backend with that exact name exists/started in the collector.

Common situations: Typo in the archive storage name; archive backend removed from config while traces_archive still references it; archive storage defined in a different collector instance than the query extension.

Related errors


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