Description
Elastic would like to offer the donation of the Elastic profiling agent to the OpenTelemetry project.
The Elastic profiling agent is an eBPF-based mature multi-runtime/multi-language CPU profiler. It enables fleet-wide and system-wide continuous profiling without the need for any application instrumentation or even application restart. It's currently, to the best of our knowledge, the only existing continuous profiler with no instrumentation/process restart for a broad range of real-world languages. The agent has been used in real large-scale customer production environments since August 2021.
Some of the core features and strengths of the agent are:
- Very low CPU and memory overhead (1% CPU and 250MB memory are our upper limits in testing and the agent typically manages to stay way below that)
- Support for native C/C++ executables without the need for DWARF debug information (by leveraging
.eh_frame data as described in US11604718B1)
- Support profiling of system libraries without frame pointers and without debug symbols on the host.
- Support for mixed stacktraces between runtimes - stacktraces go from Kernel space through unmodified system libraries all the way into high-level languages.
- Support for native code (C/C++, Rust, Zig, Go, etc. without debug symbols on host)
- Support for a broad set of HLLs (Hotspot JVM, Python, Ruby, PHP, Node.JS, V8, Perl), .NET is in preparation.
- 100% non-intrusive: there's no need to load agents or libraries into the processes that are being profiled.
- No need for any reconfiguration, instrumentation or restarts of HLL interpreters and VMs: the agent supports unwinding each of the supported languages in the default configuration.
- ARM64 support for all unwinders except NodeJS.
- Support for native
inline frames, which provide insights into compiler optimizations and offer a higher precision of function call chains.
Benefits to the OpenTelemetry community
The donation of the Elastic profiling agent would fill the gap in OpenTelemetry's component landscape/architecture with a mature, feature-rich and efficient profiling solution. With that, cutting-edge technologies in eBPF and profiling would become a standard through OpenTelemetry for collecting in-production profiling data. Collecting profiling data with OpenTelemetry across a broad range of languages/technologies would come with a frictionless deployment experience.
OpenTelemetry users will get a continuous profiling in production solution with all the previously mentioned core features and strengths. In addition, there is existing work on correlating profiling data from this profiling agent with the tracing data from the OTel Java Agent / SDK. This lays out the basis for achieving cross-signal correlation for profiling data (beyond the pure correlation through resource attributes).
In addition, with this donation, the OpenTelemetry community would gain a team of profiling domain experts to (co-)maintain and advance OpenTelemetry's profiling story.
Reasons for donation
Elastic is dedicated to OpenTelemetry's vision to make it the single, ubiquitous standard and framework for Observability. With this donation, we strive to help OpenTelemetry to successfully expand into the area of continuous profiling by donating one of the industry's leading profiling agents to OpenTelemetry's ecosystem.
Repository
Currently, the code of Elastic's profiling agent is closed source. However, we are already in contact with the TC and working on providing access to the code for review and evaluation of the donation proposal in the next few weeks.
Existing usage
The agent has been used in real large-scale customer (hundreds of customers) production environments (on thousands of nodes) since August 2021 without notable incidents.
Maintenance
In case of a successful donation Elastic's profiling team is dedicated to further (co-)maintain and evolve OTel's profiling agent and help drive its adoption as an industry standard for collecting profiling data in production.
Licenses
Currently, the code of Elastic's profiling agent is closed source. However, we are already in contact with the TC and working on providing access to the code for review and evaluation of the donation proposal in the next few weeks.
In case of the acceptance of this donation proposal Elastic commits to fully open-source the profiling agent under the Apache 2.0 license.
Trademarks
The name "Elastic Universal Profiling" currently appears in the codebase, but we do not intend to donate any code that includes the name "Elastic" or "Elastic Universal Profiling". We will make sure "Elastic" as a name will be removed from the codebase in case the donation is being accepted.
Other notes
Roadmap as part of / after the donation
We are aware that the current code base of the agent will require a few additional features to make the profiling agent usable in the context of OpenTelemetry. However, the above-mentioned strengths of the agent overweight the remaining, manageable effort to make the agent OTel compliant by far. Also, with a positive development of the donation proposal Elastic commits to drive this roadmap and work on the following aspects as soon as possible, to make the profiling agent OTel compliant:
- Implement the OTLP profiling protocol (This work is already in progress and is a matter of weeks)
- Reporting meta information (e.g. host/container metadata) as resource attributes
- Code cleanup, removal of bits not relevant to OTel
We are not aware of any technical blockers and difficulties to achieve the above.
Additional (potential) future work and contributions are:
- Modularization of the agent and introduction of extension points (e.g. for exporters, etc.)
- Contributing a specification and tooling for the symbolization service to the OTel specification
- Further features are possible in the future, such as off-CPU profiling, memory profiling or network profiling
Examples of produced traces

