---
title: OBI changelog
description: Version-by-version behavior changes to the OpenTelemetry eBPF Instrumentation (OBI) agent, and how they affect existing dashboards, queries, and span filters.
url: https://coralogix.com/docs/user-guides/release-notes/obi/
product: apm
feature: eBPF Agent
feature_id: apm-ebpf-agent
feature_identifier: apm/apm-ebpf-agent
last_updated: '2026-11-05'
---

# OBI changelog

Behavior changes in each OBI ([OpenTelemetry eBPF Instrumentation](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation)) release that may affect existing dashboards, queries, span filters, and log parsers. Review the relevant version before upgrading. For current behavior, see the [OBI overview](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/overview.md) and [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md).

Oct 30, 2026

OBI v1.0.0

v1.0.0 is OBI's first stable release. It promotes the v0.15.2 instrumentation unchanged (no additional metrics, attributes, or feature flags) and establishes a compatibility contract for the v1 line.

* **Stable surfaces.** The v1 contract covers the public Go API of `go.opentelemetry.io/obi`, Config v2 and its schema, documented CLI flags and environment variables, container and binary behavior, and the telemetry classified as stable (its OTLP and Prometheus forms). Within v1, minor releases add only backward-compatible changes and incompatible changes require a new major version. Telemetry classified as development, alpha, beta, or release candidate stays outside the contract, and network-flow attribute names remain excluded pending semantic-convention alignment.
* **Configuration v2 is the v1 configuration contract.** Configuration v1 remains supported but is frozen and receives no fixes or feature work. Use `obi config validate` and `obi config migrate` to move to v2, and canary before rollout.
* **The telemetry schema advances to `1.0.0`** (from `0.15.2`), keeping the existing transformation history without additional renames.
* **The Collector receiver stays on its own v0 release line.** v1.0.0 tags only the core module; the receiver remains `go.opentelemetry.io/obi/collector` at `collector/v0.15.2`. Pair them explicitly: `go get go.opentelemetry.io/obi/collector@v0.15.2 go.opentelemetry.io/obi@v1.0.0`. See [OBI as an OpenTelemetry Collector receiver](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/collector-receiver.md).
* **Known limitations.** Application metrics can intermittently stay absent after a Pod starts or restarts until OBI is restarted; child spans can occasionally start before their parents; and port-based service discovery can select a helper or port-forwarder instead of the workload, so use executable-path, container, or Kubernetes selectors when several processes share a port.

The Coralogix `otel-integration` Helm chart ships OBI v1.0.0 starting with chart version 0.0.375.

If you are upgrading from before v0.15.2, review the v0.15.2 changes below first: span names, `rpc.method` values, and several default metric attributes changed.

[Full release notes for OBI v1.0.0](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v1.0.0).

Oct 16, 2026

OBI v0.15.2

v0.15.2 supersedes the unpublished v0.15.0 and v0.15.1 releases and carries their changes. It is dominated by span-name changes that align OBI with the OpenTelemetry semantic conventions, and it is the instrumentation that v1.0.0 promotes to stable.

