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

  1. Reconcile other registrations of 'redis.client.pubsub.messages' to use Int64Counter with matching unit '{message}' and description
  2. Resolve redisotel version conflicts in go.mod
  3. 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

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


AI-assisted analysis of go-redis/redis@36d97525cd (2026-08-06). Data as JSON: /data/errors/a6159b700849e1b8.json. Report an issue: GitHub.