Skip to main content

OBI changelog

Behavior changes in each OBI (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 and Exported metrics.

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.
  • 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.
  • 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.

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.
  • 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.
  • 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.

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.
  • 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.
  • 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.
  • 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.

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.
  • 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.
  • 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.
  • 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. 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.
  • 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.
  • 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.

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.
  • 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.

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.

Full release notes for OBI 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 and v0.7.1.

Last updated on