Skip to content

Commit 07d2151

Browse files
committed
add server address and port attributes to redis otel trace instrumentation
1 parent 2512123 commit 07d2151

File tree

6 files changed

+73
-39
lines changed

6 files changed

+73
-39
lines changed

extra/rediscensus/go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
22
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3-
github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao=
4-
github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w=
5-
github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y=
6-
github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
3+
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
4+
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
5+
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
6+
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
77
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
88
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
99
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=

extra/rediscmd/go.mod

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
module github.com/redis/go-redis/extra/rediscmd/v9
22

3-
go 1.15
3+
go 1.19
44

55
replace github.com/redis/go-redis/v9 => ../..
66

77
require (
8-
github.com/bsm/ginkgo/v2 v2.7.0
9-
github.com/bsm/gomega v1.26.0
8+
github.com/bsm/ginkgo/v2 v2.12.0
9+
github.com/bsm/gomega v1.27.10
1010
github.com/redis/go-redis/v9 v9.4.0
1111
)
12+
13+
require (
14+
github.com/cespare/xxhash/v2 v2.2.0 // indirect
15+
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
16+
)

extra/rediscmd/go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao=
2-
github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w=
3-
github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y=
4-
github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
1+
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
2+
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
3+
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
4+
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
55
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
66
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
77
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=

extra/redisotel/go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ replace github.com/redis/go-redis/extra/rediscmd/v9 => ../rediscmd
99
require (
1010
github.com/redis/go-redis/extra/rediscmd/v9 v9.4.0
1111
github.com/redis/go-redis/v9 v9.4.0
12-
go.opentelemetry.io/otel v1.16.0
13-
go.opentelemetry.io/otel/metric v1.16.0
12+
go.opentelemetry.io/otel v1.22.0
13+
go.opentelemetry.io/otel/metric v1.22.0
1414
go.opentelemetry.io/otel/sdk v1.16.0
15-
go.opentelemetry.io/otel/trace v1.16.0
15+
go.opentelemetry.io/otel/trace v1.22.0
1616
)
1717

1818
require (
1919
github.com/cespare/xxhash/v2 v2.2.0 // indirect
2020
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
21-
github.com/go-logr/logr v1.2.4 // indirect
21+
github.com/go-logr/logr v1.4.1 // indirect
2222
github.com/go-logr/stdr v1.2.2 // indirect
2323
golang.org/x/sys v0.8.0 // indirect
2424
)

extra/redisotel/go.sum

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
1-
github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao=
2-
github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w=
3-
github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y=
4-
github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
1+
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
2+
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
3+
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
4+
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
55
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
66
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
77
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
88
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
99
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
1010
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
11-
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
12-
github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
11+
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
12+
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
1313
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
1414
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
15-
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
15+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
1616
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
17-
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
18-
go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s=
19-
go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4=
20-
go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo=
21-
go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4=
17+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
18+
go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y=
19+
go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI=
20+
go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg=
21+
go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY=
2222
go.opentelemetry.io/otel/sdk v1.16.0 h1:Z1Ok1YsijYL0CSJpHt4cS3wDDh7p572grzNrBMiMWgE=
2323
go.opentelemetry.io/otel/sdk v1.16.0/go.mod h1:tMsIuKXuuIWPBAOrH+eHtvhTL+SntFtXF9QD68aP6p4=
24-
go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs=
25-
go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0=
24+
go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0=
25+
go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo=
2626
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
2727
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
2828
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

