Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support valkey-go tracing #3081

Merged
merged 29 commits into from
Jan 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
6aa8d69
Support valkey-go tracing
keisku Jan 12, 2025
fe59e6d
as per DD_APM_PEER_TAGS_AGGREGATION in agent
keisku Jan 16, 2025
26c6621
Merge branch 'main' into keisku/valkey-go-support
darccio Jan 17, 2025
9479b69
Merge remote-tracking branch 'origin' into keisku/valkey-go-support
keisku Jan 18, 2025
49ebeed
update example as per best practice
keisku Jan 18, 2025
90f6c43
fix doc
keisku Jan 18, 2025
46cacc3
fix spanName
keisku Jan 18, 2025
6d5b6f6
update contribIntegrations
keisku Jan 18, 2025
e99f4d7
rename to github.com/valkey-io/valkey-go
keisku Jan 21, 2025
4031cd7
remove App Analytics which was deprecated
keisku Jan 21, 2025
aae0a85
for consistency with the other examples
keisku Jan 21, 2025
14b4d21
remove ValkeyClientCommand* tags
keisku Jan 21, 2025
6197ac1
there is not concept of db.instance in valkey / redis
keisku Jan 21, 2025
7b7329f
remove db.type:valkey
keisku Jan 21, 2025
fca4a18
remove db.application
keisku Jan 21, 2025
e7758a3
fix valkey.raw_command behavior
keisku Jan 21, 2025
cdb4129
add db.out tag
keisku Jan 21, 2025
21434c3
typo
keisku Jan 21, 2025
27b0fec
remove valkeyotel tags
keisku Jan 23, 2025
06360d2
rename to out.db (ext.TargetDB)
keisku Jan 23, 2025
b8c5c35
remove peer.* tags
keisku Jan 23, 2025
fba84df
rework DD_TRACE_VALKEY_RAW_COMMAND behavior
keisku Jan 23, 2025
25088d1
fix error handling when a span finishes
keisku Jan 23, 2025
d9bb011
fix raw command + add missing service name option + refactor
rarguelloF Jan 27, 2025
4ab8179
Merge branch 'main' into keisku/valkey-go-support
rarguelloF Jan 27, 2025
7eeeb6c
fix: go mod tidy smoke test
keisku Jan 28, 2025
b9e6353
Merge branch 'main' into keisku/valkey-go-support
rarguelloF Jan 28, 2025
7c87d09
Merge branch 'main' into keisku/valkey-go-support
rarguelloF Jan 28, 2025
3234dc9
fix github workflows file
rarguelloF Jan 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/unit-integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,12 @@ jobs:
image: redis:3.2
ports:
- 6379:6379
valkey:
image: valkey/valkey:8
env:
VALKEY_EXTRA_FLAGS: "--port 6380 --requirepass password-for-default"
ports:
- 6380:6380
elasticsearch2:
image: elasticsearch:2
env:
Expand Down
4 changes: 2 additions & 2 deletions contrib/go-redis/redis.v7/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
opt := clientOptions.Options()
if opt.Addr == "FailoverClient" {
additionalTags = []ddtrace.StartSpanOption{
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
tracer.Tag(ext.RedisDatabaseIndex, opt.DB),
}
} else {
Expand All @@ -91,7 +91,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
additionalTags = []ddtrace.StartSpanOption{
tracer.Tag(ext.TargetHost, host),
tracer.Tag(ext.TargetPort, port),
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
tracer.Tag(ext.RedisDatabaseIndex, opt.DB),
}
}
Expand Down
4 changes: 2 additions & 2 deletions contrib/go-redis/redis.v8/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
opt := clientOptions.Options()
if opt.Addr == "FailoverClient" {
additionalTags = []ddtrace.StartSpanOption{
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
tracer.Tag(ext.RedisDatabaseIndex, opt.DB),
}
} else {
Expand All @@ -90,7 +90,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
additionalTags = []ddtrace.StartSpanOption{
tracer.Tag(ext.TargetHost, host),
tracer.Tag(ext.TargetPort, port),
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
tracer.Tag(ext.RedisDatabaseIndex, opt.DB),
}
}
Expand Down
4 changes: 2 additions & 2 deletions contrib/go-redis/redis/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ func (c *Pipeliner) execWithContext(ctx context.Context) ([]redis.Cmder, error)
tracer.ResourceName("redis"),
tracer.Tag(ext.TargetHost, p.host),
tracer.Tag(ext.TargetPort, p.port),
tracer.Tag("out.db", strconv.Itoa(p.db)),
tracer.Tag(ext.TargetDB, strconv.Itoa(p.db)),
tracer.Tag(ext.Component, componentName),
tracer.Tag(ext.SpanKind, ext.SpanKindClient),
tracer.Tag(ext.DBSystem, ext.DBSystemRedis),
Expand Down Expand Up @@ -202,7 +202,7 @@ func createWrapperFromClient(tc *Client) func(oldProcess func(cmd redis.Cmder) e
tracer.ResourceName(parts[0]),
tracer.Tag(ext.TargetHost, p.host),
tracer.Tag(ext.TargetPort, p.port),
tracer.Tag("out.db", strconv.Itoa(p.db)),
tracer.Tag(ext.TargetDB, strconv.Itoa(p.db)),
tracer.Tag("redis.raw_command", raw),
tracer.Tag("redis.args_length", strconv.Itoa(length)),
tracer.Tag(ext.Component, componentName),
Expand Down
4 changes: 2 additions & 2 deletions contrib/redis/go-redis.v9/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
opt := clientOptions.Options()
if opt.Addr == "FailoverClient" {
additionalTags = []ddtrace.StartSpanOption{
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
}
} else {
host, port, err := net.SplitHostPort(opt.Addr)
Expand All @@ -89,7 +89,7 @@ func additionalTagOptions(client redis.UniversalClient) []ddtrace.StartSpanOptio
additionalTags = []ddtrace.StartSpanOption{
tracer.Tag(ext.TargetHost, host),
tracer.Tag(ext.TargetPort, port),
tracer.Tag("out.db", strconv.Itoa(opt.DB)),
tracer.Tag(ext.TargetDB, strconv.Itoa(opt.DB)),
}
}
} else if clientOptions, ok := client.(clusterOptions); ok {
Expand Down
35 changes: 35 additions & 0 deletions contrib/valkey-go/example_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Unless explicitly stated otherwise all files in this repository are licensed
// under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2016 Datadog, Inc.

package valkey_test

import (
"context"
"log"

"github.com/valkey-io/valkey-go"
valkeytrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/valkey-go"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)

// To start tracing Valkey, simply create a new client using the library and continue
// using as you normally would.
func Example() {
tracer.Start()
defer tracer.Stop()

vk, err := valkeytrace.NewClient(valkey.ClientOption{
InitAddress: []string{"localhost:6379"},
})
if err != nil {
log.Fatal(err)
return
}

if err := vk.Do(context.Background(), vk.B().Set().Key("key").Value("value").Build()).Error(); err != nil {
log.Fatal(err)
return
}
}
42 changes: 42 additions & 0 deletions contrib/valkey-go/option.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Unless explicitly stated otherwise all files in this repository are licensed
// under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2016 Datadog, Inc.

package valkey

import (
"gopkg.in/DataDog/dd-trace-go.v1/internal"
"gopkg.in/DataDog/dd-trace-go.v1/internal/namingschema"
)

type config struct {
rawCommand bool
serviceName string
}

// Option represents an option that can be used to create or wrap a client.
type Option func(*config)

func defaultConfig() *config {
return &config{
// Do not include the raw command by default since it could contain sensitive data.
rawCommand: internal.BoolEnv("DD_TRACE_VALKEY_RAW_COMMAND", false),
serviceName: namingschema.ServiceName(defaultServiceName),
}
}

// WithRawCommand can be used to set a tag `valkey.raw_command` in the created spans (disabled by default).
// Warning: please note the datadog-agent currently does not support obfuscation for this tag, so use this at your own risk.
func WithRawCommand(rawCommand bool) Option {
return func(cfg *config) {
cfg.rawCommand = rawCommand
}
}

// WithServiceName sets the given service name for the client.
func WithServiceName(name string) Option {
return func(cfg *config) {
cfg.serviceName = name
}
}
Loading
Loading