|
| 1 | +# The OpenTelemetry Injector Project |
| 2 | + |
| 3 | +Installing an OpenTelemetry client can be a difficult process. An OpenTelemetry |
| 4 | +client consists of a language-specific OpenTelemetry SDK plus a set of |
| 5 | +instrumentation packages that matches the set of libraries used by the target |
| 6 | +application. The correct set of SDK plugins also need to be installed and |
| 7 | +configured to match the correct settings for their deployment environment. |
| 8 | + |
| 9 | +System operators are end users who have access to deployment and management tools |
| 10 | +for their organization's services, but do not have access to the source code or |
| 11 | +command line invocations for those services. |
| 12 | + |
| 13 | +Currently, system operators have very limited choices for installing OpenTelemetry clients. |
| 14 | +There are several language-specific installation efforts supported by the |
| 15 | +OpenTelemetry Operator, providing coverage for a limited number of use cases. Using |
| 16 | +LD_PRELOAD, we can extend this set of use cases to six languages, and remove the |
| 17 | +requirement that the users be running Kubernetes. Running Linux will still be a |
| 18 | +requirement. |
| 19 | + |
| 20 | +Note: This SIG is concerned with the OpenTelemetry Injector mechanism itself. We |
| 21 | +will provide a proof of concept of how the injector can be delivered via system |
| 22 | +packages. We do not believe that this SIG should maintain any system packages beyond |
| 23 | +the scope needed for demonstrating the utility of the Injector. For the actual |
| 24 | +packaging of OpenTelemetry, best practices should be established based on community |
| 25 | +feedback. For example, we believe that deciding how to use the OpenTelemetry |
| 26 | +Injector with Kubernetes should be discussed as part of the OpenTelemetry Operator |
| 27 | +SIG. |
| 28 | + |
| 29 | +## Background and description |
| 30 | + |
| 31 | +LD_PRELOAD-based injection of instrumentation into application runtimes is a |
| 32 | +technique that has been widely in use in the APM industry. It requires no elevated |
| 33 | +security privileges (LD_PRELOAD shared objects run with the same privileges of their |
| 34 | +host process) and is known to work in a variety of runtimes: Java, Node.js, .NET, |
| 35 | +Python, Ruby, Elixir and PHP. LD_PRELOAD-based injection is generally not applicable |
| 36 | +to compiled languages, like C, C++, Rust or Go (although for Go there is precedent |
| 37 | +in commercial vendors to add instrumentations by redirecting local symbols); |
| 38 | +however, this is a limitation of SDKs and auto-instrumentations, not of LD_PRELOAD |
| 39 | +itself. |
| 40 | + |
| 41 | +### Current challenges |
| 42 | + |
| 43 | +Adopting OpenTelemetry can be a difficult task for most users without expertise in |
| 44 | +Observability. Modifying applications to add and maintain SDKs and their setup is a |
| 45 | +chore that most developers would rather avoid. Many practitioners – even experienced |
| 46 | +ones – are perfectly fine starting their observability journey by using |
| 47 | +auto-instrumentation, especially for those languages with good instrumentation |
| 48 | +coverage and mature SDKs. |
| 49 | + |
| 50 | +As mentioned in the overview, system operators are an important group of end users – |
| 51 | +they have wide access to modifying service deployments in ways that would allow them |
| 52 | +to deploy end-to-end observability faster and more completely than anyone else in |
| 53 | +their organization. They are often the same group of people tasked with managing |
| 54 | +many of the security concerns that can relate to telemetry. |
| 55 | + |
| 56 | +### Goals, objectives, and requirements |
| 57 | + |
| 58 | +The OpenTelemetry Injector can provide an easy installation experience for users |
| 59 | +that run services on Linux-based (virtual) hosts. An “apt install opentelemetry“ |
| 60 | +experience that results in OpenTelemetry installed in every service on the box is |
| 61 | +going to allow operators to quickly add observability using a workflow that they are |
| 62 | +familiar with. |
| 63 | + |
| 64 | +For kubernetes, the OpenTelemetry Operator provides an auto-instrumentation |
| 65 | +experience. We foresee a collaboration with the OpenTelemetry Operator SIG to |
| 66 | +deliver the injector through the operator and, in so doing, streamline the |
| 67 | +auto-instrumentation experience. (As a matter of fact, the Injector SIG actually |
| 68 | +started with an engagement in the OpenTelemetry Operator, which then was spun into |
| 69 | +this dedicated SIG.) |
| 70 | + |
| 71 | +For docker and other containerized applications, a layered-based image approach can |
| 72 | +easily mix in the same opentelemetry packages. However, solving all of the different |
| 73 | +approaches to packaging is not a focus for this project. |
| 74 | + |
| 75 | +#### Goals |
| 76 | + |
| 77 | +Create a uniform mechanism for operators as well as application developers to |
| 78 | +install SDKs and library auto-instrumentation applicable to all applications on a |
| 79 | +Linux host just by means of adding system packages, and support as many languages as |
| 80 | +possible while doing so. We know from industry experience that this significantly |
| 81 | +improves installation success at scale, especially in situations when application |
| 82 | +developers are not readily available or willing to devote the effort to maintain |
| 83 | +observability setups inside their applications. |
| 84 | + |
| 85 | +In pursuit of this vision, we will provide an LD-PRELOAD object that enables |
| 86 | +out-of-the-box, system-wide auto-instrumentation experience on Linux hosts and |
| 87 | +containers. |
| 88 | + |
| 89 | +We will also create a proof of concept for the structure of system packages. The |
| 90 | +package structure should not to be monolithic, but rather separate the common |
| 91 | +injecting concerns from the language-specific SDKs and instrumentation packages. The |
| 92 | +packages should be arranged so that custom distributions can be provided for |
| 93 | +specific runtimes. The Injector SIG will pick one common packaging environment and |
| 94 | +use it to provide a reference solution to these problems. |
| 95 | + |
| 96 | +#### Why now? |
| 97 | + |
| 98 | +As part of "crossing the chasm" to the mainstream, OpenTelemetry needs to provide |
| 99 | +mainstream organizations with an installation experience that either matches or |
| 100 | +improves upon what they have come to expect from existing APM tools. |
| 101 | + |
| 102 | +This is especially critical for organizations in which operators are in charge of |
| 103 | +maintaining observability setups, without the ability to modify application source |
| 104 | +code or command line invocations. Today, these users are blocked from deploying |
| 105 | +OpenTelemetry. |
| 106 | + |
| 107 | +This has become one of the primary limiting factors for many organizations |
| 108 | +interested in adopting OpenTelemetry. Organizations adopt the Collector because |
| 109 | +operators are allowed to have control over it, but they cannot deploy OpenTelemetry |
| 110 | +SDKs and thus miss out on distributed tracing plus all of our library-level |
| 111 | +instrumentation. |
| 112 | + |
| 113 | +## Deliverables |
| 114 | + |
| 115 | +We intend to deliver: |
| 116 | +A ready-made, LD_PRELOAD injector of production quality that will work regardless of |
| 117 | +the GNU LibC flavor used in the linked application, and be inert when the linked |
| 118 | +application does not contain a LibC. This is already available in the |
| 119 | +opentelemetry-injector, with one last major feature-functionality drop to be donated |
| 120 | +by Dash0 (support for dynamically-linked binaries that do not link a LibC). |
| 121 | + |
| 122 | +A proof of concept of system packaging for Java and Node.js OTel SDKs and |
| 123 | +auto-instrumentations for Debian-based Linux distributions that provides the `apt |
| 124 | +install opentelemetry` experience. We want to set up packages not to be monolithic, |
| 125 | +but rather separate the injector concern from language-specific SDKs, and in so |
| 126 | +doing, provide a baseline for observability vendors to build upon with their own |
| 127 | +OpenTelemetry distributions. |
| 128 | + |
| 129 | +A document outlining a draft of the packaging architecture outline describing how to |
| 130 | +structure modular .deb system packages so that end users can opt into |
| 131 | +vendor-provided distributions. |
| 132 | + |
| 133 | +## Staffing / Help Wanted |
| 134 | + |
| 135 | +### Industry outreach (Optional) |
| 136 | + |
| 137 | +We (Michele) tried to reach out to Canonical for help with .deb packaging, but while |
| 138 | +generally interested, they cannot pitch in on a short-enough notice to make the |
| 139 | +Kubecon timeline. |
| 140 | + |
| 141 | +### SIG |
| 142 | + |
| 143 | +[Github Repo](https://github.com/open-telemetry/opentelemetry-injector) |
| 144 | + |
| 145 | +[SIG Meeting](https://github.com/open-telemetry/community?tab=readme-ov-file#sig-injector) |
| 146 | + |
| 147 | +### Staffing |
| 148 | + |
| 149 | +Engineering is done by the [Injector Approvers and Maintainers](https://github.com/orgs/open-telemetry/teams/injector-approvers) |
| 150 | + |
| 151 | +### Sponsorship |
| 152 | + |
| 153 | +#### TC Sponsor |
| 154 | + |
| 155 | +@jack-berg (Grafana Labs) |
| 156 | + |
| 157 | +#### Delegated TC Sponsor (Optional) |
| 158 | + |
| 159 | +N/A |
| 160 | + |
| 161 | +#### GC Liaison |
| 162 | + |
| 163 | +@tedsuo (Grafana Labs) |
| 164 | + |
| 165 | +## Expected Timeline |
| 166 | + |
| 167 | +Our first deadline is November 10th, 2025, Observability Day co-located with |
| 168 | +KubeCon + CloudNativeCon North America 2025. |
| 169 | + |
| 170 | +We want to: |
| 171 | + |
| 172 | +* Cut the first release of the OpenTelemetry injector. |
| 173 | +* Demo a proof of concept of an `apt install opentelemetry` experience that works |
| 174 | + for Java and Node.js. |
| 175 | +* Propose a first draft of the packaging architecture outline describing how to |
| 176 | + structure modular .deb system packages so that end users can opt into |
| 177 | + vendor-provided distributions. |
| 178 | + |
| 179 | +## GitHub Project (Post-Approval) |
| 180 | + |
| 181 | +<https://github.com/open-telemetry/opentelemetry-injector> |
| 182 | + |
| 183 | +## SIG Meetings, Roadmap, and Other Info (Post-Approval) |
| 184 | + |
| 185 | +[SIG Meeting:](https://github.com/open-telemetry/community?tab=readme-ov-file#sig-injector) |
0 commit comments