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 errView on GitHub (pinned to 806f444784)
Solutions
- Ensure every ID in query.interceptors is present in the collector config and started successfully
- Check that the interceptor extension implements the expected queryinterceptor interface (version alignment between jaeger components)
- Inspect the interceptor extension's own startup logs for its failure
- 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
- Declare every interceptor in Dependencies()/extensions config before referencing it
- Keep all jaeger components on the same release version
- Check the interceptor extension's startup logs when resolution fails
- Remove unused interceptor entries from config
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
- cannot find factory for trace storage %s: %w
- cannot find extension '%s' (make sure it's defined earlier i
- 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/923a71bd463b5715.
Report an issue: GitHub.