Skip to content

Commit

Permalink
[PoC] Enable auto/sdk in otel global
Browse files Browse the repository at this point in the history
  • Loading branch information
MrAlias committed Dec 10, 2024
1 parent 40670a4 commit 2cc75b0
Show file tree
Hide file tree
Showing 8 changed files with 74 additions and 12 deletions.
21 changes: 14 additions & 7 deletions internal/pkg/inject/offset_results.json
Original file line number Diff line number Diff line change
Expand Up @@ -941,7 +941,8 @@
"1.29.0",
"1.30.0",
"1.31.0",
"1.32.0"
"1.32.0",
"1.32.1-0.20241210212144-ac386f383cdf"
]
}
]
Expand Down Expand Up @@ -1039,7 +1040,8 @@
"1.29.0",
"1.30.0",
"1.31.0",
"1.32.0"
"1.32.0",
"1.32.1-0.20241210212144-ac386f383cdf"
]
}
]
Expand Down Expand Up @@ -1137,7 +1139,8 @@
"1.29.0",
"1.30.0",
"1.31.0",
"1.32.0"
"1.32.0",
"1.32.1-0.20241210212144-ac386f383cdf"
]
}
]
Expand Down Expand Up @@ -1240,7 +1243,8 @@
"1.29.0",
"1.30.0",
"1.31.0",
"1.32.0"
"1.32.0",
"1.32.1-0.20241210212144-ac386f383cdf"
]
}
]
Expand Down Expand Up @@ -1343,7 +1347,8 @@
"1.29.0",
"1.30.0",
"1.31.0",
"1.32.0"
"1.32.0",
"1.32.1-0.20241210212144-ac386f383cdf"
]
}
]
Expand Down Expand Up @@ -1436,7 +1441,8 @@
"1.29.0",
"1.30.0",
"1.31.0",
"1.32.0"
"1.32.0",
"1.32.1-0.20241210212144-ac386f383cdf"
]
}
]
Expand Down Expand Up @@ -1529,7 +1535,8 @@
"1.29.0",
"1.30.0",
"1.31.0",
"1.32.0"
"1.32.0",
"1.32.1-0.20241210212144-ac386f383cdf"
]
}
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ char __license[] SEC("license") = "Dual MIT/GPL";
#define MAX_BUCKETS 8
#define MAX_TRACERS 64

// Records state of our write to auto-instrumentation flag.
bool wrote_flag = false;

struct span_description_t {
char buf[MAX_STATUS_DESCRIPTION_LEN];
};
Expand Down Expand Up @@ -388,6 +391,33 @@ static __always_inline long fill_tracer_id(tracer_id_t *tracer_id, go_tracer_ptr
return 0;
}

// This instrumentation attaches uprobe to the following function:
// func (t *tracer) newSpan(ctx context.Context, autoSpan *bool, name string, opts []trace.SpanStartOption) (context.Context, trace.Span) {
// https://github.com/open-telemetry/opentelemetry-go/blob/ac386f383cdfc14f546b4e55e8726a0a45e8a409/internal/global/trace.go#L161
SEC("uprobe/newSpan")
int uprobe_newStart(struct pt_regs *ctx) {
if (wrote_flag) {
// Already wrote flag value.
return 0;
}

void *flag_ptr = get_argument(ctx, 4);
if (flag_ptr == NULL) {
bpf_printk("invalid flag_ptr: NULL");
return -1;
}

bool true_value = true;
long res = bpf_probe_write_user(flag_ptr, &true_value, sizeof(bool));
if (res != 0) {
bpf_printk("failed to write bool flag value: %ld", res);
return -2;
}

wrote_flag = true;
return 0;
}

// This instrumentation attaches uprobe to the following function:
// func (t *tracer) Start(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, trace.Span)
// https://github.com/open-telemetry/opentelemetry-go/blob/98b32a6c3a87fbee5d34c063b9096f416b250897/internal/global/trace.go#L149
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,10 @@ func New(logger *slog.Logger) probe.Probe {
tracerIDContainsScopeAttributes{},
},
Uprobes: []probe.Uprobe{
{
Sym: "go.opentelemetry.io/otel/internal/global.(*tracer).newSpan",
EntryProbe: "uprobe_newStart",
},
{
Sym: "go.opentelemetry.io/otel/internal/global.(*tracer).Start",
EntryProbe: "uprobe_Start",
Expand Down
11 changes: 9 additions & 2 deletions internal/test/e2e/autosdk/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,16 @@ module go.opentelemetry.io/auto/internal/test/e2e/autosdk
go 1.22.0

require (
go.opentelemetry.io/auto/sdk v1.1.0
go.opentelemetry.io/otel v1.32.0
go.opentelemetry.io/otel v1.32.1-0.20241210212144-ac386f383cdf
go.opentelemetry.io/otel/trace v1.32.0
)

require (
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/stretchr/testify v1.10.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/otel/metric v1.32.0 // indirect
)

replace go.opentelemetry.io/auto/sdk => ../../../../sdk/
9 changes: 9 additions & 0 deletions internal/test/e2e/autosdk/go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand All @@ -8,6 +13,10 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
go.opentelemetry.io/otel v1.32.1-0.20241210212144-ac386f383cdf h1:UdjRouPHKYAwmq0PNPIR+XH1gtolmJTBhkvufgwQS/g=
go.opentelemetry.io/otel v1.32.1-0.20241210212144-ac386f383cdf/go.mod h1:TV/DhW5+BLw6Z88V8qkXPPjIrjOYagH9a6HmSRrnNP0=
go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
Expand Down
5 changes: 2 additions & 3 deletions internal/test/e2e/autosdk/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,10 @@ import (
"os/signal"
"time"

"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"

"go.opentelemetry.io/auto/sdk"
)

const (
Expand Down Expand Up @@ -79,7 +78,7 @@ func main() {
// give time for auto-instrumentation to start up
time.Sleep(5 * time.Second)

provider := sdk.TracerProvider()
provider := otel.GetTracerProvider()
tracer := provider.Tracer(
pkgName,
trace.WithInstrumentationVersion(pkgVer),
Expand Down

0 comments on commit 2cc75b0

Please sign in to comment.