12:30
-
13:00
-
13:00
Day 2
How to Instrument Go Without Changing a Single Line of Code
<p>Zero-touch observability for Go is finally becoming real. In this talk, we’ll walk through the different strategies you can use to instrument Go applications <strong>without changing a single line of code</strong>, and what they cost you in terms of overhead, stability, and security.</p>
<p>We’ll compare several concrete approaches and projects:</p>
<ul>
<li><strong>eBPF-based auto-instrumentation</strong>, using OpenTelemetry’s Go auto-instrumentation agent: </li>
<li><a href="https://github.com/open-telemetry/opentelemetry-go-instrumentation">https://github.com/open-telemetry/opentelemetry-go-instrumentation</a> </li>
<li><a href="https://opentelemetry.io/docs/zero-code/obi/">https://opentelemetry.io/docs/zero-code/obi/</a> </li>
<li><strong>Compile-time manipulation</strong>, using tools that rewrite or augment Go binaries at build time, such as: </li>
<li><a href="https://github.com/alibaba/opentelemetry-go-auto-instrumentation">https://github.com/alibaba/opentelemetry-go-auto-instrumentation</a> </li>
<li><strong>Runtime techniques</strong>, including agents, shared-library injection, and binary trampolines, as used in OpenTelemetry’s Go “Autosdk” work: </li>
<li><a href="https://opentelemetry.io/docs/zero-code/go/autosdk/">https://opentelemetry.io/docs/zero-code/go/autosdk/</a> </li>
<li><strong>USDT (User Statically-Defined Tracing) probes</strong>, exploring how to add or generate USDT probe points for Go services (at build time or via injection) so that external tooling (eBPF, DTrace-style tools, etc.) can consume high-level events without source changes.</li>
</ul>
<p>Beyond what exists today, we’ll look at how ongoing work in the Go runtime and diagnostics ecosystem could unlock cleaner, safer hooks for future auto-instrumentation, including:</p>
<ul>
<li><code>runtime/trace</code> and diagnostics primitives: </li>
<li><a href="https://pkg.go.dev/runtime/trace">https://pkg.go.dev/runtime/trace</a> </li>
<li><a href="https://go.dev/doc/diagnostics">https://go.dev/doc/diagnostics</a> </li>
<li>Proposals such as Go “flight recording” (Issue #63185): </li>
<li><a href="https://github.com/golang/go/issues/63185">https://github.com/golang/go/issues/63185</a></li>
</ul>
<p>Throughout the talk, we’ll use <strong>benchmark results and small, realistic services</strong> to compare these strategies along three axes:</p>
<ul>
<li>Performance overhead (latency, allocations, CPU impact) </li>
<li>Robustness and upgradeability across Go versions and container images </li>
<li>Operational friction: rollout complexity, debugging, and failure modes</li>
</ul>
<p>Attendees will leave with a clear mental model of <strong>when to choose eBPF, compile-time rewriting, runtime injection, or USDT-based approaches</strong>, how OpenTelemetry’s Go auto-instrumentation fits into that picture, and where upcoming runtime features might take us next. The focus is strongly practical and open-source: everything shown will be reproducible using publicly available tooling in the Go and OpenTelemetry ecosystems.</p>