jaegertracing/jaeger · error
failed getting call metrics: %w
Error message
failed getting call metrics: %w
What it means
GetErrorRates delegates to GetCallRates to distinguish 'no error-rate data' from 'no call-rate data at all'. When the call-rate range query fails, the error is wrapped with this prefix. Like [380], this indicates a failed Prometheus QueryRange call, not empty data.
Source
Thrown at internal/storage/metricstore/prometheus/metricstore/reader.go:232
m.callsMetricName, p.serviceFilter, p.spanKindFilter, p.rate, p.groupBy,
m.callsMetricName, p.serviceFilter, p.spanKindFilter, p.rate, p.groupBy,
)
},
}
errorMetrics, err := m.executeQuery(ctx, metricsParams)
if err != nil {
return nil, fmt.Errorf("failed getting error metrics: %w", err)
}
// Non-zero error rates are available.
if len(errorMetrics.Metrics) > 0 {
return errorMetrics, nil
}
// Check for the presence of call rate metrics to differentiate the absence of error rate from
// the absence of call rate metrics altogether.
callMetrics, err := m.GetCallRates(ctx, &metricstore.CallRateQueryParameters{BaseQueryParameters: requestParams.BaseQueryParameters})
if err != nil {
return nil, fmt.Errorf("failed getting call metrics: %w", err)
}
// No call rate metrics are available, and by association, means no error rate metrics are available.
if len(callMetrics.Metrics) == 0 {
return errorMetrics, nil
}
// Non-zero call rate metrics are available, which implies that there are just no errors, so we report a zero error rate.
zeroErrorMetrics := make([]*metrics.Metric, 0, len(callMetrics.Metrics))
for _, cm := range callMetrics.Metrics {
zm := *cm
for i := 0; i < len(zm.MetricPoints); i++ {
zm.MetricPoints[i].Value = &metrics.MetricPoint_GaugeValue{GaugeValue: &metrics.GaugeValue{Value: &metrics.GaugeValue_DoubleValue{DoubleValue: 0.0}}}
}
zeroErrorMetrics = append(zeroErrorMetrics, &zm)
}
errorMetrics.Metrics = zeroErrorMetrics
return errorMetrics, nilView on GitHub (pinned to 806f444784)
Solutions
- Fix the underlying Prometheus connectivity/query problem identified by the wrapped inner error.
- Verify the configured Prometheus server URL and that call-rate metrics (jaeger_spans_calls_total family) exist in Prometheus.
- Check Prometheus /api/v1/status/flags and server logs for rejected queries.
- Confirm query range parameters (EndTime, Step) are valid and within Prometheus retention.
Defensive patterns
Strategy: try-catch
Validate before calling
if err := promClient.Query(ctx, promclient.NewClientV1(api.Config{}), `jaeger_spans_calls_total`); err != nil {
return fmt.Errorf("call-rate metrics unavailable: %w", err)
} Try / catch
callMetrics, err := m.GetCallRates(ctx, &metricstore.CallRateQueryParameters{...})
if err != nil {
return nil, fmt.Errorf("failed getting call metrics: %w", err)
} Prevention
- Confirm jaeger_spans_calls_total metrics exist in Prometheus before using the metrics API.
- Keep Jaeger and Prometheus server versions compatible.
- Alert on Prometheus API error rates.
When it happens
Trigger: Calling GetErrorRates where the nested GetCallRates -> executeQuery -> client.QueryRange call fails (connection error, invalid query, Prometheus API error, cancelled context).
Common situations: Same as error-rate failures: bad Prometheus URL, Prometheus outage, network partition, or call-rate query rejected by the server.
Related errors
- failed getting error metrics: %w
- failed executing metrics query: %w
- cannot find metrics storage factory: %w
- failed executing metrics query: %w
- unexpected metrics ValueType: %s
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/77950bdc03e9960d.
Report an issue: GitHub.