jaegertracing/jaeger · error
empty configuration
Error message
empty configuration
What it means
errUnorderedValue reports that the referenced field is indexed in Elasticsearch as a keyword (string), not a number, so ordering/comparison operators that need numeric semantics cannot evaluate on it. The filter is rejected with tracestore.ErrFilterUnsupported to avoid lexicographic comparison silently producing wrong results (e.g. "9" > "10" as strings).
Source
Thrown at cmd/internal/storageconfig/factory.go:83
httpAuth, err = authResolver(backend.Elasticsearch.Authentication, "elasticsearch", name)
if err != nil {
return nil, err
}
}
factory, err = es.NewFactory(ctx, *backend.Elasticsearch, telset, httpAuth)
case backend.Opensearch != nil:
var httpAuth extensionauth.HTTPClient
if authResolver != nil {
httpAuth, err = authResolver(backend.Opensearch.Authentication, "opensearch", name)
if err != nil {
return nil, err
}
}
factory, err = es.NewFactory(ctx, *backend.Opensearch, telset, httpAuth)
case backend.ClickHouse != nil:
factory, err = clickhouse.NewFactory(ctx, *backend.ClickHouse, telset)
default:
err = errors.New("empty configuration")
}
if err != nil {
return nil, fmt.Errorf("failed to initialize storage '%s': %w", name, err)
}
return factory, nil
}
View on GitHub (pinned to 806f444784)
Solutions
- Use equality/inequality or regex-style matching on keyword-indexed fields instead of range operators.
- Write the value as a zero-padded or fixed-width string if lexicographic ordering coincides with the desired order, or store the attribute as a numeric-typed value via typed attribute indexing (RFC 0015).
- Perform range filtering post-hoc in application code after fetching with an equality match.
Example fix
// before tag.http.status_code > 400 // after tag.http.status_code == 500 OR tag.http.status_code == 502 OR tag.http.status_code == 503
Defensive patterns
Strategy: fallback
Validate before calling
func numericRangeSafe(ref reference, op expression.Operator) bool {
return ref.kind == numericField || op == expression.Eq || op == expression.NotEq
} Try / catch
q, err := attributeValueMatch(...)
if errors.Is(err, tracestore.ErrFilterUnsupported) {
// fall back to equality set or post-filter ranges client-side
} Prevention
- Never use range operators on keyword-indexed attributes.
- Store numeric attribute values via typed indexing if ranges are needed.
- Remember keyword comparison is lexicographic; zero-pad if you must order strings.
When it happens
Trigger: Applying an ordering operator (>, >=, <, <=) to an attribute or field stored as a keyword — via attributeValueMatch or buildTextComparison — such as tag.http.status_code > 400 where the tag value is stored as a keyword string.
Common situations: Numeric range filters on attributes that Jaeger writes as strings (all attribute values are keywords in this schema); porting numeric comparisons from SQL columns; UIs allowing range operators on any attribute.
Related errors
- file must begin with '['
- only one of basic auth (--es.username/--es.password), --es.t
- wrong number of arguments
- only one of basic auth (--es.username/--es.password), --es.t
- empty configuration
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/1f2d273eeb053870.
Report an issue: GitHub.