Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: open-telemetry/opentelemetry-go-instrumentation
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: f265d157be39e2f2eae6d809fed2f7adf7689a9b
Choose a base ref
..
head repository: open-telemetry/opentelemetry-go-instrumentation
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 4766d7f5e4e5b6388b70cae4f0e382ec1ba8e00c
Choose a head ref
Showing with 221 additions and 247 deletions.
  1. +1 −1 .github/workflows/synclibbpf.yaml
  2. +4 −0 CHANGELOG.md
  3. +6 −10 Makefile
  4. +1 −1 examples/httpPlusdb/Dockerfile
  5. +1 −1 examples/kafka-go/Dockerfile
  6. +1 −1 examples/rolldice/docker-compose.yaml
  7. +1 −1 examples/rolldice/frontend/Dockerfile
  8. +1 −1 examples/rolldice/user/Dockerfile
  9. +4 −4 go.mod
  10. +8 −8 go.sum
  11. +3 −31 instrumentation.go
  12. +3 −2 internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf/probe.bpf.c
  13. +1 −2 internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_arm64_bpfel.go
  14. +1 −2 internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_x86_bpfel.go
  15. +1 −2 internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/probe.go
  16. +42 −42 internal/pkg/instrumentation/manager.go
  17. +26 −6 internal/pkg/instrumentation/manager_load_test.go
  18. +45 −62 internal/pkg/instrumentation/manager_test.go
  19. +1 −1 internal/pkg/opentelemetry/controller_test.go
  20. +1 −1 internal/test/e2e/autosdk/Dockerfile
  21. +1 −1 internal/test/e2e/databasesql/Dockerfile
  22. +1 −1 internal/test/e2e/gin/Dockerfile
  23. +2 −2 internal/test/e2e/gin/go.mod
  24. +4 −4 internal/test/e2e/gin/go.sum
  25. +1 −1 internal/test/e2e/grpc/Dockerfile
  26. +2 −2 internal/test/e2e/grpc/go.mod
  27. +4 −4 internal/test/e2e/grpc/go.sum
  28. +1 −1 internal/test/e2e/kafka-go/Dockerfile
  29. +1 −1 internal/test/e2e/nethttp/Dockerfile
  30. +1 −1 internal/test/e2e/nethttp_custom/Dockerfile
  31. +1 −1 internal/test/e2e/otelglobal/Dockerfile
  32. +13 −13 internal/tools/go.mod
  33. +28 −28 internal/tools/go.sum
  34. +1 −1 sdk/internal/telemetry/test/go.mod
  35. +2 −2 sdk/internal/telemetry/test/go.sum
  36. +3 −3 sdk/span_test.go
  37. +3 −2 sdk/tracer.go
