jaegertracing/jaeger · error
cannot find traces archive storage factory
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.
Solutions
- Define a jaeger_storage backend whose name matches storage.traces_archive
- Fix the archive storage name spelling in the query extension config
- If archive storage is not wanted, remove the traces_archive key so addArchiveStorage is skipped
- 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
- Keep traces_archive and the jaeger_storage backends key identical
- Unset traces_archive when archive storage is not deployed
- Define archive and query in the same collector config
- Lint the collector config in CI to catch dangling references
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
- cannot find factory for trace storage
- cannot find metrics storage factory
- cannot create dependencies reader
- cannot create trace reader
- cannot find extension
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/ad1ecbde2bff3ada.
Report an issue: GitHub.
Appendix: 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, nilView on GitHub (pinned to 806f444784)