go-redis/redis · error
failed to create Pub/Sub messages metric: %w
Error message
failed to create Pub/Sub messages metric: %w
What it means
Returned by createRecorder (redisotel.go:314) when meter.Int64Counter fails to create the 'redis.client.pubsub.messages' instrument. Only checked when MetricGroupPubSub is enabled.
Source
Thrown at extra/redisotel-native/redisotel.go:314
dbconv.ClientConnectionPendingRequests{}.Name(),
metric.WithDescription(dbconv.ClientConnectionPendingRequests{}.Description()),
metric.WithUnit(dbconv.ClientConnectionPendingRequests{}.Unit()),
)
if err != nil {
return nil, fmt.Errorf("failed to create connection pending requests metric: %w", err)
}
}
var pubsubMessages metric.Int64Counter
if cfg.isMetricGroupEnabled(MetricGroupPubSub) {
pubsubMessages, err = meter.Int64Counter(
MetricPubSubMessages,
metric.WithDescription("The number of Pub/Sub messages sent or received"),
metric.WithUnit("{message}"),
)
if err != nil {
return nil, fmt.Errorf("failed to create Pub/Sub messages metric: %w", err)
}
}
var streamLag metric.Float64Histogram
if cfg.isMetricGroupEnabled(MetricGroupStream) {
var streamLagOpts []metric.Float64HistogramOption
streamLagOpts = append(streamLagOpts,
metric.WithDescription("The lag between message creation and consumption in a stream consumer group"),
metric.WithUnit("s"),
)
if cfg.histAggregation == HistogramAggregationExplicitBucket {
streamLagOpts = append(streamLagOpts,
metric.WithExplicitBucketBoundaries(cfg.bucketsStreamProcessingDuration...),
)
}
streamLag, err = meter.Float64Histogram(
MetricStreamLag,View on GitHub (pinned to 36d97525cd)
Solutions
- Reconcile other registrations of 'redis.client.pubsub.messages' to use Int64Counter with matching unit '{message}' and description
- Resolve redisotel version conflicts in go.mod
- Verify MeterProvider validity
Example fix
// before - conflicting metadata from another integration
meter.Int64Counter("redis.client.pubsub.messages",
metric.WithDescription("pub/sub events"))
// after - match redisotel's description
meter.Int64Counter("redis.client.pubsub.messages",
metric.WithDescription("The number of Pub/Sub messages sent or received")) Defensive patterns
Strategy: try-catch
Try / catch
if err := obs.Init(cfg); err != nil {
if strings.Contains(err.Error(), "Pub/Sub messages metric") {
log.Error("conflict on 'redis.client.pubsub.messages'; reconcile unit '{message}' and description")
}
} Prevention
- Ensure no other library registers 'redis.client.pubsub.messages' with conflicting metadata
- Resolve redisotel version conflicts in go.mod
- Verify MeterProvider validity
When it happens
Trigger: Calling Init with MetricGroupFlagPubSub enabled, and the OTel SDK rejects the Counter creation.
Common situations: Another library registered 'redis.client.pubsub.messages' with conflicting metadata; conflicting redisotel versions; broken MeterProvider.
Related errors
- failed to create connection handoff metric: %w
- failed to create client errors metric: %w
- failed to create maintenance notifications metric: %w
- failed to create connection closed metric: %w
- failed to create metrics recorder: %w
AI-assisted analysis of go-redis/redis@36d97525cd (2026-08-06).
Data as JSON: /data/errors/a6159b700849e1b8.json.
Report an issue: GitHub.