jaegertracing/jaeger · warning

archive span storage was not configured

Error message

archive span storage was not configured

What it means

errNoArchiveSpanStorage is returned by QueryService.ArchiveTrace when the query service was constructed without an archive trace reader/writer. Archiving is an optional feature requiring a dedicated archive span storage to be configured; without one there is nowhere to write the trace, so ArchiveTrace fails with this error. It is unexported and treated as a caller/configuration problem rather than a server fault.

Source

Thrown at cmd/jaeger/internal/extension/jaegerquery/querysvc/service.go:26

	"errors"
	"fmt"
	"iter"
	"time"

	"go.opentelemetry.io/collector/pdata/pcommon"
	"go.opentelemetry.io/collector/pdata/ptrace"

	"github.com/jaegertracing/jaeger-idl/model/v1"
	expression "github.com/jaegertracing/jaeger-idl/query/expression/v1"
	"github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster"
	"github.com/jaegertracing/jaeger/components/extension/jaegerquery/queryinterceptor"
	"github.com/jaegertracing/jaeger/internal/jptrace"
	"github.com/jaegertracing/jaeger/internal/storage/v1/api/spanstore"
	"github.com/jaegertracing/jaeger/internal/storage/v2/api/depstore"
	"github.com/jaegertracing/jaeger/internal/storage/v2/api/tracestore"
)

var errNoArchiveSpanStorage = errors.New("archive span storage was not configured")

// ErrServiceNameRequired is returned for a search that omits the service name against a
// backend whose reader does not accept one (RFC 0013 §3.3). It names the backend's
// limitation rather than the missing field, because the same query is valid elsewhere.
// The API layers map it to InvalidArgument / HTTP 400.
var ErrServiceNameRequired = errors.New(
	"this storage backend requires a service name to search; searching all services is not supported",
)

// QueryServiceOptions holds the configuration options for the query service.
type QueryServiceOptions struct {
	// ArchiveTraceReader is used to read archived traces from the storage.
	ArchiveTraceReader tracestore.Reader
	// ArchiveTraceWriter is used to write traces to the archive storage.
	ArchiveTraceWriter tracestore.Writer
	// MaxClockSkewAdjust is the maximum duration by which to adjust a span.
	MaxClockSkewAdjust time.Duration
	// MaxTraceSize is the maximum number of spans allowed per trace. A value of 0 (default) means unlimited.

View on GitHub (pinned to 806f444784)

Solutions

  1. Configure archive span storage on the query service (e.g. --span-archive.type=... plus archive-specific flags/config) and restart.
  2. If archiving should not be available, hide/disable the archive action in clients (the UI hides it when the capability is absent) instead of calling it.
  3. Catch this error in client code and surface a clear message that archiving is not enabled on this deployment.

Example fix

// before: starting query without archive storage
jaeger-query --span-storage.type=cassandra
// after: enable archive storage
jaeger-query --span-storage.type=cassandra \
  --span-archive.type=cassandra \
  --cassandra.archive.keyspace=jaeger_archive_v2
Defensive patterns

Strategy: type-guard

Type guard

func isNoArchiveStorage(err error) bool {
    return err != nil && strings.Contains(err.Error(), "archive span storage was not configured")
}

Try / catch

err := svc.ArchiveTrace(ctx, traceID)
if err != nil {
    if isNoArchiveStorage(err) {
        return fmt.Errorf("archiving unavailable: %w", err) // surface as 404/409-ish, not retryable
    }
    return err
}

Prevention

When it happens

Trigger: Calling the ArchiveTrace API (HTTP POST /api/trace/{id} archive action or the gRPC equivalent) against a jaegerquery server started without --span-archive / archive storage configuration.

Common situations: Users clicking 'Archive trace' in the Jaeger UI on a deployment where archiving was never set up; automation that archives traces unconditionally regardless of deployment options; environments where archive storage was removed to save cost but clients still archive.

Related errors


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