Skip to content

Commit

Permalink
all: replace telemetry with newtelemetry (cherry-pick v2) (#3214)
Browse files Browse the repository at this point in the history
Signed-off-by: Eliott Bouhana <[email protected]>
  • Loading branch information
eliottness authored Feb 21, 2025
1 parent 0ae5db7 commit 44ede56
Show file tree
Hide file tree
Showing 93 changed files with 2,264 additions and 4,375 deletions.
9 changes: 4 additions & 5 deletions ddtrace/opentelemetry/telemetry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,16 +73,15 @@ func TestTelemetry(t *testing.T) {
for k, v := range test.env {
t.Setenv(k, v)
}
telemetryClient := new(telemetrytest.MockClient)
defer telemetry.MockGlobalClient(telemetryClient)()
telemetryClient := new(telemetrytest.RecordClient)
defer telemetry.MockClient(telemetryClient)()

p := NewTracerProvider()
p.Tracer("")
defer p.Shutdown()

assert.True(t, telemetryClient.Started)
telemetry.Check(t, telemetryClient.Configuration, "trace_propagation_style_inject", test.expectedInject)
telemetry.Check(t, telemetryClient.Configuration, "trace_propagation_style_extract", test.expectedExtract)
assert.Contains(t, telemetryClient.Configuration, telemetry.Configuration{Name: "trace_propagation_style_inject", Value: test.expectedInject})
assert.Contains(t, telemetryClient.Configuration, telemetry.Configuration{Name: "trace_propagation_style_extract", Value: test.expectedExtract})
})
}

