jaegertracing/jaeger · error
invalid configuration for metric storage '%s': %w
Error message
invalid configuration for metric storage '%s': %w
What it means
Same fail-fast validation as the trace backends, but applied to s.config.MetricBackends in storageExt.Start: each metric storage entry's Validate() must pass or startup aborts with 'invalid configuration for metric storage %s'.
Source
Thrown at cmd/jaeger/internal/extension/jaegerstorage/extension.go:152
factories: make(map[string]tracestore.Factory),
metricsFactories: make(map[string]storage.MetricStoreFactory),
}
}
func (s *storageExt) Start(_ context.Context, host component.Host) error {
// Set host in telset for use in lazy factory initialization
s.telset.Host = host
s.telset.Metrics = otelmetrics.NewFactory(s.telset.MeterProvider).Namespace(metrics.NSOptions{Name: "jaeger"})
// Validate configurations early to catch errors at startup
for name, cfg := range s.config.TraceBackends {
if err := cfg.Validate(); err != nil {
return fmt.Errorf("invalid configuration for trace storage '%s': %w", name, err)
}
}
for name, cfg := range s.config.MetricBackends {
if err := cfg.Validate(); err != nil {
return fmt.Errorf("invalid configuration for metric storage '%s': %w", name, err)
}
}
return nil
}
func (s *storageExt) Shutdown(context.Context) error {
var errs []error
for _, factory := range s.factories {
if closer, ok := factory.(io.Closer); ok {
err := closer.Close()
if err != nil {
errs = append(errs, err)
}
}
}
for _, metricfactory := range s.metricsFactories {
if closer, ok := metricfactory.(io.Closer); ok {View on GitHub (pinned to 806f444784)
Solutions
- Fix the named metric backend entry per the inner validation error
- Configure exactly one backend type per metric storage entry with valid fields
- Validate the collector config with `otelcol validate --config=...` before startup
Example fix
// before: empty metric backend entry
metric_backends:
metrics-store: {}
// after
metric_backends:
metrics-store:
prometheus:
endpoint: http://prometheus:9090 Defensive patterns
Strategy: validation
Validate before calling
for name, cfg := range extConfig.MetricBackends {
if err := cfg.Validate(); err != nil {
return fmt.Errorf("metric storage '%s' invalid: %w", name, err)
}
} Try / catch
if err := ext.Start(ctx, host); err != nil {
if strings.Contains(err.Error(), "invalid configuration for metric storage") {
return fmt.Errorf("fix jaegerstorage metric backend config: %w", err)
}
return err
} Prevention
- Validate metric_backends entries with otelcol validate before deploy
- Ensure each metric backend entry sets exactly one supported backend
- Keep metric backend fields current with the jaeger config schema
When it happens
Trigger: storageExt.Start iterating s.config.MetricBackends; a metric backend entry (prometheus/elasticsearch/opensearch/clickhouse) fails Validate() — e.g. no backend selected, multiple selected, or invalid fields.
Common situations: A metric_backends entry with an empty body, prometheus plus elasticsearch both set, or invalid Prometheus endpoint/server settings.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- invalid configuration for trace storage '%s': %w
- 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
- cannot find extension '%s' (make sure it's defined earlier i
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/b30e475b287afc47.
Report an issue: GitHub.