extra/redisotel/tracing.go

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ import (
55
"fmt"
66
"net"
77
"runtime"
8+
"strconv"
89
"strings"
910

1011
"go.opentelemetry.io/otel/attribute"
1112
"go.opentelemetry.io/otel/codes"
12-
semconv "go.opentelemetry.io/otel/semconv/v1.10.0"
13+
semconv "go.opentelemetry.io/otel/semconv/v1.24.0"
1314
"go.opentelemetry.io/otel/trace"
1415

1516
"github.com/redis/go-redis/extra/rediscmd/v9"
@@ -25,13 +26,15 @@ func InstrumentTracing(rdb redis.UniversalClient, opts ...TracingOption) error {
2526
case *redis.Client:
2627
opt := rdb.Options()
2728
connString := formatDBConnString(opt.Network, opt.Addr)
29+
opts = addServerAttributes(opts, opt.Addr)
2830
rdb.AddHook(newTracingHook(connString, opts...))
2931
return nil
3032
case *redis.ClusterClient:
3133
rdb.AddHook(newTracingHook("", opts...))
3234

3335
rdb.OnNewNode(func(rdb *redis.Client) {
3436
opt := rdb.Options()
37+
opts = addServerAttributes(opts, opt.Addr)
3538
connString := formatDBConnString(opt.Network, opt.Addr)
3639
rdb.AddHook(newTracingHook(connString, opts...))
3740
})
@@ -41,6 +44,7 @@ func InstrumentTracing(rdb redis.UniversalClient, opts ...TracingOption) error {
4144

4245
rdb.OnNewNode(func(rdb *redis.Client) {
4346
opt := rdb.Options()
47+
opts = addServerAttributes(opts, opt.Addr)
4448
connString := formatDBConnString(opt.Network, opt.Addr)
4549
rdb.AddHook(newTracingHook(connString, opts...))
4650
})
@@ -72,7 +76,7 @@ func newTracingHook(connString string, opts ...TracingOption) *tracingHook {
7276
)
7377
}
7478
if connString != "" {
75-
conf.attrs = append(conf.attrs, semconv.DBConnectionStringKey.String(connString))
79+
conf.attrs = append(conf.attrs, semconv.DBConnectionString(connString))
7680
}
7781

7882
return &tracingHook{
@@ -113,14 +117,14 @@ func (th *tracingHook) ProcessHook(hook redis.ProcessHook) redis.ProcessHook {
113117

114118
attrs := make([]attribute.KeyValue, 0, 8)
115119
attrs = append(attrs,
116-
semconv.CodeFunctionKey.String(fn),
117-
semconv.CodeFilepathKey.String(file),
118-
semconv.CodeLineNumberKey.Int(line),
120+
semconv.CodeFunction(fn),
121+
semconv.CodeFilepath(file),
122+
semconv.CodeLineNumber(line),
119123
)
120124

121125
if th.conf.dbStmtEnabled {
122126
cmdString := rediscmd.CmdString(cmd)
123-
attrs = append(attrs, semconv.DBStatementKey.String(cmdString))
127+
attrs = append(attrs, semconv.DBStatement(cmdString))
124128
}
125129

126130
opts := th.spanOpts
@@ -149,15 +153,15 @@ func (th *tracingHook) ProcessPipelineHook(
149153

150154
attrs := make([]attribute.KeyValue, 0, 8)
151155
attrs = append(attrs,
152-
semconv.CodeFunctionKey.String(fn),
153-
semconv.CodeFilepathKey.String(file),
154-
semconv.CodeLineNumberKey.Int(line),
156+
semconv.CodeFunction(fn),
157+
semconv.CodeFilepath(file),
158+
semconv.CodeLineNumber(line),
155159
attribute.Int("db.redis.num_cmd", len(cmds)),
156160
)
157161

158162
summary, cmdsString := rediscmd.CmdsString(cmds)
159163
if th.conf.dbStmtEnabled {
160-
attrs = append(attrs, semconv.DBStatementKey.String(cmdsString))
164+
attrs = append(attrs, semconv.DBStatement(cmdsString))
161165
}
162166

163167
opts := th.spanOpts
@@ -213,3 +217,28 @@ func funcFileLine(pkg string) (string, string, int) {
213217

214218
return fn, file, line
215219
}
220+
221+
// Database span attributes semantic conventions recommended server address and port
222+
// https://opentelemetry.io/docs/specs/semconv/database/database-spans/#connection-level-attributes
223+
func addServerAttributes(opts []TracingOption, addr string) []TracingOption {
224+
host, portString, err := net.SplitHostPort(addr)
225+
if err != nil {
226+
return opts
227+
}
228+
229+
opts = append(opts, WithAttributes(
230+
semconv.ServerAddress(host),
231+
))
232+
233+
// Parse the port string to an integer
234+
port, err := strconv.Atoi(portString)
235+
if err != nil {
236+
return opts
237+
}
238+
239+
opts = append(opts, WithAttributes(
240+
semconv.ServerPort(port),
241+
))
242+
243+
return opts
244+
}

0 commit comments

Comments
 (0)