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, nilView on GitHub (pinned to 806f444784)
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 %s: %w
- cannot find metrics storage factory: %w
- 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
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/ad1ecbde2bff3ada.
Report an issue: GitHub.