Skip to content

Commit c803c2e

Browse files
authored
Injector project file (#3097)
* v1 of Injector project file * cleanup * caps * less hyperbole
1 parent 77dc936 commit c803c2e

File tree

1 file changed

+185
-0
lines changed

1 file changed

+185
-0
lines changed

projects/injector.md

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
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

Comments
 (0)