BEAM-style Execution Tracing

Ever felt like you were drowning in logs while debugging an outage in production?

On many platforms, designing for debuggability requires producing and storing enormous volumes of telemetry "just in case" - systems are statically instrumented, and we reactively add log lines as bad things happen.

Over time, these log lines become 'instrumentation debt': the flood of diagnostic output threatens application performance and requires expensive search systems to work with.

The BEAM solves this problem with execution tracing, a form of dynamic instrumentation. What a great idea! Let's dig into the BEAM's execution tracing implementation, learn how it works, and look at what it takes to port this great idea to a much more traditional language runtime, like Perl.

OBJECTIVES

Unpack some of the BEAM's implementation choices around a powerful feature, and draw attention to dynamic instrumentation as a tool for operable systems.

AUDIENCE

People who debug things in production, or people interested in how language tooling impacts debugging in production.