* **Span names across many protocols now follow the OpenTelemetry semantic conventions, which recreates span-metric series.** Span names feed the `span_name` label on span metrics (`traces_span_metrics_*` and the legacy `traces_spanmetrics_*`), so these renames recreate the affected series. The ones most likely to affect existing queries: gRPC span names and `rpc.method` drop the leading slash (an unreadable path falls back to the span name `grpc` and method `_OTHER`, with the raw value kept in `rpc.method_original`); Redis span names no longer include the database namespace; AWS span names use `S3.`, `SQS.`, and `SNS.` prefixes; GraphQL server span names drop the `GraphQL` prefix; and GenAI client span names use the operation and request model, with Anthropic's `message` operation becoming `chat`. Database and ONC RPC span names also shift. Update dashboards, span filters, and queries that match old span names or `rpc.method` values; the gRPC and ONC RPC `rpc.method` changes also recreate the `rpc.client.duration` and `rpc.server.duration` series.
* **Three metric attributes become default, recreating their Prometheus series.** Database duration metrics (client and server) now carry `db.collection.name`, gRPC client duration carries `server.port`, and failed gRPC server duration carries `error.type`. Each adds a Prometheus label (`db_collection_name`, `server_port`, `error_type`), so the affected series are recreated. For Elasticsearch and OpenSearch, `db.collection.name` can raise cardinality, exclude it through `attributes->select` if needed. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md#span-attributes).
* **Configuration v2 protocol metric selection now covers span metrics and service graphs.** Setting a protocol's `enabled.metrics: false` suppresses that protocol's span metrics and service graphs in both the OTLP and Prometheus outputs, not just its application metrics. The `obi config migrate` CLI reports any coverage it can't preserve when converting a Configuration v1 file; Configuration v1 behavior is unchanged.
* **HTTP client `server.address` drops the Host-header port.** `server.port` and `url.full` keep it. Kubernetes Service hosts that include a port now resolve to the service and namespace, which can change peer and service-graph names.
* **Messaging attribute changes for MQTT and AMQP.** MQTT SUBSCRIBE spans and process metrics use `messaging.destination.subscription.name` for the topic filter instead of the destination name, and shared subscriptions also emit `messaging.consumer.group.name`. AMQP OTLP metrics omit empty destinations and add a default `messaging.operation.type`. These add or shift messaging metric labels.
* **GraphQL, MCP, and JSON-RPC server spans drop their HTTP attributes** (method, status code, route, URL, body size, user agent, and `obi.http.response.observed`), keeping the protocol, address, network, and error attributes. Captured HTTP headers are now limited to plain HTTP and GraphQL spans. AWS SNS spans drop `rpc.system.name` and `rpc.method`, keeping their `SNS.` span names and `cloud.region`.
* **Added metrics and instrumentation.** .NET CPU (`dotnet.process.cpu.count`, `dotnet.process.cpu.time`) and last-collection heap size (`dotnet.gc.last_collection.heap.size`) runtime metrics; expanded .NET and Rails route harvesting; an opt-in `url.template` attribute on HTTP client spans; opt-in AWS Route53 resolution of peer names from hosted-zone records; and internal ring-buffer write counters (`obi.bpf.ringbuf.writes`, `obi.bpf.ringbuf.write.failures`) in the opt-in eBPF metrics family. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md#application-metrics).
* **Reliability and security fixes.** OBI no longer injects trace context into sockets misclassified as HTTP/2, OTLP traces are encoded as JSON when the protocol is `http/json`, distinct metric label tuples no longer collide, duplicate `target.info` counts are fixed when a process moves to an existing service, and the Collector receiver keeps running after its start context ends. Security updates bump `go.opentelemetry.io/otel/sdk` to v1.45.0, `golang.org/x/crypto` to v0.52.0, `golang.org/x/net` to v0.55.0, and `go-git` to v5.19.2.
* **Go Trace API auto-instrumentation gains an embedded Auto SDK path.** OBI can now activate the Auto SDK embedded in `go.opentelemetry.io/otel/trace` without the separate `go.opentelemetry.io/auto/sdk` module. See [Go Trace API auto-instrumentation](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/overview.md#go-trace-api-auto-instrumentation).
* **The Collector receiver ships as a separate Go module.** It is now `go.opentelemetry.io/obi/collector`, with its own release line, and keeps the existing import path. Collector build manifests must require that module. See [OBI as an OpenTelemetry Collector receiver](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/collector-receiver.md).

[Full release notes for OBI v0.15.2](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.15.2).

Oct 2, 2026

OBI v0.14.0

* **Several span attributes are now opt-in.** `service.peer.name`, `http.request.body.size`, `http.response.body.size`, and `obi.http.response.observed` are no longer emitted by default. Select the ones you need through `attributes->select->traces->include`. Service-graph generation that relies on `service.peer.name` must select it explicitly. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md#span-attributes).
* **HTTP metrics carry `error.type` on failed requests.** HTTP duration and body-size metrics now add `error.type` by default when a request fails, so the corresponding Prometheus series gain an `error_type` label (empty for successful requests). This recreates the existing series, so update dashboards, alerts, and recording rules that aggregate them.
* **HTTP body-size histograms are now opt-in behind `application_sizes`.** The `application` metrics feature still includes them, but `application_red` does not. Add `application_sizes` (or keep `application`) if you need `http.*.body.size`.
* **`host.id` leaves the span-metric data points.** The value is unchanged on the resource, so `target_info` still carries `host_id`. Consumers that flatten OTLP span metrics to Prometheus and key on a per-series `host_id` should read it from `target_info` instead; OBI's own Prometheus exporter is unaffected.
* **Empty-valued span attributes are omitted** instead of emitted as empty strings. Update span filters and queries that match empty-string values. Manual span attributes, resource attributes, and metric labels keep their existing behavior.
* **External trace-to-profile correlation is now opt-in.** The pinned `traces_ctx_v1` map is no longer populated by default. Set `ebpf.populate_trace_context: true` (env `OTEL_EBPF_BPF_POPULATE_TRACE_CONTEXT=true`) if you correlate traces with external profiles or relied on the Go channel span-link fallback. The log enricher and the Node.js manual-span bridge enable it automatically, so trace-log correlation is unaffected.
* **Elastic Cloud database metrics split by cluster.** Elastic Cloud client spans and database-operation metrics now carry `db.namespace` from the `X-Found-Handling-Cluster` header, so existing series split per cluster. AWS SQS spans no longer carry `aws.extended_request_id`.
* **Added runtime and protocol metrics.** A full .NET runtime metrics family (requires .NET 8+), a JVM `jvm.gc.duration` histogram, the Node.js `v8js.resource.active` gauge, MCP operation and session duration histograms, GPU/CUDA metrics, and an `obi.stat.tcp.successful.connections` counter. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md#application-metrics).
* **Broader instrumentation coverage.** Adds AWS SNS instrumentation, HTTP route harvesting for Java (now enabled by default on Linux), Django, FastAPI, Flask, Rails, .NET, Symfony, Laravel, and Slim, generic Python `asyncio` server context propagation, and uprobe/kprobe attachment without `CAP_SYS_ADMIN` on kernels between 5.14 and 6.6 (memory-level Go context propagation still requires `CAP_SYS_ADMIN`).

[Full release notes for OBI v0.14.0](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.14.0).

Sep 4, 2026

OBI v0.13.0

* **`service.name` and `service.namespace` are no longer default metric labels.** They remain resource attributes, available through `target_info` and the OTLP resource, but they no longer decorate metric series by default. Dashboards, queries, and alerts that group or filter metrics by `service.name` or `service.namespace` must now select them explicitly through the `attributes->select` configuration. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md#attribute-selection-for-obi-metrics).
* **`error.type` values are unified across spans and metrics.** The attribute name is unchanged, but its values are now consistent between spans and metrics. Queries and span filters that match specific `error.type` values may need updating.
* **Python, JVM, and Node.js runtime metrics are expanded.** With the `application_runtime` feature enabled, Python services export CPython garbage-collection metrics, JVM services add class, thread, and CPU metrics alongside the existing memory metrics, and Node.js services add V8 garbage-collection and heap-space metrics. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md#application-metrics).
* **Database and messaging metrics carry additional attributes.** Database duration metrics gain `db.namespace`, `db.response.status_code`, and `server.port`; messaging spans gain `messaging.operation.name`.
* **Context-propagation and protocol reliability fixes.** A group of memory-safety fixes stops the HTTP header injector from writing a `traceparent` into an unrelated TLS stream (which could reset the connection), bounds message-buffer reads so unrelated kernel memory cannot appear in span payloads, and invalidates stale message buffers. Application-supplied `traceparent` headers are preserved in Go HTTP/2, TCP client and server roles are classified by the local port (fixing swapped `network.tcp.handshake.role` values for same-namespace clients), established idle connections are no longer counted in `obi.stat.tcp.failed.connections`, and DNS spans follow the OpenTelemetry conventions with IPv6 reverse-DNS support.

[Full release notes for OBI v0.13.0](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.13.0).

Aug 22, 2026

OBI v0.12.2

* **Log enrichment is limited to standard output and standard error.** Earlier versions intercepted every pipe write from an instrumented process, which could blank out shell command substitutions and, in some cases, stall shells. OBI now enriches (and suppresses the original of) only writes to a tracked process's standard output or standard error; any other pipe (a command substitution, application IPC, or a pipe on another file descriptor) passes through untouched. See [Trace-log correlation](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/trace-log-correlation.md).
* **`application_span` and `application_span_sizes` span-metric features are deprecated.** They keep working and still emit the Grafana-convention `traces_spanmetrics_*` metrics, but OBI logs a deprecation warning at startup. Move to `application_span_otel`, which emits the OpenTelemetry-convention `traces_span_metrics_*` metrics. `application_span_sizes` has no direct replacement. The closest metrics are `http.server.request.body.size` and `http.server.response.body.size`. Enabling a legacy span-metric feature together with `application_span_otel` is rejected, and the `*` (all) selector keeps only the OTel version. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md).
* **Reliability and accuracy fixes.** HTTP/2 headers are decoded in capture order, preventing HPACK dynamic-table drift from attaching the wrong header values to a span; TLS connections that use in-memory BIOs are correlated again; and Aerospike responses that span multiple TCP reads can be reassembled, if you see missed or truncated Aerospike spans, raise the capture buffer with `ebpf.buffer_sizes.aerospike`.

