Skip to content

Commit c7a8125

Browse files
MrAliasotelbot[bot]tiffany76theletterf
authored
docs(obi): update zero-code OBI docs for v0.8.0 (#9672)
Co-authored-by: otelbot <197425009+otelbot@users.noreply.github.com> Co-authored-by: Tiffany Hrabusa <30397949+tiffany76@users.noreply.github.com> Co-authored-by: Fabrizio Ferri-Benedetti <algernon@fastmail.com>
1 parent f7e03f2 commit c7a8125

8 files changed

Lines changed: 134 additions & 71 deletions

File tree

content/en/docs/zero-code/obi/_index.md

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ cascade:
99
OTEL_RESOURCE_ATTRIBUTES_APPLICATION: obi
1010
OTEL_RESOURCE_ATTRIBUTES_NAMESPACE: obi
1111
OTEL_RESOURCE_ATTRIBUTES_POD: obi
12-
cSpell:ignore: asyncio uvloop
1312
---
1413

1514
OpenTelemetry libraries provide telemetry collection for popular programming
@@ -40,11 +39,13 @@ OBI offers the following features:
4039
- **Visibility into encrypted communications**: Capture transactions over
4140
TLS/SSL without decryption
4241
- **Context propagation**: Propagate trace context across services automatically
43-
- **Protocol support**: HTTP/S, gRPC, gRPC-Web, MQTT, Memcached, and more
42+
- **Protocol support**: HTTP/S, gRPC, gRPC-Web, JSON-RPC, MQTT, Memcached, and
43+
more
4444
- **Database instrumentation**: PostgreSQL (including pgx driver), MySQL,
4545
MongoDB, Redis, Couchbase (N1QL/SQL++ and KV protocol)
46-
- **GenAI instrumentation**: Trace and metrics for OpenAI and Anthropic Claude
47-
API calls with automatic payload extraction
46+
- **GenAI instrumentation**: Trace and metrics for OpenAI, Anthropic Claude,
47+
Google AI Studio (Gemini), and AWS Bedrock API calls with automatic payload
48+
extraction
4849
- **Low cardinality metrics**: Prometheus-compatible metrics with low
4950
cardinality for cost reduction
5051
- **Network observability**: Capture network flows between services with
@@ -54,36 +55,32 @@ OBI offers the following features:
5455
- **Collector integration**: Run OBI as an OpenTelemetry Collector receiver
5556
component
5657

57-
## Recent highlights (v0.7.0)
58-
59-
OBI v0.7.0 introduces several significant improvements:
60-
61-
- **StatsO11y**: New statistical metrics pipeline for host-level network
62-
statistics, starting with TCP RTT metrics
63-
- **Expanded protocol coverage**: Added Memcached protocol tracing support
64-
- **Enhanced GenAI instrumentation**: Added support for Anthropic Claude with
65-
automatic payload extraction
66-
- **Python asyncio improvements**: Added context propagation support for Python
67-
asyncio workloads using `uvloop`
68-
- **New example scenario**: Added an NGINX example covering direct routing,
69-
reverse proxying, and route-based telemetry across Docker, Kubernetes, and
70-
standalone deployments
71-
- **Prometheus exemplars**: Support for exemplars in metrics export for better
72-
correlation with traces
73-
- **New span types**: SQL instrumentation now emits server spans for database
74-
calls
75-
- **Operational controls**: Added configurable `log_format` and Kubernetes API
76-
reconnect interval settings
77-
- **Network diagnostics**: Added `obi_bpf_network_ignored_packets_total` for
78-
troubleshooting dropped network packets
79-
- **Release artifacts**: CycloneDX SBOMs now included in release packages for
80-
supply chain security
58+
## Recent highlights (v0.8.0)
59+
60+
OBI v0.8.0 expands protocol coverage, payload extraction, and deployment
61+
documentation:
62+
63+
- **Generic Go tracing improvements**: Added generic Go protocol support,
64+
including context propagation for generic requests
65+
- **Expanded protocol coverage**: Added JSON-RPC support across all languages
66+
- **Deeper HTTP payload extraction**: Added full HTTP body extraction, with
67+
bounded decompression for response bodies
68+
- **Broader GenAI coverage**: Added Google AI Studio (Gemini) and AWS Bedrock
69+
payload extraction, and fixed Vertex AI Gemini support
70+
- **Named CIDR labels**: Network metrics can now label configured CIDR ranges
71+
with human-readable names
72+
- **New example scenario**: Added an Apache HTTP Server example alongside the
73+
existing NGINX walkthroughs
74+
- **Support documentation**: Added a project support matrix for release
75+
artifacts and supported environments
8176

8277
For a complete list of changes and upgrade notes, see the
83-
[release notes](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.7.0).
78+
[release notes](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.8.0).
8479

85-
If you want to explore the new NGINX example, see the
86-
[example walkthrough](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/tree/v0.7.0/examples/nginx).
80+
If you want to explore the upstream examples, see the
81+
[NGINX walkthrough](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/tree/v0.8.0/examples/nginx)
82+
and the
83+
[Apache walkthrough](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/tree/v0.8.0/examples/apache).
8784

8885
## How OBI works
8986

content/en/docs/zero-code/obi/configure/export-data.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ The list of instrumentation areas OBI can collect data from:
244244
- `mqtt`: MQTT publish/subscribe message metrics (MQTT 3.1.1 and 5.0)
245245
- `couchbase`: Couchbase N1QL/SQL++ query metrics and KV (Key-Value) protocol
246246
metrics based on memcached protocol
247-
- `genai`: GenAI client metrics (OpenAI and Anthropic)
247+
- `genai`: GenAI client metrics (OpenAI, Anthropic, Gemini, and AWS Bedrock)
248248
- `gpu`: GPU performance metrics
249249
- `mongo`: MongoDB client call metrics
250250
- `dns`: DNS query metrics
@@ -304,7 +304,7 @@ The list of instrumentation areas OBI can collect data from:
304304
- `mqtt`: MQTT publish/subscribe message traces (MQTT 3.1.1 and 5.0)
305305
- `couchbase`: Couchbase N1QL/SQL++ query traces and KV (Key-Value) protocol
306306
traces, with query text and operation details
307-
- `genai`: GenAI client traces (OpenAI and Anthropic)
307+
- `genai`: GenAI client traces (OpenAI, Anthropic, Gemini, and AWS Bedrock)
308308
- `gpu`: GPU performance traces
309309
- `mongo`: MongoDB client call traces
310310
- `dns`: DNS query traces
@@ -558,7 +558,7 @@ The list of instrumentation areas OBI can collection data from:
558558
- `kafka`: Kafka client/server message queue metrics
559559
- `mqtt`: MQTT publish/subscribe message metrics
560560
- `couchbase`: Couchbase N1QL/SQL++ query metrics and KV protocol metrics
561-
- `genai`: GenAI client metrics (OpenAI and Anthropic)
561+
- `genai`: GenAI client metrics (OpenAI, Anthropic, Gemini, and AWS Bedrock)
562562

563563
For example, setting the `instrumentations` option to: `http,grpc` enables the
564564
collection of `HTTP/HTTPS/HTTP2` and `gRPC` application metrics, and disables

content/en/docs/zero-code/obi/configure/metrics-traces-attributes.md

Lines changed: 59 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,10 @@ YAML section: `ebpf`
8282
You can configure the component under the `ebpf` section of your YAML
8383
configuration or via environment variables.
8484

85-
| YAML<br>environment variable | Description | Type | Default |
86-
| ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- |
87-
| `context_propagation`<br>`OTEL_EBPF_BPF_CONTEXT_PROPAGATION` | Controls trace context propagation method. Accepted: `all`, `headers`, `ip`, `disabled`. For more information, refer to the [context propagation section](#context-propagation). | string | disabled |
88-
| `track_request_headers`<br>`OTEL_EBPF_BPF_TRACK_REQUEST_HEADERS` | Track incoming `Traceparent` headers for trace spans. For more information, refer to the [track request headers section](#track-request-headers). | boolean | false |
85+
| YAML<br>environment variable | Description | Type | Default |
86+
| ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- |
87+
| `context_propagation`<br>`OTEL_EBPF_BPF_CONTEXT_PROPAGATION` | Controls trace context propagation method. Accepted: `all`, `headers`, `tcp`, `headers,tcp`, `disabled`. For more information, refer to the [context propagation section](#context-propagation). | string | disabled |
88+
| `track_request_headers`<br>`OTEL_EBPF_BPF_TRACK_REQUEST_HEADERS` | Track incoming `Traceparent` headers for trace spans. For more information, refer to the [track request headers section](#track-request-headers). | boolean | false |
8989

9090
### Context propagation
9191

@@ -102,17 +102,21 @@ that also use TC must chain correctly with OBI. For more information about
102102
chaining programs, see the
103103
[Cilium compatibility documentation](../../cilium-compatibility/).
104104

105-
You can disable the TCP/IP level encoding and TC programs by setting
106-
`context_propagation="headers"`. This context propagation is fully compatible
107-
with any OpenTelemetry distributed tracing library.
105+
You can disable the TCP-level propagation and Linux Traffic Control programs by
106+
setting `context_propagation="headers"`. This mode is fully compatible with any
107+
OpenTelemetry distributed tracing library.
108108

109109
Context propagation values:
110110

111-
- `all`: Enable both HTTP and IP options context propagation
111+
- `all`: Enable both HTTP header and TCP context propagation
112112
- `headers`: Enable context propagation via the HTTP headers only
113-
- `ip`: Enable context propagation via the IP options field only
113+
- `tcp`: Enable context propagation via the TCP packet path only
114+
- `headers,tcp`: Enable both methods explicitly
114115
- `disabled`: Disable trace context propagation
115116

117+
`http` is accepted as an alias for `headers`, but `headers` is the preferred
118+
name in examples and configuration.
119+
116120
To use this option in containerized environments (Kubernetes and Docker), you
117121
must:
118122

@@ -121,7 +125,7 @@ must:
121125
path
122126
- Grant the `CAP_NET_ADMIN` capability to the OBI container
123127

124-
gRPC and HTTP/2 are not supported.
128+
gRPC and HTTP/2 are not supported for this network-level mode.
125129

126130
For an example of how to configure distributed traces in Kubernetes, see our
127131
[Distributed traces with OBI](../../distributed-traces/) guide.
@@ -154,22 +158,24 @@ because it can create false positives, for example, if an application sends SQL
154158
text for logging through a TCP connection. Currently, OBI natively supports the
155159
PostgreSQL and MySQL binary protocols.
156160

157-
### HTTP header enrichment for spans
161+
### HTTP header and body enrichment for spans {#http-header-enrichment-for-spans}
162+
163+
### HTTP header and body enrichment for spans
158164

159-
OBI can attach selected HTTP headers to spans through the
160-
`ebpf.payload_extraction.http.enrichment` configuration section. This is useful
161-
when you want to carry business or routing headers into traces without manually
162-
instrumenting the application.
165+
OBI can attach selected HTTP headers and selected HTTP body fields to spans
166+
through the `ebpf.payload_extraction.http.enrichment` configuration section.
167+
This is useful when you want to carry business or routing headers into traces
168+
without manually instrumenting the application.
163169

164170
The enrichment engine is rule-based:
165171

166-
- Set `enabled: true` to activate HTTP header enrichment.
167-
- Use `policy.default_action` to define whether unmatched headers are included
168-
or excluded. The default is `exclude`.
169-
- Use `policy.match_order` to control rule evaluation. The default is
170-
`first_match_wins`.
171-
- Use `obfuscate` rules to redact sensitive values while still exposing the
172-
header key on the span.
172+
- Set `enabled: true` to activate HTTP header and body enrichment.
173+
- Use `policy.default_action.headers` and `policy.default_action.body` in YAML
174+
to define whether unmatched headers or body content are included or excluded.
175+
The default for both is `exclude`.
176+
- Use `obfuscate` rules to redact sensitive header values or JSON body fields
177+
before they are attached to spans.
178+
- Rules are evaluated in order.
173179

174180
For example:
175181

@@ -182,8 +188,9 @@ ebpf:
182188
enrichment:
183189
enabled: true
184190
policy:
185-
default_action: exclude
186-
match_order: first_match_wins
191+
default_action:
192+
headers: exclude
193+
body: exclude
187194
obfuscation_string: '***'
188195
rules:
189196
- action: obfuscate
@@ -202,17 +209,40 @@ ebpf:
202209
- X-Custom-*
203210
- X-Dice-Roll
204211
case_sensitive: false
212+
- action: include
213+
type: body
214+
scope: request
215+
match:
216+
methods: [POST]
217+
url_path_patterns:
218+
- /v1/chat/completions
219+
- action: obfuscate
220+
type: body
221+
scope: request
222+
match:
223+
methods: [POST]
224+
url_path_patterns:
225+
- /v1/chat/completions
226+
obfuscation_json_paths:
227+
- $.messages[*].content
205228
```
206229

207-
The following environment variables control the policy defaults:
230+
The following environment variables control the global enrichment behavior:
208231

209232
- `OTEL_EBPF_HTTP_ENRICHMENT_ENABLED`
210-
- `OTEL_EBPF_HTTP_ENRICHMENT_DEFAULT_ACTION`
211-
- `OTEL_EBPF_HTTP_ENRICHMENT_MATCH_ORDER`
212233
- `OTEL_EBPF_HTTP_ENRICHMENT_OBFUSCATION_STRING`
213234

214-
Rules themselves are configured in YAML. If you expect large headers, increase
215-
`ebpf.buffer_sizes.http` so OBI can capture the relevant values.
235+
The `policy.default_action.headers` and `policy.default_action.body` settings
236+
are configured in YAML only; there are no environment variables for these
237+
defaults.
238+
239+
Rules themselves are configured in YAML. Header rules use `match.patterns` and
240+
optional `case_sensitive`. Body rules use `match.url_path_patterns`,
241+
`match.methods`, and `match.obfuscation_json_paths`.
242+
243+
Body extraction requires HTTP payload capture. Increase `ebpf.buffer_sizes.http`
244+
so OBI can capture the request or response bytes you want to enrich. The limit
245+
applies independently to requests and responses.
216246

217247
## Instance ID decoration
218248

content/en/docs/zero-code/obi/distributed-traces.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ from OpenTelemetry SDK instrumented services still works.
9393
9494
gRPC and HTTP/2 are not supported at network level.
9595
96+
If you need finer control, `context_propagation` also accepts `headers`, `tcp`,
97+
and `headers,tcp`. `http` is accepted as an alias for `headers`.
98+
9699
This type of context propagation works for any programming language and doesn't
97100
require that OBI runs in `privileged` mode or has `CAP_SYS_ADMIN` granted. For
98101
more details, see the

content/en/docs/zero-code/obi/network/config.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ socket filter to capture the network events. This mode doesn't conflict with
8080
Cilium CNI or other eBPF programs, which use the Linux Traffic Control egress
8181
and ingress filters.
8282

83-
| YAML | Environment variable | Type | Default |
84-
| ------- | ------------------------- | -------- | ------- |
85-
| `cidrs` | `OTEL_EBPF_NETWORK_CIDRS` | []string | (empty) |
83+
| YAML | Environment variable | Type | Default |
84+
| ------- | ------------------------- | -------------------- | ------- |
85+
| `cidrs` | `OTEL_EBPF_NETWORK_CIDRS` | list of CIDR strings | (empty) |
8686

8787
CIDRs list, to be set as the `src.cidr` and `dst.cidr` attribute with the entry
8888
that matches the `src.address` and `dst.address` respectively.
@@ -93,8 +93,17 @@ address matches multiple CIDR definitions, the flow is decorated with the
9393
narrowest CIDR. As a result, you can safely add a `0.0.0.0/0` entry to group all
9494
the traffic that does not match any of the other CIDRs.
9595

96-
If you set this property via environment variable each entry must be separated
97-
by a comma, for example:
96+
In YAML, each entry can be either a plain CIDR string or an object with `cidr`
97+
and `name` fields. The `OTEL_EBPF_NETWORK_CIDRS` environment variable accepts a
98+
comma-separated list of CIDR strings only. For example:
99+
100+
```yaml
101+
network:
102+
cidrs:
103+
- cidr: 10.0.0.0/8
104+
name: cluster-internal
105+
- 192.168.0.0/16
106+
```
98107

99108
```sh
100109
OTEL_EBPF_NETWORK_CIDRS=10.0.0.0/8,192.168.0.0/16

content/en/docs/zero-code/obi/setup/docker.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ You can verify the signature of the container image using the following
4444
commands:
4545

4646
```sh
47-
export VERSION=v0.7.0
47+
export VERSION=v0.8.0
4848

4949
# Verify a release image from Docker Hub
5050
cosign verify --certificate-identity-regexp 'https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/' --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' otel/ebpf-instrument:${VERSION}
@@ -80,7 +80,7 @@ don't have one, you can use this
8080
[simple blog engine service written in Go](https://macias.info):
8181

8282
```sh
83-
export VERSION=v0.7.0
83+
export VERSION=v0.8.0
8484
docker run -p 18443:8443 --name goblog mariomac/goblog:dev
8585
```
8686

content/en/docs/zero-code/obi/trace-log-correlation.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ weight: 35
55
description:
66
Learn how OBI correlates application logs with distributed traces for faster
77
debugging and troubleshooting.
8-
cSpell:ignore: BPFFS ringbuffer
8+
cSpell:ignore: BPFFS PYTHONUNBUFFERED ringbuffer
99
---
1010

1111
OpenTelemetry eBPF Instrumentation (OBI) correlates application logs with
@@ -119,6 +119,18 @@ and `span_id` fields into JSON log objects:
119119
Plain text logs are passed through unchanged and are **not enriched** with trace
120120
context.
121121

122+
#### Runtime buffering limitations
123+
124+
The log enricher only sees trace context when the log write happens on the
125+
request-handling thread. Runtimes that buffer stdout asynchronously can break
126+
this assumption.
127+
128+
- Python in Docker commonly needs `PYTHONUNBUFFERED=1`
129+
- .NET `Console.Out` is buffered by default when stdout is a pipe; use a
130+
`StreamWriter` with `AutoFlush = true`
131+
- ASP.NET Core's default `Microsoft.Extensions.Logging.AddConsole()` pipeline is
132+
not compatible because it writes from a background thread
133+
122134
### 2. Trace export and log enrichment enabled
123135

124136
Traces must be exported and log enrichment enabled:

static/refcache.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11427,6 +11427,10 @@
1142711427
"StatusCode": 206,
1142811428
"LastSeen": "2026-04-22T15:36:27.77476708Z"
1142911429
},
11430+
"https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.8.0": {
11431+
"StatusCode": 206,
11432+
"LastSeen": "2026-04-17T18:11:47.603377278Z"
11433+
},
1143011434
"https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/tree/2feaeb84ef7aeeb1e57e642b46c96b965ae4b804/internal/test/integration/k8s/manifests?from_branch=main": {
1143111435
"StatusCode": 206,
1143211436
"LastSeen": "2026-04-22T22:57:11.825746927Z"
@@ -11443,6 +11447,14 @@
1144311447
"StatusCode": 206,
1144411448
"LastSeen": "2026-04-22T15:36:34.212717598Z"
1144511449
},
11450+
"https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/tree/v0.8.0/examples/apache": {
11451+
"StatusCode": 206,
11452+
"LastSeen": "2026-04-17T18:11:56.141549709Z"
11453+
},
11454+
"https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/tree/v0.8.0/examples/nginx": {
11455+
"StatusCode": 206,
11456+
"LastSeen": "2026-04-17T18:11:52.877605927Z"
11457+
},
1144611458
"https://github.com/open-telemetry/opentelemetry-ebpf-profiler": {
1144711459
"StatusCode": 206,
1144811460
"LastSeen": "2026-04-22T15:36:39.76904355Z"

0 commit comments

Comments
 (0)