Skip to content

Commit f11a162

Browse files
committed
Merge remote-tracking branch 'origin/main' into otelbot/semconv-integration-v1.39.0-dev
2 parents 0576b55 + 584c8e4 commit f11a162

File tree

4 files changed

+1520
-1349
lines changed

4 files changed

+1520
-1349
lines changed
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
---
2+
title: OpenTelemetry eBPF Instrumentation Marks the First Release
3+
linkTitle: OBI First Release
4+
date: 2025-11-03
5+
author: >-
6+
[Nikola Grcevski](https://github.com/grcevski) (Grafana Labs), [Tyler
7+
Yahn](https://github.com/MrAlias) (Splunk)
8+
issue: 8295
9+
sig: eBPF Instrumentation
10+
cSpell:ignore: Beyla Coralogix Grcevski Odigos uninstrumented Yahn
11+
---
12+
13+
Following a significant collaboration between Grafana Labs, Splunk, Coralogix,
14+
Odigos and many other community members, we are thrilled to announce the first
15+
alpha release of [OpenTelemetry eBPF
16+
Instrumentation][otel-ebpf-instrumentation], or OBI for short.
17+
18+
This event marks a significant milestone after the project, originally Grafana
19+
Beyla, was donated earlier this year by Grafana Labs. The development of eBPF
20+
instrumentation has significantly sped up after the project became managed under
21+
the OpenTelemetry umbrella. Many new protocols have been added, quality has
22+
improved - especially when deploying at scale, and tests are running 10 times
23+
faster. It’s a true testament to the value of the OpenTelemetry community.
24+
25+
## So what is OpenTelemetry eBPF Instrumentation and why should you care?
26+
27+
Unlike many other OpenTelemetry instrumentation approaches, OpenTelemetry eBPF
28+
instrumentation (OBI) runs out-of-process and instruments at the protocol level,
29+
rather than at the library level. It leverages the deep kernel integration,
30+
process isolation, runtime safety, and performance benefits of the eBPF
31+
technology.
32+
33+
Since OBI instruments at the protocol level, it means that you can essentially
34+
instrument all applications (all programming languages, all libraries) with zero
35+
effort, with a single command and you’ll always get a consistent picture. Let’s
36+
breakdown this previous statement a bit into what it actually means for the end
37+
user:
38+
39+
1. No restarts, no code changes, no application configuration changes! OBI alone
40+
provides fully automatic capture of metrics and traces. The beauty of eBPF is
41+
that you can drop something into a running environment and be certain it will
42+
not destabilize your system/cluster/application.
43+
2. No new application dependencies - no new security vulnerabilities. Since OBI
44+
runs out-of-process, we are not adding anything to your application. You
45+
don’t need to upgrade or add OpenTelemetry SDK dependencies, or patch your
46+
application if the OpenTelemetry SDK dependency that you have added has a
47+
vulnerability. You can separately secure the access to OBI on your system,
48+
and that won’t impact anything else you have installed.
49+
3. Your applications never get slower by adding telemetry. Since your
50+
application never has to add anything or do any work to export telemetry,
51+
your application performance is not impacted by the telemetry capture. OBI
52+
does most of the work at kernel level and it’s heavily optimized for
53+
performance. It has minimal CPU and memory footprint even at very high
54+
request rates.
55+
4. Your telemetry is always consistent across all programming languages and
56+
libraries. OBI will keep your telemetry at the latest stable OpenTelemetry
57+
spec, across all of your services, without you having to wrangle compliance.
58+
5. Wide range of supported protocol instrumentations, HTTP/HTTPS, HTTP/2, gRPC,
59+
SQL, Redis, MongoDB, Kafka, GraphQL, Elasticsearch/OpenSearch, AWS S3.
60+
Automatic trace context propagation for all programming languages.
61+
62+
## Should I just use OpenTelemetry eBPF Instrumentation for everything?
63+
64+
Yes and …
65+
66+
OpenTelemetry eBPF Instrumentation (OBI) is good for certain things, but becomes
67+
even better when combined with other OpenTelemetry technology. Let’s look at
68+
what this means in practice.
69+
70+
OpenTelemetry eBPF Instrumentation is a great tool to get started with
71+
OpenTelemetry. It can quickly get you basic signals like RED (Request Error
72+
Duration) metrics, service graphs, and traces for certain kinds of applications.
73+
However, since the data capture is done at the kernel level, certain levels of
74+
detail, which can be provided by other types of OpenTelemetry instrumentation,
75+
will not be there. Let’s look into detail what this means:
76+
77+
1. Give OBI a shot if you have no telemetry at all, or partial telemetry, it’s
78+
an easy way to get everything auto-instrumented (especially compiled
79+
binaries). OBI detects that an application is instrumented with another
80+
OpenTelemetry SDK and doesn’t duplicate signals. So it’s easy and safe to
81+
drop into a mix of instrumented and uninstrumented applications.
82+
2. Give OBI a shot if your application is using a library without OpenTelemetry
83+
support, for example a library that’s older than officially supported
84+
libraries, or a library that nobody has provided instrumentation for.
85+
3. Keep services you have successfully instrumented with the OpenTelemetry SDKs
86+
or agents. There’s rarely a reason to migrate off other types of
87+
OpenTelemetry instrumentations, unless you are experiencing significant
88+
performance or cost issues. In which case, OBI may be able to help.
89+
4. While OBI is an excellent tool for gathering metrics and service graphs, it
90+
doesn’t have good distributed tracing support for certain languages and
91+
technologies. For example, it currently doesn’t handle distributed tracing
92+
for reactive programming frameworks, Java virtual threads or complex thread
93+
pools. In general, OBI distributes traces work well for Go (HTTP and gRPC),
94+
Node.js (HTTP), Python (HTTP), NGINX (HTTP), PHP (HTTP/FPM), while for other
95+
programming languages support will vary a lot based on how your application
96+
internally manages threads and connections. We are looking for help with
97+
contributions to extend the distributed tracing support more broadly. The
98+
distributed tracing limitations are documented in the [Distributed Traces
99+
with OBI][distributed-traces] section of our docs.
100+
101+
## To summarize
102+
103+
We believe that observability should be a built-in capability of modern
104+
infrastructure, not a bolt-on cost center. OpenTelemetry eBPF Instrumentation
105+
lets you add essential telemetry capture to your environment with a single
106+
command line. There should be no more excuses why you are not using
107+
OpenTelemetry. No effort, no downtime, no code or configuration changes, every
108+
reason to give it a shot.
109+
110+
## Getting started with OpenTelemetry eBPF Instrumentation
111+
112+
Getting started with OpenTelemetry eBPF Instrumentation (OBI) is
113+
straightforward\! You can deploy it as standalone, as a Docker image or as a
114+
Kubernetes Daemonset (or pod sidecar). For detailed instructions on
115+
installation, configuration, and running your application with OBI, check out
116+
the [Getting Started guide][getting-started].
117+
118+
For complete examples on how to install OBI in docker environments you can check
119+
out our many [integration test examples][integration-examples], combining
120+
multiple programming languages, database backends and cloud services. There are
121+
also a number of Kubernetes examples in our Kubernetes [test
122+
repository][test-repository].
123+
124+
## Next steps
125+
126+
If you want to get in touch with us, suggest a feature we should be working on,
127+
or follow our work and be up to date with our releases, you can always find us
128+
on GitHub at the [OpenTelemetry eBPF Instrumentation repository][ebpf-repo]. We
129+
also run a regular and very active [Special Interest Group (SIG) Community
130+
Call][sigs] weekly, where you can join in and become part of our community. If
131+
you are unable to attend our community call, you can also easily find us
132+
asynchronously on the CNCF Community Slack channel
133+
[\#otel-ebpf-instrumentation][slack-ebpf].
134+
135+
## Acknowledgments
136+
137+
This alpha release is the result of countless hours of work by contributors from
138+
around the world. Thank you to everyone who has contributed code, documentation,
139+
feedback, and enthusiasm to make this milestone possible.
140+
141+
[otel-ebpf-instrumentation]:
142+
https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation
143+
[distributed-traces]: /docs/zero-code/obi/distributed-traces/
144+
[getting-started]: /docs/zero-code/obi/setup/
145+
[integration-examples]:
146+
https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/tree/main/internal/test/integration
147+
[test-repository]:
148+
https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/tree/main/internal/test/integration/k8s/manifests
149+
[ebpf-repo]:
150+
https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation
151+
[sigs]:
152+
https://github.com/open-telemetry/community?tab=readme-ov-file#sig-ebpf-instrumentation
153+
[slack-ebpf]: https://cloud-native.slack.com/archives/C08P9L4FPKJ

content/en/docs/collector/internal-telemetry.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ A more detailed list is available in the following sections.
293293
This section explains special naming conventions applied to some internal
294294
metrics.
295295

296-
#### `otelcol_` prefix
296+
#### `otelcol_` prefix {#otelcol-prefix}
297297

298298
As of Collector v0.106.1, internal metric names are handled differently based on
299299
their source:
@@ -307,7 +307,7 @@ Prometheus exporter, regardless of their origin, are prefixed with `otelcol_`.
307307
This includes metrics from both Collector components and instrumentation
308308
libraries.
309309

310-
#### `_total` suffix
310+
#### `_total` suffix {#total-suffix}
311311

312312
By default and unique to Prometheus, the Prometheus exporter adds a `_total`
313313
suffix to summation metrics to follow Prometheus naming conventions, such as
@@ -325,7 +325,7 @@ Internal metrics exported through OTLP do not have this behavior. The
325325
[internal metrics](#lists-of-internal-metrics) on this page are listed in OTLP
326326
format, such as `otelcol_exporter_send_failed_spans`.
327327

328-
#### Dots (`.`) v. underscores (`_`)
328+
#### Dots (`.`) v. underscores (`_`) {#dots-v-underscores}
329329

330330
`http*` and `rpc*` metrics come from instrumentation libraries. Their original
331331
names used dots (`.`). Prior to Collector v0.120.0, internal metrics exposed

data/community/members.yaml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2138,6 +2138,13 @@ approvers:
21382138
- ebpf-instrumentation-approvers
21392139
html_url: https://github.com/rafaelroquetto
21402140
avatar_url: https://avatars.githubusercontent.com/u/1713?v=4
2141+
- name: raphael-theriault-swi
2142+
teams:
2143+
- javascript-approvers
2144+
- javascript-contrib-triagers
2145+
- javascript-triagers
2146+
html_url: https://github.com/raphael-theriault-swi
2147+
avatar_url: https://avatars.githubusercontent.com/u/113933910?v=4
21412148
- name: RassK
21422149
teams:
21432150
- dotnet-instrumentation-approvers
@@ -2501,11 +2508,6 @@ triagers:
25012508
- javascript-contrib-triagers
25022509
html_url: https://github.com/punya
25032510
avatar_url: https://avatars.githubusercontent.com/u/277514?v=4
2504-
- name: raphael-theriault-swi
2505-
teams:
2506-
- javascript-contrib-triagers
2507-
html_url: https://github.com/raphael-theriault-swi
2508-
avatar_url: https://avatars.githubusercontent.com/u/113933910?v=4
25092511
- name: scbjans
25102512
teams:
25112513
- ruby-contrib-triagers

0 commit comments

Comments
 (0)