2 changes: 1 addition & 1 deletion .github/workflows/synclibbpf.yaml
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5
with:
go-version: "~1.23.1"
go-version: "~1.24.0"
check-latest: true
cache-dependency-path: "**/go.sum"
- id: sync
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -33,6 +33,10 @@ OpenTelemetry Go Automatic Instrumentation adheres to [Semantic Versioning](http
The `auto` package no longer supports process discovery (note: the built binary (`auto/cli`) still supports process discovery).
Once a target process has been identified, use `WithPID` to configure `Instrumentation` instead. ([#1890](https://github.com/open-telemetry/opentelemetry-go-instrumentation/pull/1890))

### Fixed

- Fix spans parsing from eBPF for the legacy (go version < 1.24 otel-go < 1.33) otel global instrumentation. ([#1960](https://github.com/open-telemetry/opentelemetry-go-instrumentation/pull/1960))

## [v0.21.0] - 2025-02-18

> [!WARNING]
16 changes: 6 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
@@ -140,15 +140,6 @@ docker-build:
docker-build-base:
docker buildx build -t $(IMG_NAME_BASE) --target base .

.PHONY: sample-app/nethttp sample-app/gin sample-app/databasesql sample-app/nethttp-custom sample-app/otelglobal sample-app/autosdk sample-app/kafka-go
sample-app/%: LIBRARY=$*
sample-app/%:
if [ -f ./internal/test/e2e/$(LIBRARY)/build.sh ]; then \
./internal/test/e2e/$(LIBRARY)/build.sh; \
else \
cd internal/test/e2e/$(LIBRARY) && docker build -t sample-app . ;\
fi

LIBBPF_VERSION ?= "< 1.5, >= 1.4.7"
LIBBPF_DEST ?= "$(REPODIR)/internal/include/libbpf"
.PHONY: synclibbpf
@@ -204,7 +195,12 @@ fixture-otelglobal: fixtures/otelglobal
fixture-autosdk: fixtures/autosdk
fixture-kafka-go: fixtures/kafka-go
fixtures/%: LIBRARY=$*
fixtures/%: docker-build sample-app/%
fixtures/%: docker-build
if [ -f ./internal/test/e2e/$(LIBRARY)/build.sh ]; then \
./internal/test/e2e/$(LIBRARY)/build.sh; \
else \
cd internal/test/e2e/$(LIBRARY) && docker build -t sample-app . ;\
fi
kind create cluster
kind load docker-image otel-go-instrumentation sample-app
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
2 changes: 1 addition & 1 deletion examples/httpPlusdb/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
WORKDIR /app
COPY ./*.go .
RUN go mod init main
2 changes: 1 addition & 1 deletion examples/kafka-go/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
WORKDIR /app
COPY . .
ARG BINARY_NAME
2 changes: 1 addition & 1 deletion examples/rolldice/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ networks:

services:
jaeger:
image: jaegertracing/jaeger:2.3.0@sha256:6f578f9f7e3cfadf2f46a3c4ceb52614b8520b519eedcb465d63a08136b5cd24
image: jaegertracing/jaeger:2.4.0@sha256:81afdc6ae85f52a5f063c80fcdb201798bb283d81067211121291b64026c19c2
ports:
- "16686:16686" # Web HTTP
restart: unless-stopped
2 changes: 1 addition & 1 deletion examples/rolldice/frontend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021

WORKDIR /usr/src/user

2 changes: 1 addition & 1 deletion examples/rolldice/user/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021

WORKDIR /usr/src/user

8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@ require (
github.com/stretchr/testify v1.10.0
github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2
go.opentelemetry.io/collector/pdata v1.27.0
go.opentelemetry.io/contrib/exporters/autoexport v0.59.0
go.opentelemetry.io/contrib/exporters/autoexport v0.60.0
go.opentelemetry.io/otel v1.35.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0
@@ -57,7 +57,7 @@ require (
github.com/prometheus/common v0.62.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/bridges/prometheus v0.59.0 // indirect
go.opentelemetry.io/contrib/bridges/prometheus v0.60.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.11.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.35.0 // indirect
@@ -75,8 +75,8 @@ require (
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/net v0.37.0 // indirect
golang.org/x/text v0.23.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250311190419-81fb87f6b8bf // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf // indirect
google.golang.org/protobuf v1.36.5 // indirect
)

16 changes: 8 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
@@ -80,10 +80,10 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opentelemetry.io/collector/pdata v1.27.0 h1:66yI7FYkUDia74h48Fd2/KG2Vk8DxZnGw54wRXykCEU=
go.opentelemetry.io/collector/pdata v1.27.0/go.mod h1:18e8/xDZsqyj00h/5HM5GLdJgBzzG9Ei8g9SpNoiMtI=
go.opentelemetry.io/contrib/bridges/prometheus v0.59.0 h1:HY2hJ7yn3KuEBBBsKxvF3ViSmzLwsgeNvD+0utRMgzc=
go.opentelemetry.io/contrib/bridges/prometheus v0.59.0/go.mod h1:H4H7vs8766kwFnOZVEGMJFVF+phpBSmTckvvNRdJeDI=
go.opentelemetry.io/contrib/exporters/autoexport v0.59.0 h1:dKhAFwh7SSoOw+gwMtSv+XLkUGTFAwAGMT3X3XSE4FA=
go.opentelemetry.io/contrib/exporters/autoexport v0.59.0/go.mod h1:fPl+qlrhRdRntIpPs9JoQ0iBKAsnH5VkgppU1f9kyF4=
go.opentelemetry.io/contrib/bridges/prometheus v0.60.0 h1:x7sPooQCwSg27SjtQee8GyIIRTQcF4s7eSkac6F2+VA=
go.opentelemetry.io/contrib/bridges/prometheus v0.60.0/go.mod h1:4K5UXgiHxV484efGs42ejD7E2J/sIlepYgdGoPXe7hE=
go.opentelemetry.io/contrib/exporters/autoexport v0.60.0 h1:GuQXpvSXNjpswpweIem84U9BNauqHHi2w1GtNAalvpM=
go.opentelemetry.io/contrib/exporters/autoexport v0.60.0/go.mod h1:CkmxekdHco4d7thFJNPQ7Mby4jMBgZUclnrxT4e+ryk=
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0 h1:HMUytBT3uGhPKYY/u/G5MR9itrlSO2SMOsSD3Tk3k7A=
@@ -161,10 +161,10 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
google.golang.org/genproto/googleapis/api v0.0.0-20250311190419-81fb87f6b8bf h1:BdIVRm+fyDUn8lrZLPSlBCfM/YKDwUBYgDoLv9+DYo0=
google.golang.org/genproto/googleapis/api v0.0.0-20250311190419-81fb87f6b8bf/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf h1:dHDlF3CWxQkefK9IJx+O8ldY0gLygvrlYRBNbPqDWuY=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg=
google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
34 changes: 3 additions & 31 deletions instrumentation.go
Original file line number Diff line number Diff line change
@@ -53,7 +53,6 @@ const (
// Instrumentation manages and controls all OpenTelemetry Go
// auto-instrumentation.
type Instrumentation struct {
target *process.Info
manager *instrumentation.Manager

stopMu sync.Mutex
@@ -96,44 +95,17 @@ func NewInstrumentation(ctx context.Context, opts ...InstrumentationOption) (*In
}

cp := convertConfigProvider(c.cp)
mngr, err := instrumentation.NewManager(c.logger, ctrl, cp, p...)
mngr, err := instrumentation.NewManager(c.logger, ctrl, c.pid, cp, p...)
if err != nil {
return nil, err
}

pi, err := process.NewInfo(c.pid, mngr.GetRelevantFuncs())
if err != nil {
if pi == nil {
return nil, err
}
// Assume a recoverable error.
c.logger.Error("process info", "error", err, "info", pi)
}

alloc, err := process.Allocate(c.logger, c.pid)
if err != nil {
return nil, err
}
pi.Allocation = alloc

c.logger.Info(
"target process analysis completed",
"pid", pi.ID,
"go_version", pi.GoVersion,
"dependencies", pi.Modules,
"total_functions_found", len(pi.Functions),
)
mngr.FilterUnusedProbes(pi)

return &Instrumentation{
target: pi,
manager: mngr,
}, nil
return &Instrumentation{manager: mngr}, nil
}

// Load loads and attaches the relevant probes to the target process.
func (i *Instrumentation) Load(ctx context.Context) error {
return i.manager.Load(ctx, i.target)
return i.manager.Load(ctx)
}

// Run starts the instrumentation. It must be called after [Instrumentation.Load].
Original file line number Diff line number Diff line change
@@ -46,11 +46,11 @@ typedef struct tracer_id {
} tracer_id_t;

struct control_t {
u32 kind; // Required to be 1.
u64 kind; // Required to be 1.
};

struct otel_span_t {
u32 kind; // Required to be 0.
u64 kind; // Required to be 0.
BASE_SPAN_PROPERTIES
struct span_name_t span_name;
otel_status_t status;
@@ -622,6 +622,7 @@ int uprobe_End(struct pt_regs *ctx) {
return 0;
}
span->end_time = bpf_ktime_get_ns();
span->kind = 0;
stop_tracking_span(&span->sc, &span->psc);

output_span_event(ctx, span, sizeof(*span), &span->sc);

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
@@ -210,7 +210,7 @@ func New(logger *slog.Logger) probe.Probe {
}
}

type recordKind uint32
type recordKind uint64

const (
recordKindTelemetry recordKind = iota
@@ -236,7 +236,6 @@ func (c *converter) decodeEvent(record perf.Record) (*event, error) {
switch kind {
case recordKindTelemetry:
e = new(event)
reader.Reset(record.RawSample)
err = binary.Read(reader, binary.LittleEndian, e)
case recordKindConrol:
if c.uprobeNewStart != nil {
Loading