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

ddtrace/tracer: adding support for single span matching #1357

Merged
merged 35 commits into from
Aug 2, 2022
Merged
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
7044c89
pkg/tracer: added glob matcher for span sampling
dianashevchenko Jun 27, 2022
d8fa045
pkg/tracer: added single span sampling rules & updated the matcher
dianashevchenko Jun 27, 2022
1f9b759
pkg/tracer: added single span sampler
dianashevchenko Jun 29, 2022
d056ab1
pkg/tracer: added single span sampling at trace finish
dianashevchenko Jun 29, 2022
bd20964
pkg/tracer: filter out single spans to send to the agent if the decis…
dianashevchenko Jun 29, 2022
408f38d
updated according to comments
dianashevchenko Jun 30, 2022
f3de96c
removed outdated test
dianashevchenko Jun 30, 2022
a975fde
refactored according to comments Moved traceSampler and singleSpanSam…
dianashevchenko Jul 5, 2022
c465cae
fixed a test - wrong sampler method called
dianashevchenko Jul 5, 2022
db105b7
reworded log message
dianashevchenko Jul 5, 2022
95ee83b
Merge branch 'main' into shevchenko/single-span-ingestion
dianashevchenko Jul 5, 2022
92506eb
removed outdated constant in a test
dianashevchenko Jul 5, 2022
9939059
updated according to comments
dianashevchenko Jul 6, 2022
f554cda
added type field to marshalling sampling rules
dianashevchenko Jul 6, 2022
d7c149a
fixed comments, error formatting, added glob matcher benchmark
dianashevchenko Jul 7, 2022
4ab5b8c
added test for a rule marshalling, simple benchmark for single span r…
dianashevchenko Jul 8, 2022
11394fe
removed the top_level tag, added another glob match example
dianashevchenko Jul 13, 2022
b595aca
refactored according to comments
dianashevchenko Jul 19, 2022
8a134c5
Merge branch 'main' into shevchenko/single-span-ingestion
dianashevchenko Jul 19, 2022
b4d8d68
Merge branch 'main' into shevchenko/single-span-ingestion
dianashevchenko Jul 19, 2022
1348caa
updated according to comments
dianashevchenko Jul 19, 2022
4ce0635
moved single span sampling to the worker part
dianashevchenko Jul 20, 2022
9f73819
Merge branch 'shevchenko/single-span-ingestion' of https://github.com…
dianashevchenko Jul 20, 2022
f33308b
added docs to sampling rule struct
dianashevchenko Jul 20, 2022
e4e6f3c
added `partial` tag to dropped_p0_traces metric
dianashevchenko Jul 21, 2022
fbe94ea
fixed flaky sampling test
dianashevchenko Jul 21, 2022
2a625d5
Merge branch 'main' into shevchenko/single-span-ingestion
dianashevchenko Jul 22, 2022
d295eee
updated doc comments; set sampling priority to 2; do not remove the t…
dianashevchenko Aug 1, 2022
1de6ded
Merge branch 'main' into shevchenko/single-span-ingestion
dianashevchenko Aug 1, 2022
58ff019
changed Sampling Rule marshalling for better readability
dianashevchenko Aug 1, 2022
c0d7e02
Merge branch 'shevchenko/single-span-ingestion' of https://github.com…
dianashevchenko Aug 1, 2022
46b0fe6
fixed regex
dianashevchenko Aug 1, 2022
e8d62c7
refactored according to comments
dianashevchenko Aug 2, 2022
bafbfd9
removed unnecessary time.Sleep
dianashevchenko Aug 2, 2022
6dc3bc7
Merge branch 'main' into shevchenko/single-span-ingestion
dianashevchenko Aug 2, 2022
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
7 changes: 3 additions & 4 deletions ddtrace/tracer/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ func logStartup(t *tracer) {
AgentURL: t.config.transport.endpoint(),
Debug: t.config.debug,
AnalyticsEnabled: !math.IsNaN(globalconfig.AnalyticsRate()),
SampleRate: fmt.Sprintf("%f", t.rulesSampling.globalRate),
SampleRate: fmt.Sprintf("%f", t.rulesSampling.traces.globalRate),
SampleRateLimit: "disabled",
SamplingRules: t.rulesSampling.rules,
SamplingRules: t.config.samplingRules,
ServiceMappings: t.config.serviceMappings,
Tags: tags,
RuntimeMetricsEnabled: t.config.runtimeMetrics,
Expand All @@ -109,8 +109,7 @@ func logStartup(t *tracer) {
if _, err := samplingRulesFromEnv(); err != nil {
info.SamplingRulesError = fmt.Sprintf("%s", err)
}

if limit, ok := t.rulesSampling.limit(); ok {
if limit, ok := t.rulesSampling.TraceRateLimit(); ok {
info.SampleRateLimit = fmt.Sprintf("%v", limit)
}
if !t.config.logToStdout {
Expand Down
11 changes: 5 additions & 6 deletions ddtrace/tracer/log_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ func TestStartupLog(t *testing.T) {
tp.Reset()
logStartup(tracer)
assert.Len(tp.Lines(), 2)
assert.Regexp(`Datadog Tracer v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)? 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","sampling_rules":\[{"service":"mysql","name":"","sample_rate":0\.75}\],"sampling_rules_error":"","service_mappings":{"initial_service":"new_service"},"tags":{"runtime-id":"[^"]*","tag":"value","tag2":"NaN"},"runtime_metrics_enabled":true,"health_metrics_enabled":true,"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}}`, tp.Lines()[1])
assert.Regexp(`Datadog Tracer v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)? 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","sampling_rules":\[{"service":"mysql","name":"","sample_rate":0\.75,"type":"trace\(0\)"}\],"sampling_rules_error":"","service_mappings":{"initial_service":"new_service"},"tags":{"runtime-id":"[^"]*","tag":"value","tag2":"NaN"},"runtime_metrics_enabled":true,"health_metrics_enabled":true,"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}}`, tp.Lines()[1])
})

t.Run("limit", func(t *testing.T) {
Expand Down Expand Up @@ -86,7 +86,7 @@ func TestStartupLog(t *testing.T) {
tp.Reset()
logStartup(tracer)
assert.Len(tp.Lines(), 2)
assert.Regexp(`Datadog Tracer v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)? 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","sampling_rules":\[{"service":"mysql","name":"","sample_rate":0\.75}\],"sampling_rules_error":"","service_mappings":{"initial_service":"new_service"},"tags":{"runtime-id":"[^"]*","tag":"value","tag2":"NaN"},"runtime_metrics_enabled":true,"health_metrics_enabled":true,"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}}`, tp.Lines()[1])
assert.Regexp(`Datadog Tracer v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)? 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","sampling_rules":\[{"service":"mysql","name":"","sample_rate":0\.75,"type":"trace\(0\)"}\],"sampling_rules_error":"","service_mappings":{"initial_service":"new_service"},"tags":{"runtime-id":"[^"]*","tag":"value","tag2":"NaN"},"runtime_metrics_enabled":true,"health_metrics_enabled":true,"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}}`, tp.Lines()[1])
})

t.Run("errors", func(t *testing.T) {
Expand All @@ -100,7 +100,7 @@ func TestStartupLog(t *testing.T) {
tp.Reset()
logStartup(tracer)
assert.Len(tp.Lines(), 2)
assert.Regexp(`Datadog Tracer v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)? INFO: DATADOG TRACER CONFIGURATION {"date":"[^"]*","os_name":"[^"]*","os_version":"[^"]*","version":"[^"]*","lang":"Go","lang_version":"[^"]*","env":"","service":"tracer\.test","agent_url":"http://localhost:9/v0.4/traces","agent_error":"Post .*","debug":false,"analytics_enabled":false,"sample_rate":"NaN","sample_rate_limit":"100","sampling_rules":\[{"service":"some.service","name":"","sample_rate":0\.234}\],"sampling_rules_error":"found errors:\\n\\tat index 1: rate not provided","service_mappings":null,"tags":{"runtime-id":"[^"]*"},"runtime_metrics_enabled":false,"health_metrics_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":false,"Stats":false,"StatsdPort":0}}`, tp.Lines()[1])
assert.Regexp(`Datadog Tracer v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)? INFO: DATADOG TRACER CONFIGURATION {"date":"[^"]*","os_name":"[^"]*","os_version":"[^"]*","version":"[^"]*","lang":"Go","lang_version":"[^"]*","env":"","service":"tracer\.test","agent_url":"http://localhost:9/v0.4/traces","agent_error":"Post .*","debug":false,"analytics_enabled":false,"sample_rate":"NaN","sample_rate_limit":"100","sampling_rules":\[{"service":"some.service","name":"","sample_rate":0\.234,"type":"trace\(0\)"}\],"sampling_rules_error":"\\n\\tat index 1: rate not provided","service_mappings":null,"tags":{"runtime-id":"[^"]*"},"runtime_metrics_enabled":false,"health_metrics_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":false,"Stats":false,"StatsdPort":0}}`, tp.Lines()[1])
})

t.Run("lambda", func(t *testing.T) {
Expand All @@ -125,9 +125,8 @@ func TestLogSamplingRules(t *testing.T) {
defer stop()

lines := removeAppSec(tp.Lines())
assert.Len(lines, 2)
assert.Contains(lines[0], "WARN: at index 4: ignoring rule {Service: Name: Rate:9.10}: rate is out of [0.0, 1.0] range")
assert.Regexp(`Datadog Tracer v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)? WARN: DIAGNOSTICS Error\(s\) parsing DD_TRACE_SAMPLING_RULES: found errors:\n\tat index 1: rate not provided\n\tat index 3: rate not provided$`, lines[1])
assert.Len(lines, 1)
assert.Regexp(`Datadog Tracer v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)? WARN: DIAGNOSTICS Error\(s\) parsing sampling rules: found errors:\n\tat index 1: rate not provided\n\tat index 3: rate not provided\n\tat index 4: ignoring rule {Service: Name: Rate:9\.10 MaxPerSecond:0}: rate is out of \[0\.0, 1\.0] range$`, lines[0])
}

func TestLogAgentReachable(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion ddtrace/tracer/option.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ type config struct {
// statsd is used for tracking metrics associated with the runtime and the tracer.
statsd statsdClient

// samplingRules contains user-defined rules determine the sampling rate to apply
// samplingRules contains user-defined rules to determine the sampling rate to apply
// to spans.
samplingRules []SamplingRule

Expand Down
Loading