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

  1. Use equality/inequality or regex-style matching on keyword-indexed fields instead of range operators.
  2. 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).
  3. 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

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


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