Skip to content

Commit f0ed584

Browse files
keiskudarcciorarguelloF
authored
Support valkey-go tracing (#3081)
Signed-off-by: keisku <[email protected]> Co-authored-by: Dario Castañé <[email protected]> Co-authored-by: Rodrigo Arguello <[email protected]>
1 parent dde97eb commit f0ed584

File tree

20 files changed

+725
-21
lines changed

20 files changed

+725
-21
lines changed

.github/workflows/unit-integration-tests.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,12 @@ jobs:
144144
image: redis:3.2
145145
ports:
146146
- 6379:6379
147+
valkey:
148+
image: valkey/valkey:8
149+
env:
150+
VALKEY_EXTRA_FLAGS: "--port 6380 --requirepass password-for-default"
151+
ports:
152+
- 6380:6380
147153
elasticsearch2:
148154
image: elasticsearch:2
149155
env:

contrib/go-redis/redis.v7/redis.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
7979
opt := clientOptions.Options()
8080
if opt.Addr == "FailoverClient" {
8181
additionalTags = []ddtrace.StartSpanOption{
82-
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
82+
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
8383
tracer.Tag(ext.RedisDatabaseIndex, opt.DB),
8484
}
8585
} else {
@@ -91,7 +91,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
9191
additionalTags = []ddtrace.StartSpanOption{
9292
tracer.Tag(ext.TargetHost, host),
9393
tracer.Tag(ext.TargetPort, port),
94-
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
94+
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
9595
tracer.Tag(ext.RedisDatabaseIndex, opt.DB),
9696
}
9797
}

contrib/go-redis/redis.v8/redis.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
7878
opt := clientOptions.Options()
7979
if opt.Addr == "FailoverClient" {
8080
additionalTags = []ddtrace.StartSpanOption{
81-
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
81+
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
8282
tracer.Tag(ext.RedisDatabaseIndex, opt.DB),
8383
}
8484
} else {
@@ -90,7 +90,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
9090
additionalTags = []ddtrace.StartSpanOption{
9191
tracer.Tag(ext.TargetHost, host),
9292
tracer.Tag(ext.TargetPort, port),
93-
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
93+
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
9494
tracer.Tag(ext.RedisDatabaseIndex, opt.DB),
9595
}
9696
}

contrib/go-redis/redis/redis.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func (c *Pipeliner) execWithContext(ctx context.Context) ([]redis.Cmder, error)
130130
tracer.ResourceName("redis"),
131131
tracer.Tag(ext.TargetHost, p.host),
132132
tracer.Tag(ext.TargetPort, p.port),
133-
tracer.Tag("out.db", strconv.Itoa(p.db)),
133+
tracer.Tag(ext.TargetDB, strconv.Itoa(p.db)),
134134
tracer.Tag(ext.Component, componentName),
135135
tracer.Tag(ext.SpanKind, ext.SpanKindClient),
136136
tracer.Tag(ext.DBSystem, ext.DBSystemRedis),
@@ -202,7 +202,7 @@ func createWrapperFromClient(tc *Client) func(oldProcess func(cmd redis.Cmder) e
202202
tracer.ResourceName(parts[0]),
203203
tracer.Tag(ext.TargetHost, p.host),
204204
tracer.Tag(ext.TargetPort, p.port),
205-
tracer.Tag("out.db", strconv.Itoa(p.db)),
205+
tracer.Tag(ext.TargetDB, strconv.Itoa(p.db)),
206206
tracer.Tag("redis.raw_command", raw),
207207
tracer.Tag("redis.args_length", strconv.Itoa(length)),
208208
tracer.Tag(ext.Component, componentName),

contrib/redis/go-redis.v9/redis.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
7878
opt := clientOptions.Options()
7979
if opt.Addr == "FailoverClient" {
8080
additionalTags = []ddtrace.StartSpanOption{
81-
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
81+
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
8282
}
8383
} else {
8484
host, port, err := net.SplitHostPort(opt.Addr)
@@ -89,7 +89,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
8989
additionalTags = []ddtrace.StartSpanOption{
9090
tracer.Tag(ext.TargetHost, host),
9191
tracer.Tag(ext.TargetPort, port),
92-
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
92+
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
9393
}
9494
}
9595
} else if clientOptions, ok := client.(clusterOptions); ok {

contrib/valkey-go/example_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Unless explicitly stated otherwise all files in this repository are licensed
2+
// under the Apache License Version 2.0.
3+
// This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
// Copyright 2016 Datadog, Inc.
5+
6+
package valkey_test
7+
8+
import (
9+
"context"
10+
"log"
11+
12+
"github.com/valkey-io/valkey-go"
13+
valkeytrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/valkey-go"
14+
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
15+
)
16+
17+
// To start tracing Valkey, simply create a new client using the library and continue
18+
// using as you normally would.
19+
func Example() {
20+
tracer.Start()
21+
defer tracer.Stop()
22+
23+
vk, err := valkeytrace.NewClient(valkey.ClientOption{
24+
InitAddress: []string{"localhost:6379"},
25+
})
26+
if err != nil {
27+
log.Fatal(err)
28+
return
29+
}
30+
31+
if err := vk.Do(context.Background(), vk.B().Set().Key("key").Value("value").Build()).Error(); err != nil {
32+
log.Fatal(err)
33+
return
34+
}
35+
}

contrib/valkey-go/option.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Unless explicitly stated otherwise all files in this repository are licensed
2+
// under the Apache License Version 2.0.
3+
// This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
// Copyright 2016 Datadog, Inc.
5+
6+
package valkey
7+
8+
import (
9+
"gopkg.in/DataDog/dd-trace-go.v1/internal"
10+
"gopkg.in/DataDog/dd-trace-go.v1/internal/namingschema"
11+
)
12+
13+
type config struct {
14+
rawCommand bool
15+
serviceName string
16+
}
17+
18+
// Option represents an option that can be used to create or wrap a client.
19+
type Option func(*config)
20+
21+
func defaultConfig() *config {
22+
return &config{
23+
// Do not include the raw command by default since it could contain sensitive data.
24+
rawCommand: internal.BoolEnv("DD_TRACE_VALKEY_RAW_COMMAND", false),
25+
serviceName: namingschema.ServiceName(defaultServiceName),
26+
}
27+
}
28+
29+
// WithRawCommand can be used to set a tag `valkey.raw_command` in the created spans (disabled by default).
30+
// Warning: please note the datadog-agent currently does not support obfuscation for this tag, so use this at your own risk.
31+
func WithRawCommand(rawCommand bool) Option {
32+
return func(cfg *config) {
33+
cfg.rawCommand = rawCommand
34+
}
35+
}
36+
37+
// WithServiceName sets the given service name for the client.
38+
func WithServiceName(name string) Option {
39+
return func(cfg *config) {
40+
cfg.serviceName = name
41+
}
42+
}

0 commit comments

Comments
 (0)