- 
                Notifications
    You must be signed in to change notification settings 
- Fork 2.5k
Open
Labels
Description
We are using sentinel for high availability.
I'm in process of writing a library to support switchover from legacy deployments which do not use sentinel, and I noticed the server.address is missing from the sentinel spans:
Initialization of the tracer looks as follows:
	failoverOptions := &redis.FailoverOptions{
		SentinelAddrs:    []string{cfg.SentinelAddr},
		ClientName:       app.Info().PodID,
		DB:               cfg.DBNumber,
		Password:         string(cfg.Password),
		SentinelPassword: string(cfg.Password),
		// Base number of socket connections.
		// Default is 10 connections per every available CPU as reported by runtime.GOMAXPROCS.
		// If there is not enough connections in the pool, new connections will be allocated in excess of PoolSize,
		// you can limit it through MaxActiveConns
		PoolSize: cfg.PoolSize,
		// Minimum number of idle connections which is useful when establishing
		// new connection is slow.
		// Default is 0. the idle connections are not closed by default.
		MinIdleConns: cfg.MinIdleConns,
		// Maximum number of idle connections.
		// Default is 0. the idle connections are not closed by default.
		MaxIdleConns: cfg.MaxIdleConns,
		// Maximum number of connections allocated by the pool at a given time.
		// When zero, there is no limit on the number of connections in the pool.
		MaxActiveConns: cfg.MaxActiveConns,
		// there are additional idle
		ReplicaOnly:           role == RedisReplicaRoleReader,
		MasterName:            cfg.LeaderName,
		ContextTimeoutEnabled: true,
		// <<Stencil::Block(failoverOptions)>>
		// <</Stencil::Block>>
	}
	redis.SetLogger(&redisLogger{})
	var client redis.UniversalClient
	switch role {
	case RedisReplicaRoleReader:
		failoverOptions.RouteByLatency = cfg.RouteReadsByLatency
		client = redis.NewFailoverClusterClient(failoverOptions)
	case RedisReplicaRoleWriter:
		client = redis.NewFailoverClient(failoverOptions)
	default:
		return nil, fmt.Errorf("unknown RedisReplicaRole: %v", role)
	}
	ping := client.Ping(ctx)
	if ping.Err() != nil {
		return nil, errors.Wrapf(ping.Err(), "failed to contact Redis Sentinel at %q", cfg.SentinelAddr)
	}
	if err := redisotel.InstrumentTracing(client); err != nil {
		return nil, errors.Wrap(err, "failed to instrument Redis tracing")
	}
	if err := redisotel.InstrumentMetrics(client); err != nil {
		return nil, errors.Wrap(err, "failed to instrument Redis tracing")
	}
	return client, nilRelated:
- PR: add server address and port span attributes to redis otel trace instrumentation #2826
- Older issue adding it for standalone clients: redisotel: Missing server address and port attributes in spans #2825
Cause is because of this line here:
https://github.com/redis/go-redis/blob/master/sentinel.go#L90
It uses "FailoverClient" instead of any real address.
nikolaydubina and wzy9607
