jaegertracing/jaeger · error

cannot resolve query interceptors: %w

Error message

cannot resolve query interceptors: %w

What it means

Start resolves the configured query interceptors (queryinterceptor.Resolve) against the component host. Interceptors are declared extension dependencies; if a configured interceptor extension is not present or fails its contract, Resolve returns an error wrapped as 'cannot resolve query interceptors'.

Source

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

	telset := telemetry.FromOtelComponent(s.telset, host)
	if !s.config.EnableTracing {
		telset.TracerProvider = nooptrace.NewTracerProvider()
	}
	telset.Metrics = telset.Metrics.
		Namespace(metrics.NSOptions{Name: "jaeger"}).
		Namespace(metrics.NSOptions{Name: "query"})
	tf, err := jaegerstorage.GetTraceStoreFactory(s.config.Storage.TracesPrimary, host)
	if err != nil {
		return fmt.Errorf("cannot find factory for trace storage %s: %w", s.config.Storage.TracesPrimary, err)
	}
	traceReader, err := tf.CreateTraceReader()
	if err != nil {
		return fmt.Errorf("cannot create trace reader: %w", err)
	}

	interceptors, err := queryinterceptor.Resolve(host, s.config.QueryInterceptors)
	if err != nil {
		return fmt.Errorf("cannot resolve query interceptors: %w", err)
	}

	df, ok := tf.(depstore.Factory)
	if !ok {
		return fmt.Errorf("cannot find factory for dependency storage %s: %w", s.config.Storage.TracesPrimary, err)
	}
	depReader, err := df.CreateDependencyReader()
	if err != nil {
		return fmt.Errorf("cannot create dependencies reader: %w", err)
	}

	opts := querysvc.QueryServiceOptions{
		MaxClockSkewAdjust: s.config.MaxClockSkewAdjust,
		MaxTraceSize:       s.config.MaxTraceSize,
		Interceptors:       interceptors,
	}
	if err := s.addArchiveStorage(&opts, host); err != nil {
		return err

View on GitHub (pinned to 806f444784)

Solutions

  1. Ensure every ID in query.interceptors is present in the collector config and started successfully
  2. Check that the interceptor extension implements the expected queryinterceptor interface (version alignment between jaeger components)
  3. Inspect the interceptor extension's own startup logs for its failure
  4. Remove the interceptor entry if it is not needed

Example fix

// before
jaeger_query:
  interceptors: [my_interceptor]  # extension not configured
// after
extensions:
  my_interceptor: {}
  jaeger_query:
    interceptors: [my_interceptor]
Defensive patterns

Strategy: validation

Validate before calling

// Ensure every configured interceptor is a declared, started extension
for _, id := range cfg.QueryInterceptors {
	if !declaredInConfig(id, cfg.Extensions) {
		return fmt.Errorf("interceptor %s not configured under extensions", id)
	}
}

Try / catch

if err := ext.Start(ctx, host); err != nil {
	if strings.Contains(err.Error(), "cannot resolve query interceptors") {
		log.Fatalf("interceptor resolve failed: %v — check extensions and versions", err)
	}
	return err
}

Prevention

When it happens

Trigger: config.QueryInterceptors lists an extension ID that is not started/registered in the host, or a registered extension does not implement the query interceptor interface.

Common situations: Adding an interceptor to the query config but forgetting to declare/start its extension; interceptor extension failed during its own Start; version mismatch where the extension no longer implements the expected interface.

Related errors


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