github open-telemetry/opentelemetry-ebpf-instrumentation v0.13.0

6 hours ago

Overview

v0.13.0 is a feature release. It also fixes a group of memory-safety bugs in the socket-layer context propagation that could corrupt TLS connections of instrumented workloads or copy unrelated kernel memory into telemetry.

Context-propagation memory safety

  • The HTTP header injector no longer acts on leftover buffer data from a previous request, which could write a traceparent into the middle of a TLS stream and reset the connection. (#3257)
  • Message-buffer reads are bounded by the mapped data window, so a failed pull can no longer copy adjacent kernel memory into span payloads. Also fixes a masking bug that copied nothing for sends of 8 KiB or more. (#3298)
  • The message buffers are invalidated whenever filling them fails, so no reader can mistake a previous message for the current one. (#3304)

Protocol and tracing fixes

  • Application-supplied traceparents are preserved in Go HTTP/2, and header injection there fails safely. (#3156, #3159)
  • TCP client and server roles are classified by the local port, fixing swapped roles for same-namespace clients. (#3146)
  • Established idle connections are no longer reported as failed connects. (#3043)
  • DNS spans follow OTel conventions, peer naming from DNS captures is fixed, and reverse DNS supports IPv6. (#3174, #2947, #3244)
  • Exiting processes keep their PID valid for a grace period so their final events are not lost. (#3170)

New instrumentation and metrics

  • Runtime metrics for Python, JVM, and Node.js; Go runtime probes are gated behind the application_runtime feature. (#3028, #3203, #3131, #3227)
  • Network and stats metrics for processes in isolated network namespaces outside Kubernetes. (#2861)
  • New attributes: db.response.status_code, db.namespace, and server.port on database duration metrics; messaging.operation.name on messaging spans. (#3271, #3193, #3097, #3136)
  • Aerospike server spans, Go 1.27 support, and better service naming for Python, Deno, .NET, and Node.js apps. (#3167, #3221, #3112, #3132, #3118, #3099)
  • OBI publishes its telemetry schema and a generated telemetry reference; schema_url now points at 0.13.0. (#3044, #3215)

Behavior changes

  • service.name and service.namespace are no longer default metric labels; select them explicitly if you depend on them. (#3168)
  • error.type values are unified across spans and metrics; the attribute name is unchanged. (#3196)
  • Go runtime metrics require enabling the application_runtime feature. (#3227)
  • metrics.features is printed as feature names instead of a bitmask. (#3265)

What's Changed

General

  • generictracer: stop reporting established idle connections as failed connects by @mifisignal in #3043
  • Keep clang-tidy compatible with LLVM 22 by @MrAlias in #3127
  • nodejs: preserve getTracer(name, version, options) through the SDK handoff by @NimrodAvni78 in #3095
  • Conform to OTEL messaging semantic conventions by @NimrodAvni78 in #3136
  • Add server.port attribute to db.client.operation.duration by @pinoOgni in #3097
  • fix: validate Prometheus scrape paths by @immanuwell in #3134
  • Limit Java TLS buffer allocation to payload size by @MrAlias in #3126
  • nodejs: extract meaningful node application names when other metadata is missing by @grcevski in #3099
  • Reject split span metric format conflicts by @MrAlias in #3123
  • Fix DNS capture so peer endpoints get named correctly by @mifisignal in #2947
  • bpf: classify TCP client/server by the local port, not the sorted d_port by @mmat11 in #3146
  • ci: migrate OSSF Scorecard to shared workflow by @opentelemetrybot in #3166
  • ci: prebuild hatest-obi images to save runner time by @mmat11 in #3119
  • Enable the eBPF PID filter before injecting the Java agent by @mifisignal in #2949
  • fix dns spans to conform to otel conventions + test coverage by @NimrodAvni78 in #3174
  • remove service.name and service.namespace from default metric labels by @NimrodAvni78 in #3168
  • Support Go 1.27 in CI by @MrAlias in #3147
  • nodejs: export manual span kind; honor explicit span.end(t) within bounded skew by @NimrodAvni78 in #3105
  • Fail schema generation on duplicate config type names by @elliehmy in #2997
  • Add Nodejs v8js.* runtime metrics (GC duration and heap spaces) by @pinoOgni in #3131
  • docs: sync devdocs with codebase Aug 2026 by @skl in #3198
  • release: add draft release verification script by @mmat11 in #3133
  • nodejs: fix --experimental-config-file handling for service name discovery by @grcevski in #3200
  • Make Config v1 integration fixtures migratable by @MrAlias in #3149
  • feat(java): report incompatible preloaded agents by @salman-frs in #3135
  • emit obi.queue.capacity.ratio and declare it by @NimrodAvni78 in #3181
  • Fix confmap decoding of YAML sequences into text-unmarshalable types by @elliehmy in #3189
  • Add db.namespace on db.client and db.server operation duration metrics by @pinoOgni in #3193
  • Replace disabled Kafka Fetch v12/v15 tests with a session-fetch error case by @pinoOgni in #3201
  • Restore Go 1.26 images after CI regression by @MrAlias in #3206
  • Publish OBI telemetry schema by @NimrodAvni78 in #3044
  • declare span-size metrics and span-metric data-point attributes by @NimrodAvni78 in #3169
  • Derive ProtocolType constants from the generated BPF enum by @pinoOgni in #3213
  • Add Aerospike server spans by @pinoOgni in #3167
  • Bind Java injection to stable process identities by @MrAlias in #3184
  • Fix unit tests in Darwin by @mariomac in #3216
  • ran 'go fix' to modernize code to Go 1.26 by @mariomac in #3212
  • python: extract service metadata for known frameworks by @grcevski in #3112
  • Fix sys admin permission requirements by @grcevski in #3220
  • Make Go HTTP/2 Framer injection fail safely by @MrAlias in #3159
  • Fix lints by @grcevski in #3222
  • Preserve application traceparents in Go HTTP/2 by @MrAlias in #3156
  • Fix lint issue in http2go test by @pinoOgni in #3223
  • dotnet: Name .NET apps as the OpenTelemetry .NET SDK by @grcevski in #3118
  • Add support for Python runtime metrics by @marctc in #3028
  • Gate Go runtime metrics probes behind the application_runtime feature by @pinoOgni in #3227
  • fix memory pressure by @grcevski in #3232
  • deno: extract service metadata of deno apps by @grcevski in #3132
  • fix: route klog output through slog by @skl in #3192
  • Support Go 1.27 target instrumentation by @MrAlias in #3221
  • Add JVM class, thread, and CPU runtime metrics by @marctc in #3203
  • Update Rafael's org by @rafaelroquetto in #3242
  • Fix flaky Python runtime metrics integration test by @marctc in #3239
  • Otel compliance: Add missing otel network attributes by @NimrodAvni78 in #3194
  • fix(cpython): resolve staticcheck and unused lint errors on non-amd64 by @pinoOgni in #3255
  • fix(rdns): fix rdns qsection validation check by @rafaelroquetto in #3243
  • pids: keep blocked PIDs valid for a grace period so their final events drain by @mmat11 in #3170
  • rdns: add ipv6 support by @rafaelroquetto in #3244
  • Otel compliance: improve and unify error.type across spans and metrics by @NimrodAvni78 in #3196
  • Convert event type defines to an enum and derive the Go constants from it by @pinoOgni in #3218
  • tpinjector: skip HTTP injection on stale msg buffers by @mmat11 in #3257
  • tests: fix flaky integration test TestPythonRuntimeMetricsOTel by @mmat11 in #3267
  • tests: fix flaky unit test TestAppMetricsExpiration by @mmat11 in #3266
  • Print metrics.features as feature names instead of a bitmask by @pinoOgni in #3265
  • publish an OBI telemetry reference generated from the registry by @NimrodAvni78 in #3215
  • ci: add arm64 runner to privileged unit tests by @skl in #3275
  • ci: add arm to linux lint job by @skl in #3302
  • ci: merge x86/arm integration tests workflows by @skl in #3287
  • ci: move security scanning to shared workflow by @opentelemetrybot in #3202
  • Generate Go offsets atomically by @MrAlias in #3238
  • Fix out-of-bounds read in fill_msg_buffers when msg pull fails by @darkraider01 in #3298
  • tpinjector: invalidate msg buffers when fill_msg_buffers bails by @mmat11 in #3304
  • Dynamic Client: Support isolated netns non-k8s processes for network+stats metrics by @damemi in #2861
  • Prepare obi for version v0.13.0 by @mmat11 in #3317

Fixed

  • Fix Go netFD read map cleanup by @MrAlias in #3124
  • Limit Kafka Produce topic fan-out by @MrAlias in #3122
  • Fix log enricher buffer suppression order by @MrAlias in #3125
  • Initialize process tracer logger in constructor by @MrAlias in #3148
  • Add db.response.status_code to DB client and server operation duration metrics by @pinoOgni in #3271

Dependencies

New Contributors

Full Changelog: v0.12.2...v0.13.0

Don't miss a new opentelemetry-ebpf-instrumentation release

NewReleases is sending notifications on new releases.