elastic/otel-profiling-agent
FreeThe production-scale datacenter profiler (C/C++, Go, Rust, Python, Java, NodeJS, .NET, PHP, Ruby, Perl, ...)
About elastic/otel-profiling-agent
The OpenTelemetry eBPF Profiler is a whole-system, cross-language profiler for Linux that leverages eBPF. It provides production-scale profiling with very low CPU and memory overhead (upper limits of 1% CPU and 250MB memory in testing). It supports native C/C++, Go, Rust, Python, Java, Node.js, .NET, PHP, Ruby, Perl, and Erlang runtimes, including mixed stack traces from kernel space through system libraries into high-level languages. The profiler is 100% non-intrusive—no agents or libraries need to be loaded into target processes, and no reconfiguration or restarts are required. It supports ARM64 architectures, native inline frames for deeper insight into compiler optimizations, and can unwind even without DWARF debug information by using .eh_frame data. It implements the Alpha OpenTelemetry Profiles signal. The minimum supported Linux kernel version is 5.10 (with some earlier commits supporting 5.4 and 4.19).
Key Features
Pros & Cons
- Extremely low overhead suitable for production environments
- Broad language support without requiring debug symbols or frame pointers
- Completely non-intrusive, no code or configuration changes needed
- ARM64 support makes it usable across modern server architectures
- Open source with active development under OpenTelemetry
- Requires Linux kernel version 5.10 or newer (some features require later kernels)
- Limited to x86_64 and ARM64 architectures
- Still in alpha stage for the OTel Profiles signal, may have breaking changes
- No Windows or macOS support (Linux only)