Expand Down
2 changes: 1 addition & 1 deletion ddtrace/opentelemetry/tracer.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func (t *oteltracer) Start(ctx context.Context, spanName string, opts ...oteltra
if k := ssConfig.SpanKind(); k != 0 {
ddopts = append(ddopts, tracer.Tag(ext.SpanKind, k.String()))
}
telemetry.GlobalClient.Count(telemetry.NamespaceTracers, "spans_created", 1.0, telemetryTags, true)
telemetry.Count(telemetry.NamespaceTracers, "spans_created", telemetryTags).Submit(1.0)
var cfg tracer.StartSpanConfig
cfg.Tags = make(map[string]interface{})
if opts, ok := spanOptionsFromContext(ctx); ok {
Expand Down
7 changes: 3 additions & 4 deletions ddtrace/opentelemetry/tracer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,14 +191,13 @@ func TestShutdownOnce(t *testing.T) {
}

func TestSpanTelemetry(t *testing.T) {
telemetryClient := new(telemetrytest.MockClient)
defer telemetry.MockGlobalClient(telemetryClient)()
telemetryClient := new(telemetrytest.RecordClient)
defer telemetry.MockClient(telemetryClient)()
tp := NewTracerProvider()
otel.SetTracerProvider(tp)
tr := otel.Tracer("")
_, _ = tr.Start(context.Background(), "otel.span")
telemetryClient.AssertCalled(t, "Count", telemetry.NamespaceTracers, "spans_created", 1.0, telemetryTags, true)
telemetryClient.AssertNumberOfCalls(t, "Count", 1)
assert.NotZero(t, telemetryClient.Count(telemetry.NamespaceTracers, "spans_created", telemetryTags).Get())
}

func TestConcurrentSetAttributes(_ *testing.T) {
Expand Down
15 changes: 8 additions & 7 deletions ddtrace/tracer/dynamic_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,12 @@ type dynamicConfig[T any] struct {

func newDynamicConfig[T any](name string, val T, apply func(T) bool, equal func(x, y T) bool) dynamicConfig[T] {
return dynamicConfig[T]{
cfgName: name,
current: val,
startup: val,
apply: apply,
equal: equal,
cfgName: name,
current: val,
startup: val,
cfgOrigin: telemetry.OriginDefault,
apply: apply,
equal: equal,
}
}

Expand Down Expand Up @@ -79,11 +80,11 @@ func (dc *dynamicConfig[T]) handleRC(val *T) bool {
func (dc *dynamicConfig[T]) toTelemetry() telemetry.Configuration {
dc.RLock()
defer dc.RUnlock()
return telemetry.Sanitize(telemetry.Configuration{
return telemetry.Configuration{
Name: dc.cfgName,
Value: dc.current,
Origin: dc.cfgOrigin,
})
}
}

func equal[T comparable](x, y T) bool {
Expand Down
2 changes: 2 additions & 0 deletions ddtrace/tracer/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"github.com/DataDog/dd-trace-go/v2/internal/globalconfig"
"github.com/DataDog/dd-trace-go/v2/internal/log"
"github.com/DataDog/dd-trace-go/v2/internal/osinfo"
telemetrylog "github.com/DataDog/dd-trace-go/v2/internal/telemetry/log"
"github.com/DataDog/dd-trace-go/v2/internal/version"
)

Expand Down Expand Up @@ -174,4 +175,5 @@ func logStartup(t *tracer) {
return
}
log.Info("DATADOG TRACER CONFIGURATION %s\n", string(bs))
telemetrylog.Debug("DATADOG TRACER CONFIGURATION %s\n", string(bs))
}
29 changes: 14 additions & 15 deletions ddtrace/tracer/log_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import (

"github.com/DataDog/dd-trace-go/v2/internal/globalconfig"
"github.com/DataDog/dd-trace-go/v2/internal/log"
"github.com/DataDog/dd-trace-go/v2/internal/telemetry"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
Expand All @@ -30,7 +29,7 @@ func TestStartupLog(t *testing.T) {
defer stop()

tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
require.Len(t, tp.Logs(), 2)
assert.Regexp(logPrefixRegexp+` INFO: DATADOG TRACER CONFIGURATION {"date":"[^"]*","os_name":"[^"]*","os_version":"[^"]*","version":"[^"]*","lang":"Go","lang_version":"[^"]*","env":"","service":"tracer\.test(\.exe)?","agent_url":"http://localhost:9/v0.4/traces","agent_error":"Post .*","debug":false,"analytics_enabled":false,"sample_rate":"NaN","sample_rate_limit":"disabled","trace_sampling_rules":null,"span_sampling_rules":null,"sampling_rules_error":"","service_mappings":null,"tags":{"runtime-id":"[^"]*"},"runtime_metrics_enabled":false,"runtime_metrics_v2_enabled":false,"profiler_code_hotspots_enabled":((false)|(true)),"profiler_endpoints_enabled":((false)|(true)),"dd_version":"","architecture":"[^"]*","global_service":"","lambda_mode":"false","appsec":((true)|(false)),"agent_features":{"DropP0s":((true)|(false)),"Stats":((true)|(false)),"StatsdPort":(0|8125)},"integrations":{.*},"partial_flush_enabled":false,"partial_flush_min_spans":1000,"orchestrion":{"enabled":false},"feature_flags":\[\],"propagation_style_inject":"datadog,tracecontext,baggage","propagation_style_extract":"datadog,tracecontext,baggage","tracing_as_transport":false,"dogstatsd_address":"localhost:8125"}`, tp.Logs()[1])
Expand Down Expand Up @@ -63,7 +62,7 @@ func TestStartupLog(t *testing.T) {
defer stop()

tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
require.Len(t, tp.Logs(), 2)
assert.Regexp(logPrefixRegexp+` INFO: DATADOG TRACER CONFIGURATION {"date":"[^"]*","os_name":"[^"]*","os_version":"[^"]*","version":"[^"]*","lang":"Go","lang_version":"[^"]*","env":"configuredEnv","service":"configured.service","agent_url":"http://localhost:9/v0.4/traces","agent_error":"Post .*","debug":true,"analytics_enabled":true,"sample_rate":"0\.123000","sample_rate_limit":"100","trace_sampling_rules":\[{"service":"mysql","sample_rate":0\.75}\],"span_sampling_rules":null,"sampling_rules_error":"","service_mappings":{"initial_service":"new_service"},"tags":{"runtime-id":"[^"]*","tag":"value","tag2":"NaN"},"runtime_metrics_enabled":true,"runtime_metrics_v2_enabled":false,"profiler_code_hotspots_enabled":((false)|(true)),"profiler_endpoints_enabled":((false)|(true)),"dd_version":"2.3.4","architecture":"[^"]*","global_service":"configured.service","lambda_mode":"false","appsec":((true)|(false)),"agent_features":{"DropP0s":false,"Stats":false,"StatsdPort":(0|8125)},"integrations":{.*},"partial_flush_enabled":false,"partial_flush_min_spans":1000,"orchestrion":{"enabled":true,"metadata":{"version":"v1"}},"feature_flags":\["discovery"\],"propagation_style_inject":"datadog,tracecontext,baggage","propagation_style_extract":"datadog,tracecontext,baggage","tracing_as_transport":false,"dogstatsd_address":"localhost:8125"}`, tp.Logs()[1])
Expand Down Expand Up @@ -94,7 +93,7 @@ func TestStartupLog(t *testing.T) {
defer stop()

tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
require.Len(t, tp.Logs(), 2)
assert.Regexp(logPrefixRegexp+` INFO: DATADOG TRACER CONFIGURATION {"date":"[^"]*","os_name":"[^"]*","os_version":"[^"]*","version":"[^"]*","lang":"Go","lang_version":"[^"]*","env":"configuredEnv","service":"configured.service","agent_url":"http://localhost:9/v0.4/traces","agent_error":"Post .*","debug":true,"analytics_enabled":true,"sample_rate":"0\.123000","sample_rate_limit":"1000.001","trace_sampling_rules":\[{"service":"mysql","sample_rate":0\.75}\],"span_sampling_rules":null,"sampling_rules_error":"","service_mappings":{"initial_service":"new_service"},"tags":{"runtime-id":"[^"]*","tag":"value","tag2":"NaN"},"runtime_metrics_enabled":true,"runtime_metrics_v2_enabled":false,"profiler_code_hotspots_enabled":((false)|(true)),"profiler_endpoints_enabled":((false)|(true)),"dd_version":"2.3.4","architecture":"[^"]*","global_service":"configured.service","lambda_mode":"false","appsec":((true)|(false)),"agent_features":{"DropP0s":false,"Stats":false,"StatsdPort":(0|8125)},"integrations":{.*},"partial_flush_enabled":false,"partial_flush_min_spans":1000,"orchestrion":{"enabled":false},"feature_flags":\[\],"propagation_style_inject":"datadog,tracecontext,baggage","propagation_style_extract":"datadog,tracecontext,baggage","tracing_as_transport":false,"dogstatsd_address":"localhost:8125"}`, tp.Logs()[1])
Expand All @@ -116,7 +115,7 @@ func TestStartupLog(t *testing.T) {
defer stop()

tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
assert.Len(tp.Logs(), 1)
assert.Regexp(logPrefixRegexp+` INFO: DATADOG TRACER CONFIGURATION {"date":"[^"]*","os_name":"[^"]*","os_version":"[^"]*","version":"[^"]*","lang":"Go","lang_version":"[^"]*","env":"","service":"tracer\.test(\.exe)?","agent_url":"http://localhost:9/v0.4/traces","agent_error":"","debug":false,"analytics_enabled":false,"sample_rate":"NaN","sample_rate_limit":"disabled","trace_sampling_rules":null,"span_sampling_rules":null,"sampling_rules_error":"","service_mappings":null,"tags":{"runtime-id":"[^"]*"},"runtime_metrics_enabled":false,"runtime_metrics_v2_enabled":false,"profiler_code_hotspots_enabled":((false)|(true)),"profiler_endpoints_enabled":((false)|(true)),"dd_version":"","architecture":"[^"]*","global_service":"","lambda_mode":"true","appsec":((true)|(false)),"agent_features":{"DropP0s":false,"Stats":false,"StatsdPort":(0|8125)},"integrations":{.*},"partial_flush_enabled":false,"partial_flush_min_spans":1000,"orchestrion":{"enabled":false},"feature_flags":\[\],"propagation_style_inject":"datadog,tracecontext,baggage","propagation_style_extract":"datadog,tracecontext,baggage","tracing_as_transport":false,"dogstatsd_address":"localhost:8125"}`, tp.Logs()[0])
Expand All @@ -129,7 +128,7 @@ func TestStartupLog(t *testing.T) {
require.NoError(t, err)
defer stop()
tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
require.Len(t, tp.Logs(), 2)

Expand All @@ -143,7 +142,7 @@ func TestStartupLog(t *testing.T) {
func TestLogSamplingRules(t *testing.T) {
assert := assert.New(t)
tp := new(log.RecordLogger)
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
t.Setenv("DD_TRACE_SAMPLING_RULES", `[{"service": "some.service", "sample_rate": 0.234}, {"service": "other.service"}, {"service": "last.service", "sample_rate": 0.56}, {"odd": "pairs"}, {"sample_rate": 9.10}]`)
_, _, _, _, err := startTestTracer(t, WithLogger(tp), WithEnv("test"))
assert.Error(err)
Expand All @@ -155,7 +154,7 @@ func TestLogSamplingRules(t *testing.T) {
func TestLogDefaultSampleRate(t *testing.T) {
assert := assert.New(t)
tp := new(log.RecordLogger)
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
log.UseLogger(tp)
t.Setenv("DD_TRACE_SAMPLE_RATE", ``)
_, _, _, stop, err := startTestTracer(t, WithLogger(tp), WithEnv("test"))
Expand All @@ -172,7 +171,7 @@ func TestLogAgentReachable(t *testing.T) {
require.NoError(t, err)
defer stop()
tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
require.Len(t, tp.Logs(), 2)
assert.Regexp(logPrefixRegexp+` WARN: DIAGNOSTICS Unable to reach agent intake: Post`, tp.Logs()[0])
Expand All @@ -186,7 +185,7 @@ func TestLogFormat(t *testing.T) {
require.NoError(t, err)
defer stop()
tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
tracer.StartSpan("test", ServiceName("test-service"), ResourceName("/"), WithSpanID(12345))
assert.Len(tp.Logs(), 1)
assert.Regexp(logPrefixRegexp+` DEBUG: Started Span: dd.trace_id="12345" dd.span_id="12345" dd.parent_id="0", Operation: test, Resource: /, Tags: map.*, map.*`, tp.Logs()[0])
Expand Down Expand Up @@ -260,7 +259,7 @@ func setup(t *testing.T, customProp Propagator) string {
}
defer stop()
tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
require.Len(t, tp.Logs(), 2)
return tp.Logs()[1]
Expand All @@ -282,7 +281,7 @@ func TestAgentURL(t *testing.T) {
assert.Nil(err)
defer tracer.Stop()
tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
logEntry, found := findLogEntry(tp.Logs(), `"agent_url":"unix://var/run/datadog/apm.socket"`)
if !found {
Expand All @@ -299,7 +298,7 @@ func TestAgentURLFromEnv(t *testing.T) {
assert.Nil(err)
defer tracer.Stop()
tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
logEntry, found := findLogEntry(tp.Logs(), `"agent_url":"unix://var/run/datadog/apm.socket"`)
if !found {
Expand All @@ -317,7 +316,7 @@ func TestInvalidAgentURL(t *testing.T) {
assert.Nil(err)
defer tracer.Stop()
tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
logEntry, found := findLogEntry(tp.Logs(), `"agent_url":"http://localhost:8126/v0.4/traces"`)
if !found {
Expand All @@ -335,7 +334,7 @@ func TestAgentURLConflict(t *testing.T) {
assert.Nil(err)
defer tracer.Stop()
tp.Reset()
tp.Ignore("appsec: ", telemetry.LogPrefix)
tp.Ignore("appsec: ", "telemetry")
logStartup(tracer)
logEntry, found := findLogEntry(tp.Logs(), `"agent_url":"http://localhost:8126/v0.4/traces"`)
if !found {
Expand Down
4 changes: 2 additions & 2 deletions ddtrace/tracer/otel_dd_mappings.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,13 @@ func getDDorOtelConfig(configName string) string {
if val != "" {
log.Warn("Both %v and %v are set, using %v=%v", config.ot, config.dd, config.dd, val)
telemetryTags := []string{ddPrefix + strings.ToLower(config.dd), otelPrefix + strings.ToLower(config.ot)}
telemetry.GlobalClient.Count(telemetry.NamespaceTracers, "otel.env.hiding", 1.0, telemetryTags, true)
telemetry.Count(telemetry.NamespaceTracers, "otel.env.hiding", telemetryTags).Submit(1)
} else {
v, err := config.remapper(otVal)
if err != nil {
log.Warn("%v", err)
telemetryTags := []string{ddPrefix + strings.ToLower(config.dd), otelPrefix + strings.ToLower(config.ot)}
telemetry.GlobalClient.Count(telemetry.NamespaceTracers, "otel.env.invalid", 1.0, telemetryTags, true)
telemetry.Count(telemetry.NamespaceTracers, "otel.env.invalid", telemetryTags).Submit(1)
}
val = v
}
Expand Down
12 changes: 6 additions & 6 deletions ddtrace/tracer/otel_dd_mappings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,21 @@ func TestAssessSource(t *testing.T) {
assert.Equal(t, "abc", v)
})
t.Run("both", func(t *testing.T) {
telemetryClient := new(telemetrytest.MockClient)
defer telemetry.MockGlobalClient(telemetryClient)()
telemetryClient := new(telemetrytest.RecordClient)
defer telemetry.MockClient(telemetryClient)()
// DD_SERVICE prevails
t.Setenv("DD_SERVICE", "abc")
t.Setenv("OTEL_SERVICE_NAME", "123")
v := getDDorOtelConfig("service")
assert.Equal(t, "abc", v)
telemetryClient.AssertCalled(t, "Count", telemetry.NamespaceTracers, "otel.env.hiding", 1.0, []string{"config_datadog:dd_service", "config_opentelemetry:otel_service_name"}, true)
assert.NotZero(t, telemetryClient.Count(telemetry.NamespaceTracers, "otel.env.hiding", []string{"config_datadog:dd_service", "config_opentelemetry:otel_service_name"}).Get())
})
t.Run("invalid-ot", func(t *testing.T) {
telemetryClient := new(telemetrytest.MockClient)
defer telemetry.MockGlobalClient(telemetryClient)()
telemetryClient := new(telemetrytest.RecordClient)
defer telemetry.MockClient(telemetryClient)()
t.Setenv("OTEL_LOG_LEVEL", "nonesense")
v := getDDorOtelConfig("debugMode")
assert.Equal(t, "", v)
telemetryClient.AssertCalled(t, "Count", telemetry.NamespaceTracers, "otel.env.invalid", 1.0, []string{"config_datadog:dd_trace_debug", "config_opentelemetry:otel_log_level"}, true)
assert.NotZero(t, telemetryClient.Count(telemetry.NamespaceTracers, "otel.env.invalid", []string{"config_datadog:dd_trace_debug", "config_opentelemetry:otel_log_level"}).Get())
})
}
4 changes: 2 additions & 2 deletions ddtrace/tracer/remote_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ func (t *tracer) onRemoteConfigUpdate(u remoteconfig.ProductUpdate) map[string]s
}
if len(telemConfigs) > 0 {
log.Debug("Reporting %d configuration changes to telemetry", len(telemConfigs))
telemetry.GlobalClient.ConfigChange(telemConfigs)
telemetry.RegisterAppConfigs(telemConfigs...)
}
return statuses
}
Expand Down Expand Up @@ -244,7 +244,7 @@ func (t *tracer) onRemoteConfigUpdate(u remoteconfig.ProductUpdate) map[string]s
}
if len(telemConfigs) > 0 {
log.Debug("Reporting %d configuration changes to telemetry", len(telemConfigs))
telemetry.GlobalClient.ConfigChange(telemConfigs)
telemetry.RegisterAppConfigs(telemConfigs...)
}
return statuses
}
Expand Down
Loading

0 comments on commit 44ede56

Please sign in to comment.