Skip to content

Commit 2cc75b0

Browse files
committed
[PoC] Enable auto/sdk in otel global
1 parent 40670a4 commit 2cc75b0

File tree

8 files changed

+74
-12
lines changed

8 files changed

+74
-12
lines changed

internal/pkg/inject/offset_results.json

+14-7
Original file line numberDiff line numberDiff line change
@@ -941,7 +941,8 @@
941941
"1.29.0",
942942
"1.30.0",
943943
"1.31.0",
944-
"1.32.0"
944+
"1.32.0",
945+
"1.32.1-0.20241210212144-ac386f383cdf"
945946
]
946947
}
947948
]
@@ -1039,7 +1040,8 @@
10391040
"1.29.0",
10401041
"1.30.0",
10411042
"1.31.0",
1042-
"1.32.0"
1043+
"1.32.0",
1044+
"1.32.1-0.20241210212144-ac386f383cdf"
10431045
]
10441046
}
10451047
]
@@ -1137,7 +1139,8 @@
11371139
"1.29.0",
11381140
"1.30.0",
11391141
"1.31.0",
1140-
"1.32.0"
1142+
"1.32.0",
1143+
"1.32.1-0.20241210212144-ac386f383cdf"
11411144
]
11421145
}
11431146
]
@@ -1240,7 +1243,8 @@
12401243
"1.29.0",
12411244
"1.30.0",
12421245
"1.31.0",
1243-
"1.32.0"
1246+
"1.32.0",
1247+
"1.32.1-0.20241210212144-ac386f383cdf"
12441248
]
12451249
}
12461250
]
@@ -1343,7 +1347,8 @@
13431347
"1.29.0",
13441348
"1.30.0",
13451349
"1.31.0",
1346-
"1.32.0"
1350+
"1.32.0",
1351+
"1.32.1-0.20241210212144-ac386f383cdf"
13471352
]
13481353
}
13491354
]
@@ -1436,7 +1441,8 @@
14361441
"1.29.0",
14371442
"1.30.0",
14381443
"1.31.0",
1439-
"1.32.0"
1444+
"1.32.0",
1445+
"1.32.1-0.20241210212144-ac386f383cdf"
14401446
]
14411447
}
14421448
]
@@ -1529,7 +1535,8 @@
15291535
"1.29.0",
15301536
"1.30.0",
15311537
"1.31.0",
1532-
"1.32.0"
1538+
"1.32.0",
1539+
"1.32.1-0.20241210212144-ac386f383cdf"
15331540
]
15341541
}
15351542
]

internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf/probe.bpf.c

+30
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ char __license[] SEC("license") = "Dual MIT/GPL";
2323
#define MAX_BUCKETS 8
2424
#define MAX_TRACERS 64
2525

26+
// Records state of our write to auto-instrumentation flag.
27+
bool wrote_flag = false;
28+
2629
struct span_description_t {
2730
char buf[MAX_STATUS_DESCRIPTION_LEN];
2831
};
@@ -388,6 +391,33 @@ static __always_inline long fill_tracer_id(tracer_id_t *tracer_id, go_tracer_ptr
388391
return 0;
389392
}
390393

394+
// This instrumentation attaches uprobe to the following function:
395+
// func (t *tracer) newSpan(ctx context.Context, autoSpan *bool, name string, opts []trace.SpanStartOption) (context.Context, trace.Span) {
396+
// https://github.com/open-telemetry/opentelemetry-go/blob/ac386f383cdfc14f546b4e55e8726a0a45e8a409/internal/global/trace.go#L161
397+
SEC("uprobe/newSpan")
398+
int uprobe_newStart(struct pt_regs *ctx) {
399+
if (wrote_flag) {
400+
// Already wrote flag value.
401+
return 0;
402+
}
403+
404+
void *flag_ptr = get_argument(ctx, 4);
405+
if (flag_ptr == NULL) {
406+
bpf_printk("invalid flag_ptr: NULL");
407+
return -1;
408+
}
409+
410+
bool true_value = true;
411+
long res = bpf_probe_write_user(flag_ptr, &true_value, sizeof(bool));
412+
if (res != 0) {
413+
bpf_printk("failed to write bool flag value: %ld", res);
414+
return -2;
415+
}
416+
417+
wrote_flag = true;
418+
return 0;
419+
}
420+
391421
// This instrumentation attaches uprobe to the following function:
392422
// func (t *tracer) Start(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, trace.Span)
393423
// https://github.com/open-telemetry/opentelemetry-go/blob/98b32a6c3a87fbee5d34c063b9096f416b250897/internal/global/trace.go#L149

internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_arm64_bpfel.go

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_x86_bpfel.go

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/probe.go

+4
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ func New(logger *slog.Logger) probe.Probe {
108108
tracerIDContainsScopeAttributes{},
109109
},
110110
Uprobes: []probe.Uprobe{
111+
{
112+
Sym: "go.opentelemetry.io/otel/internal/global.(*tracer).newSpan",
113+
EntryProbe: "uprobe_newStart",
114+
},
111115
{
112116
Sym: "go.opentelemetry.io/otel/internal/global.(*tracer).Start",
113117
EntryProbe: "uprobe_Start",

internal/test/e2e/autosdk/go.mod

+9-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,16 @@ module go.opentelemetry.io/auto/internal/test/e2e/autosdk
33
go 1.22.0
44

55
require (
6-
go.opentelemetry.io/auto/sdk v1.1.0
7-
go.opentelemetry.io/otel v1.32.0
6+
go.opentelemetry.io/otel v1.32.1-0.20241210212144-ac386f383cdf
87
go.opentelemetry.io/otel/trace v1.32.0
98
)
109

10+
require (
11+
github.com/go-logr/logr v1.4.2 // indirect
12+
github.com/go-logr/stdr v1.2.2 // indirect
13+
github.com/stretchr/testify v1.10.0 // indirect
14+
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
15+
go.opentelemetry.io/otel/metric v1.32.0 // indirect
16+
)
17+
1118
replace go.opentelemetry.io/auto/sdk => ../../../../sdk/

internal/test/e2e/autosdk/go.sum

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
22
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
4+
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
5+
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
6+
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
7+
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
38
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
49
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
510
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -8,6 +13,10 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
813
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
914
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
1015
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
16+
go.opentelemetry.io/otel v1.32.1-0.20241210212144-ac386f383cdf h1:UdjRouPHKYAwmq0PNPIR+XH1gtolmJTBhkvufgwQS/g=
17+
go.opentelemetry.io/otel v1.32.1-0.20241210212144-ac386f383cdf/go.mod h1:TV/DhW5+BLw6Z88V8qkXPPjIrjOYagH9a6HmSRrnNP0=
18+
go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
19+
go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
1120
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
1221
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
1322
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

internal/test/e2e/autosdk/main.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@ import (
1010
"os/signal"
1111
"time"
1212

13+
"go.opentelemetry.io/otel"
1314
"go.opentelemetry.io/otel/attribute"
1415
"go.opentelemetry.io/otel/codes"
1516
"go.opentelemetry.io/otel/trace"
16-
17-
"go.opentelemetry.io/auto/sdk"
1817
)
1918

2019
const (
@@ -79,7 +78,7 @@ func main() {
7978
// give time for auto-instrumentation to start up
8079
time.Sleep(5 * time.Second)
8180

82-
provider := sdk.TracerProvider()
81+
provider := otel.GetTracerProvider()
8382
tracer := provider.Tracer(
8483
pkgName,
8584
trace.WithInstrumentationVersion(pkgVer),

0 commit comments

Comments
 (0)