Figure: flamegraph of a mixed native and interpreter workload (native code, Java, Python, and Ruby)

Figure: flamegraph excerpt of Java calling into libc.so which in turn does a syscall into the kernel.
Due Diligence Document
https://docs.google.com/document/d/1ro8qKlAOrxqHYE3YmfUBtiATrS7r267lg9aNdDS6Pps/edit
Description
Elastic would like to offer the donation of the Elastic profiling agent to the OpenTelemetry project.
The Elastic profiling agent is an eBPF-based mature multi-runtime/multi-language CPU profiler. It enables fleet-wide and system-wide continuous profiling without the need for any application instrumentation or even application restart. It's currently, to the best of our knowledge, the only existing continuous profiler with no instrumentation/process restart for a broad range of real-world languages. The agent has been used in real large-scale customer production environments since August 2021.
Some of the core features and strengths of the agent are:
.eh_framedata as described in US11604718B1)inline frames, which provide insights into compiler optimizations and offer a higher precision of function call chains.Benefits to the OpenTelemetry community
The donation of the Elastic profiling agent would fill the gap in OpenTelemetry's component landscape/architecture with a mature, feature-rich and efficient profiling solution. With that, cutting-edge technologies in eBPF and profiling would become a standard through OpenTelemetry for collecting in-production profiling data. Collecting profiling data with OpenTelemetry across a broad range of languages/technologies would come with a frictionless deployment experience.
OpenTelemetry users will get a continuous profiling in production solution with all the previously mentioned core features and strengths. In addition, there is existing work on correlating profiling data from this profiling agent with the tracing data from the OTel Java Agent / SDK. This lays out the basis for achieving cross-signal correlation for profiling data (beyond the pure correlation through resource attributes).
In addition, with this donation, the OpenTelemetry community would gain a team of profiling domain experts to (co-)maintain and advance OpenTelemetry's profiling story.
Reasons for donation
Elastic is dedicated to OpenTelemetry's vision to make it the single, ubiquitous standard and framework for Observability. With this donation, we strive to help OpenTelemetry to successfully expand into the area of continuous profiling by donating one of the industry's leading profiling agents to OpenTelemetry's ecosystem.
Repository
Currently, the code of Elastic's profiling agent is closed source. However, we are already in contact with the TC and working on providing access to the code for review and evaluation of the donation proposal in the next few weeks.
Existing usage
The agent has been used in real large-scale customer (hundreds of customers) production environments (on thousands of nodes) since August 2021 without notable incidents.
Maintenance
In case of a successful donation Elastic's profiling team is dedicated to further (co-)maintain and evolve OTel's profiling agent and help drive its adoption as an industry standard for collecting profiling data in production.
Licenses
Currently, the code of Elastic's profiling agent is closed source. However, we are already in contact with the TC and working on providing access to the code for review and evaluation of the donation proposal in the next few weeks.
In case of the acceptance of this donation proposal Elastic commits to fully open-source the profiling agent under the Apache 2.0 license.
Trademarks
The name "Elastic Universal Profiling" currently appears in the codebase, but we do not intend to donate any code that includes the name "Elastic" or "Elastic Universal Profiling". We will make sure "Elastic" as a name will be removed from the codebase in case the donation is being accepted.
Other notes
Roadmap as part of / after the donation
We are aware that the current code base of the agent will require a few additional features to make the profiling agent usable in the context of OpenTelemetry. However, the above-mentioned strengths of the agent overweight the remaining, manageable effort to make the agent OTel compliant by far. Also, with a positive development of the donation proposal Elastic commits to drive this roadmap and work on the following aspects as soon as possible, to make the profiling agent OTel compliant:
We are not aware of any technical blockers and difficulties to achieve the above.
Additional (potential) future work and contributions are:
Examples of produced traces
Figure: flamegraph of a mixed native and interpreter workload (native code, Java, Python, and Ruby)
Figure: flamegraph excerpt of Java calling into libc.so which in turn does a syscall into the kernel.
Due Diligence Document
https://docs.google.com/document/d/1ro8qKlAOrxqHYE3YmfUBtiATrS7r267lg9aNdDS6Pps/edit