Instrument Go Without Changing a Single Line
summary
Surveys four zero‑touch approaches and gives concrete tradeoffs: OTelC compile-time injector rewrites AST at build time (V1, targets Go 1.25+, platform independent, stable for traces/metrics/logs and pprof stitching); OBI eBPF runtime instrumentation attaches uprobes from kernel (Linux only, needs specific kernel/privileges, emits traces+metrics today, brittle on offsets but usable); eBPF profiler uses perf for low overhead CPU profiles (works with cgo/native stacks); LD_PRELOAD injector is experimental but promises no rebuild. Benchmarks compare overhead and stability across these.
AI-written summary · about
chapters (20)
- 0:00Introduction
- 0:29Instrumentation matters
- 2:57Zero-touch promise
- 4:43Go resists instrumentation
- 6:08Auto-instrument Go paths
- 9:36Runtime injection challenges
- 11:21OpenTelemetry eBPF projects
- 13:23OBI instruments from kernel
- 17:55OBI capabilities and limits
- 19:20eBPF stability costs
- 20:24Compile-time otelC
- 22:33Go runtime rewriting magic
- 24:19Future runtime injector
- 25:24LD_PRELOAD teaser
- 26:27eBPF Go profiler
- 28:53eBPF stack traces
- 29:55Combining approaches for full observability
- 30:38Choose auto-instrumentation
- 31:21Dynamic debugging future
- 32:05Key takeaways
related talks
20mStrategies for Auto-Instrumenting Go Applications Without Code Changes
39mAuto-Instrumenting Go Libraries for Tracing with eBPF and OpenTelemetry
30mDynamically Instrumenting Go Programs
31mAdvancing Observability With Compile-Time Auto-Instrumentation in Golang
22mDynamic Go Instrumentation for Production Environments
33mBuilding a Go Profiler Using Go
29mCurveballs: Learnings from Instrumenting Managed Runtime...
19mInstrumenting Go Apps With OpenTelemetry
