The model
1
A program is compiled to eBPF bytecode
A restricted instruction set. No unbounded loops, no arbitrary memory
access, no calling into anything it likes.
2
The kernel verifier checks it before loading
Every possible execution path is analysed. A program that could loop
forever, read out of bounds, or dereference an unchecked pointer is
rejected — it never runs.
3
It attaches to an event
A kernel function entry, a userspace library call, a network socket, a
tracepoint.
4
It runs on that event and writes to a map
Bounded work, then a result into a shared memory region.
5
The agent reads the maps from userspace
Aggregates, converts to OTLP, and exports.
The verifier is the reason this is safe to run in production. A kernel
module can do anything and a bug in one panics the machine. An eBPF program
is proven terminating and memory-safe before it is allowed to load. Loading
failures are loud and non-fatal — the program is refused, and the kernel
carries on.This is the whole difference between eBPF-based agents and the kernel-module
agents that earned the category its reputation.
What the agent attaches to
The TLS hooks are the important one, and they are the source of the sharpest
question in any security review.
Why it needs privilege
Loading an eBPF program and attaching probes are privileged kernel operations. This is not incidental — it is why the agent can see what it sees, and why the decision about how much privilege deserves to be explicit. The requirement is expressed as Linux capabilities, not as root:CAP_SYS_ADMIN is not in any profile. It is near-equivalent to root. It
is refused outright for the lower two profiles, and reachable only through an
explicit opt-in flag on the highest. See
Capability profiles.Why the kernel version matters
The agent reads kernel data structures whose layout changes between versions. Rather than compiling a build per kernel, it uses CO-RE — compile once, run everywhere — which relocates field offsets at load time using type information the kernel publishes about itself, called BTF. That gives you two hard requirements:- Kernel 5.8 or newer (RHEL-family 4.18 excepted, where the features are backported).
/sys/kernel/btf/vmlinuxmust exist. Without it there is no type information to relocate against.
The setting that catches everyone
What is left behind
Nothing in the kernel. eBPF programs and their maps are released when the process that loaded them exits. Stopping the agent stops the observation; there is no module to unload and no reboot to schedule.Next
OpenTelemetry OBI
The upstream project, what is pinned, and what this distribution changes.
Security model
Written for a security team: what it sees, sends and never does.
Capability profiles
Three privilege levels, measured rather than quoted.