[Full release notes for OBI v0.12.2](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.12.2).

Aug 20, 2026

OBI v0.12.1

OBI v0.12.0 was never published, v0.12.1 supersedes it and carries its changes.

* **Server-side database operations report `db.server.operation.duration`.** Redis, Memcached, and SQL measured on the server side now record `db.server.operation.duration` (`db_server_operation_duration_seconds` in Prometheus) instead of `db.client.operation.duration`. Update dashboards and alerts that read server-side database latency from the client metric. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md#application-metrics).
* **Four internal eBPF metrics dropped an incorrect counter suffix.** In OTLP, `obi.bpf.map.entries_total`, `obi.bpf.map.max_entries_total`, `obi.bpf.network.packets.total`, and `obi.bpf.network.ignored.packets.total` become `obi.bpf.map.entries`, `obi.bpf.map.max_entries`, `obi.bpf.network.packets`, and `obi.bpf.network.ignored.packets`. In Prometheus, the two map gauges lose the `_total` suffix (`obi_bpf_map_entries`, `obi_bpf_map_max_entries`); the packet counters keep it. These belong to the opt-in eBPF metrics family. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md#internal-obi-metrics).
* **Node.js event-loop runtime metrics.** With the `application_runtime` feature enabled, Node.js services export event-loop utilization, delay statistics (min, max, mean, standard deviation, and percentiles), and busy/idle time. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md#application-metrics).
* **Node.js manual spans can be captured without an SDK.** When a Node.js process creates spans through `@opentelemetry/api` but registers no OpenTelemetry SDK, set `nodejs.manual_spans: true` (env `OTEL_EBPF_NODEJS_MANUAL_SPANS`) to export them. It stays inactive when an SDK is already present.
* **Java service-name discovery follows the OpenTelemetry Java conventions.** For a Java process without an explicit service name, OBI derives one from the Spring Boot application name, then the JAR manifest `Implementation-Title`, then the JAR file name, before falling back to `java`.

[Full release notes for OBI v0.12.1](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.12.1).

Aug 17, 2026

OBI v0.11.0

* **Plain-text log enrichment is enabled by default.** Every service selected by the log enricher now receives space-separated `trace_id=… span_id=…` fields on non-JSON writes, which previously passed through unchanged. This can break downstream parsers for structured non-JSON log formats. To keep the previous behavior, set `ebpf.log_enricher.plain_text.enabled: false` before upgrading. JSON enrichment is unaffected. In Configuration v2 the same setting is `extensions.obi.correlation.log_trace_annotation.plain_text.enabled`. See [Trace-log correlation](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/trace-log-correlation.md).
* **Direct OTLP consumers receive OpenTelemetry dot-notation metric names.** `target_info` is now `target.info`, `traces_target_info` is now `traces.target.info`, `traces_host_info` is now `traces.host.info`, `traces_span_metrics_calls_total` is now `traces.span.metrics.calls`, and `traces_span_metrics_duration` is now `traces.span.metrics.duration`. Consumers that scrape through a collector's Prometheus exporter are unaffected, because it maps the dots back to underscores.
* **Prometheus metric names are now derived from their OTLP definitions**, which corrected several of them. `obi_stat_tcp_retransmits` is now `obi_stat_tcp_retransmits_total` and `obi_stat_tcp_failed_connections` is now `obi_stat_tcp_failed_connections_total`; the CUDA GPU metrics lost an incorrect suffix, so `gpu_cuda_kernel_grid_size_total` is now `gpu_cuda_kernel_grid_size`, `gpu_cuda_kernel_block_size_total` is now `gpu_cuda_kernel_block_size`, and `gpu_cuda_memory_copies_bytes_total` is now `gpu_cuda_memory_copies_bytes`. Update Prometheus queries, dashboards, and alerts that key on the old names. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md).
* **JVM runtime metrics moved to the shared `application_runtime` feature.** The deprecated `application_jvm` feature alias and the `jvm_runtime_metrics.enabled` flag were both removed. Enable JVM and Go runtime metrics through `application_runtime` instead. The OBI-specific `obi.jvm.heap.used` metric (`obi_jvm_heap_used_bytes` in Prometheus) was dropped; read heap usage from `jvm.memory.used` filtered on `jvm.memory.type=heap`. See [Exported metrics](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/exported-metrics.md).
* **Configuration v2 is available for standalone OBI and the OBI Collector receiver, and Configuration v1 remains supported.** `obi config validate` and `obi config migrate` check and convert existing configurations, failing closed on settings they can't preserve. Native Configuration v2 authoring uses a default-on capture policy: omitting `capture.policy.default_action`, or setting it to `include`, captures every process that no rule excludes. Canary the generated configuration before rolling it out, and see the [Config v1 to v2 migration guide](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/blob/v0.11.0/devdocs/config/version-2.0/migration.md). The Helm chart values shown throughout these pages use Configuration v1.
* **Span names and span counts changed for SQL and Kafka.** SQL span names follow the OpenTelemetry semantic conventions more closely, SQL type is detected on Go SQL spans, and a multi-topic Kafka `Produce` or `Fetch` request now emits one span per topic instead of one span per request. Aggregations that count Kafka spans or group on SQL span names may shift.
* **Go Trace API auto-instrumentation is activated.** Go applications that use the global `otel.Tracer` API without registering an SDK are instrumented automatically. Go runtime telemetry also expands with CPU, memory, scheduler, GC, and histogram metrics. See [Go Trace API auto-instrumentation](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/overview.md#go-trace-api-auto-instrumentation).
* **gRPC and HTTP/2 context propagation covers connections that were already open when OBI started.** Huffman-encoded `traceparent` values are decoded on ingress (which needs Linux kernel 5.17+), HTTP server context is preserved through response bodies, and Go `net/http` HTTP/1 clients no longer inject a duplicate `traceparent`. See [Distributed tracing](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/distributed-tracing.md#how-trace-context-propagation-works).
* **Protocol, runtime, and AI/LLM coverage expanded.** Aerospike client calls are instrumented; Deno processes are identified as a JavaScript runtime and emit metrics and spans (trace-context propagation for Deno isn't available yet); and Ollama's native `/api/chat` and `/api/generate` endpoints and OpenAI-compatible gateways (LiteLLM, vLLM, LocalAI, OpenRouter, Ollama `/v1/`) are instrumented, with Gemini SSE streaming responses captured.

[Full release notes for OBI v0.11.0](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.11.0).

Jun 30, 2026

OBI v0.10.0

* **gRPC/HTTP2 network-level context propagation is now supported.** OBI propagates the W3C `traceparent` header on gRPC and HTTP/2 requests via HPACK header injection, without requiring memory-level writes. See [Distributed tracing](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/distributed-tracing.md#how-trace-context-propagation-works).
* **GenAI attributes aligned with OpenTelemetry semantic conventions.** Message shapes for OpenAI, Anthropic, Google Gemini, Qwen, and AWS Bedrock have been normalized. Dashboards or queries keyed on prior attribute names may need updating.
* **`url.query` is now emitted by default on HTTP spans when present, and client `url.full` includes the query string.** Sensitive query parameters are automatically redacted. The built-in redaction list covers AWS SigV4 (`X-Amz-Signature`, `X-Amz-Credential`, `X-Amz-Security-Token`), legacy AWS signed URLs (`AWSAccessKeyId`, `Signature`, `SecurityToken`), Google (`X-Goog-Signature`, `sig`), and common token names (`token`, `access_token`, `refresh_token`, `id_token`, `jwt`). Extend the list with `OTEL_EBPF_SENSITIVE_QUERY_PARAMS_ADD`, or trim it with `OTEL_EBPF_SENSITIVE_QUERY_PARAMS_REMOVE`.
* **GraphQL documents are no longer exported by default.** Enable them explicitly with `payload_extraction.http.graphql.enabled: true` (env: `OTEL_EBPF_HTTP_GRAPHQL_ENABLED`).
* **Java route harvesting is disabled by default** while JVM-blocking edge cases are investigated. The `http.route` attribute on Java spans falls back to the raw URL path until harvesting is re-enabled upstream.
* **`ip` context-propagation value is deprecated; the undocumented `http` alias has been removed.** Valid values for `OTEL_EBPF_BPF_CONTEXT_PROPAGATION` are `disabled`, `headers`, `tcp`, and `all`. If you set `ip`, OBI warns and does not enable propagation. Use `headers` instead.
* **AI/LLM coverage expanded.** Tool-call extraction is added for OpenAI, Anthropic, Gemini, and Qwen; MCP tool-call arguments and results are extracted with independent attribute-selection controls; SSE streaming is captured for OpenAI-compatible, Anthropic, and Qwen responses; and vector-database retrieval spans are emitted for Pinecone, Qdrant, Milvus, Zilliz, Chroma, and Weaviate.
* **New protocol and platform support.** SunRPC/ONC RPC detection is added; automatic OpenShift cluster-name detection is added; JDK 26 and 27 are supported.

[Full release notes for OBI v0.10.0](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.10.0).

May 11, 2026

OBI v0.9.0

* **Database error response reporting is now opt-in.** OBI no longer captures database error response bodies by default. Enable it explicitly if you previously relied on those fields appearing on SQL spans.
* **Generic Go TLS support.** TLS visibility extends beyond OpenSSL to custom Go protocols. See [Distributed tracing](https://coralogix.com/docs/opentelemetry/instrumentation-options/ebpf-auto-instrumentation/distributed-tracing.md#supported-languages-for-context-propagation).

[Full release notes for OBI v0.9.0](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.9.0).

Apr 3, 2026

OBI v0.7.0+

* **SQL spans now use Server kind.** Database spans for SQL instrumentations (MySQL, PostgreSQL, MariaDB) are emitted as `SERVER` spans instead of `CLIENT`. Update any trace or span filters that key on span kind for SQL operations.
* **DNS excluded from span and service-graph metrics by default.** DNS calls no longer appear in span metrics or in the service graph. If you relied on DNS visibility there, expect those entries to disappear after upgrading.
* **Ordinal port guessing disabled by default for network metrics.** OBI no longer infers a service identity from ordinal source/destination ports on network flows. Existing queries built on guessed ports may return different results.
* **HTTP header enrichment available as an opt-in feature.** You can now capture selected HTTP request and response headers as span attributes. Configure under `ebpf.payload_extraction.http.enrichment` (env: `OTEL_EBPF_HTTP_ENRICHMENT_ENABLED`), disabled by default.

[Full release notes for OBI v0.7.0](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.7.0) and [v0.7.1](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/tag/v0.7.1).
