Overview
v0.15.2 supersedes the unpublished v0.15.0 and v0.15.1 releases. The v0.15.0 release was blocked by BPF verifier failures; v0.15.1 included that correction but its artifact build failed when version discovery selected the Collector tag. This patch release is intended to ship the release-pipeline correction together with the features and upgrade notes originally prepared for v0.15.0.
Release corrections
- Uses the selected core release tag consistently for binary archives, generated-source archives, Java SBOMs, and checksums. Core and Collector tags sharing a commit must not let
git describesubstitute a Collector version into release artifact paths. (#3770) - Restores BPF program loading after verifier loop widening by preserving socket-copy bounds, bounding packet hex writes, and separating HTTP/1 traceparent scanning from decoding. Capture limits and trace-context propagation behavior are preserved. (#3759)
- Prepares core
v0.15.2andcollector/v0.15.2, updating the receiver dependency, OATS module references, and Collector Builder example. The telemetry schema advances to0.15.2with the existing transformation history; no additional renames are needed. (#3775)
Highlights
- Ships
go.opentelemetry.io/obi/collectoras a separate module atcollector/v0.15.2, together with rootv0.15.2. The receiver keeps its existing import path and an independent v0 release line. (#3748) - Captures manual spans through the embedded Go Auto SDK, expands .NET route harvesting and CPU/heap metrics, and adds AWS Route53 endpoint name resolution. (#3678, #3655, #3647, #3697, #3600)
- Prevents trace-context injection into sockets misclassified as HTTP/2, fixes metric-label tuple collisions and duplicate
target.infocounts, and keeps the Collector receiver running after itsStartcontext ends. (#3715, #3523, #3665, #3745) - Adds Config v2 metric-feature selection, ring-buffer write/failure counters, correct OTLP
http/jsontrace encoding, and security dependency updates. (#3691, #3631, #3728, #3732, #3733, #3734, #3735)
Release-impacting changes
- Collector upgrades: publish both
v0.15.2andcollector/v0.15.2. The root module removes the receiver package; the nested module provides it at the same import path and requires rootv0.15.2. RC tags alone do not support discovery through plaingo get -u. - Config v2 protocol
enabled.metrics: falsenow suppresses that protocol's span metrics and service graphs in both exporters. The migration CLI reports coverage it cannot preserve; Config v1 behavior is unchanged. server.addresson HTTP client spans andhttp.client.*metrics drops theHostheader's port;server.portandurl.fullretain it. IP hosts follow unresolved-name handling, and Kubernetes Service hosts with ports resolve to the service and namespace, changing peer/service-graph names where applicable.PrometheusConfig.Registryis removed. Embedders must configure a Prometheus HTTP port instead of supplying a registry.- GenAI client names use the emitted operation and request model, or data-source ID for retrieval. Anthropic
messagebecomeschaton spans and metrics; gateways use names such aschat gpt-4o-miniinstead of HTTP names. Missing request models/data-source IDs are omitted from names, with no response-model fallback; unknown operations use_OTHER. OTLP GenAI metrics omit missinggen_ai.request.modelrather than emitting an empty value; Prometheus output is unchanged. - Database spans without an operation use their target or database-system name; SQL spans can use a namespace alone, and MongoDB/Couchbase spans without a collection use their namespace. SQL query summaries still take precedence. Elasticsearch/OpenSearch spans without an index or cluster use the requested/resolved host and port instead of peer IP; Couchbase SQL++ host targets use the reported server address. Native database names retain their existing host-cardinality limits, and Redis names exclude the namespace.
- GraphQL server names drop
GraphQL; AWS S3/SQS names useS3./SQS.prefixes, and S3 without an operation usesaws-api. Reply-only ONC RPC spans useonc_rpc. These name changes also affect span-metric labels. - ONC RPC spans carry
rpc.methodas{program}/{procedure}when a CALL was captured, andrpc.response.status_codewhen a REPLY was captured. RPC duration metrics use the same method format, omit it without a CALL, and omit response status without a REPLY instead of reporting success. - gRPC names and
rpc.methodvalues drop the leading slash, including RPC-duration and span-metric labels. Invalid/unread paths use span namegrpcand method_OTHER; captured raw paths are available asrpc.method_original. - New default metric attributes split series:
db.collection.nameon database duration metrics,server.porton RPC client duration, anderror.typeon failed RPC server duration. Elasticsearch/OpenSearch index names may increase cardinality; exclude the collection attribute if needed. - AWS SNS spans drop
rpc.system.nameandrpc.method;SNS.{operation}names andcloud.regionremain. - MQTT SUBSCRIBE spans and process metrics use
messaging.destination.subscription.namefor the filter instead of destination name, and span names drop the filter. Shared subscriptions also emitmessaging.consumer.group.name. This conditional rename cannot be expressed by a schema-wide transformation. - AMQP OTLP metrics omit empty destinations. Messaging client-duration metrics add default
messaging.operation.type; client/process-duration metrics add default subscription name when present. These add Prometheus labels. - GraphQL, MCP, and JSON-RPC server spans drop HTTP method/status/route, URL, body-size, user-agent, and OBI response-observation attributes, retaining protocol, address, network, and error attributes. Captured HTTP headers are limited to plain HTTP and GraphQL spans, affecting Go
net/rpcJSON-RPC. - The registry moves to Weaver
definition/2; span reference IDs lose theirspan.prefix, so old documentation anchors no longer resolve. The published telemetry schema advances to0.15.2and retains prior transformations.
What's Changed
General
- Drain the weaver tap before stopping weaver in Docker and OATS tests by @NimrodAvni78 in #3602
- Fix protoc-gen Makefile target and regenerate informer code by @pinoOgni in #3628
- Rails: harvest routes for graphql engines by @mariomac in #3625
- Generate the eBPF objects per architecture and in parallel by @pinoOgni in #3630
- Coverage Validation: Update Weaver to 0.27.0 by @NimrodAvni78 in #3641
- Refactor cloud metadata inventory maintenance by @mariomac in #3596
- docs: add task-oriented AGENTS starting points by @zeitlinger in #3646
- Prepare OBI for version v1.0.0-rc.1 by @MrAlias in #3649
- fix(bpf): replace the PID filter cache with a pid-indexed bitmap keyed in OBI's pid namespace by @pinoOgni in #3458
- dotnet: extend .NET route harvesting by @martincostello in #3655
- Fix duplicate target.info count when a pid moves to an existing service by @pinoOgni in #3665
- Resume integration shards from saved test results by @MrAlias in #3629
- Add .NET CPU count and time runtime metrics by @marctc in #3647
- oats/amqp: drop build-time host networking from compose files by @pinoOgni in #3668
- Format and lint C code with LLVM 22 from the generator image by @pinoOgni in #3642
- Assert histogram bucket boundaries in runtime exporter tests by @pinoOgni in #3660
- Add route53 support for Cloud metadata by @mariomac in #3600
- Terraform cloud setup in examples (AWS) by @mariomac in #3674
- GenAI span names follow the semconv name convention by @NimrodAvni78 in #3671
- Database span names follow the semconv name convention by @NimrodAvni78 in #3657
- Fix the tracefs probe cleanup script in devdocs by @pinoOgni in #3685
- Capture spans from the embedded Go Auto SDK by @MrAlias in #3678
- fix(generictracer): delete a thread's traces_ctx_v1 entry when it exits by @simlarsen in #3662
- Use one clang-format file scope for the hook, target and CI by @pinoOgni in #3690
- ci: Rebalance integration shards from measured test durations by @NimrodAvni78 in #3687
- GraphQL, AWS and ONC RPC span names follow semconv by @NimrodAvni78 in #3673
- Fix Route53 name resolver configuration in Config v1 by @mariomac in #3693
- allow selecting metrics features in v2 config by @mariomac in #3691
- ci: skip free-disk cleanup when the runner already has enough space by @NimrodAvni78 in #3694
- Add OBI guidance for Copilot code reviews by @MrAlias in #3679
- emit url.template on HTTP client spans by @NimrodAvni78 in #3692
- fix: keep distinct metric label tuples separate by @immanuwell in #3523
- weaver: translate the registry from v1 to definition/2 by @NimrodAvni78 in #3695
- Assert RED and GenAI histogram bucket boundaries in exporter tests by @pinoOgni in #3684
- Honor V2 protocol switches for span-derived metrics by @MrAlias in #3698
- Fix flaky tests by @martincostello in #3699
- gRPC span names and rpc.method follow semconv by @NimrodAvni78 in #3669
- fix: add internal metrics for ring buffer writes by @kingbj940429 in #3631
- Elasticsearch upstream conformance: Add db.operation.parameter. to spans by @NimrodAvni78 in #3706
- GenAI upstream conformance by @NimrodAvni78 in #3707
- RPC/DB upstream conformance by @NimrodAvni78 in #3708
- Move internal/cloud to pkg/cloud by @mariomac in #3742
- docs: document Java agent design constraints by @zeitlinger in #3717
- Upgrade otelcol version by @bogdandrutu in #3746
- weaver: send only OBI's telemetry to weaver by @NimrodAvni78 in #3704
- Messaging upstream conformance by @NimrodAvni78 in #3739
- HTTP attributes only on http spans without subtypes by @NimrodAvni78 in #3740
- gotracer: cut uprobe hits on the Go gRPC hot path by @mmat11 in #3676
- Add .NET last-collection heap size metrics by @marctc in #3697
- test(otelcfg): isolate protocol setup tests form the env by @pinoOgni in #3730
- fix(collector): keep OBI running after the receiver Start context ends by @pinoOgni in #3745
- fix: remove unused prometheus registry by @rafaelroquetto in #3702
- ci: build OBI and shared test images once for K8s and OATS workflows by @NimrodAvni78 in #3688
- tpinjector: stop injecting into sockets misclassified as HTTP/2 by @pinoOgni in #3715
- Split Collector receiver into its own Go module by @MrAlias in #3748
- Prepare OBI for version v0.15.0 by @MrAlias in #3761
- Fix BPF verification after loop widening by @MrAlias in #3759
- Prepare OBI for version v0.15.1 by @MrAlias in #3768
- Use the selected tag for release artifacts by @MrAlias in #3770
- Prepare OBI for version v0.15.2 by @mmat11 in #3775
Fixed
- HTTP client server.address and K8s name resolution ignore the Host header port by @NimrodAvni78 in #3722
- fix(otel): send JSON for OTLP traces when protocol is http/json by @pinoOgni in #3728
Dependencies
- Update module github.com/andybalholm/brotli to v1.2.6 by @renovate[bot] in #3637
- Update module github.com/ohler55/ojg to v1.28.7 by @renovate[bot] in #3638
- Update module github.com/shirou/gopsutil/v4 to v4.26.9 by @renovate[bot] in #3639
- Update httpd Docker tag to v2.4.69 by @renovate[bot] in #3632
- Update github.com/microsoft/go-winmd digest to 364b685 by @renovate[bot] in #3635
- Update Docker Go packages by @renovate[bot] in #3636
- Update dependency pg to v1.7.0 by @renovate[bot] in #3626
- Update grafana/otel-lgtm Docker tag to v0.35.0 by @renovate[bot] in #3627
- Update module github.com/vektah/gqlparser/v2 to v2.5.60 by @renovate[bot] in #3640
- Update dependency graphql to "~> 2.6.0" by @renovate[bot] in #3644
- Update Docker images and fix compatibility fixtures by @renovate[bot] in #3591
- Update integration test pinned images by @renovate[bot] in #3650
- Update Docker by @renovate[bot] in #3651
- Update otel/ebpf-instrument Docker tag to v0.14.0 by @renovate[bot] in #3652
- Update otel/opentelemetry-collector-contrib Docker tag to v0.162.0 by @renovate[bot] in #3653
- Update jaegertracing/jaeger Docker tag to v2.22.0 by @renovate[bot] in #3659
- Update dependency laravel/framework to v13.35.0 by @renovate[bot] in #3658
- Update Rust by @renovate[bot] in #3682
- Update dependency pino to v10.4.0 by @renovate[bot] in #3680
- Update Java by @renovate[bot] in #3681
- Update Terraform aws to v6.68.0 by @renovate[bot] in #3686
- Update grafana/otel-lgtm Docker tag to v0.36.0 by @renovate[bot] in #3696
- Update module github.com/moby/moby/client to v0.6.2 by @renovate[bot] in #3711
- Update module github.com/vektah/gqlparser/v2 to v2.5.62 by @renovate[bot] in #3712
- Update AWS Go packages by @renovate[bot] in #3709
- Update victoriametrics/vmagent Docker tag to v1.154.0 by @renovate[bot] in #3716
- Update Go toolchain and runtime data to 1.27.2 by @renovate[bot] in #3710
- Update python Docker tag to v3.15.0 by @renovate[bot] in #3721
- Update LVH kernel images by @renovate[bot] in #3720
- Update integration test pinned images by @renovate[bot] in #3719
- Update OTLP to v1.11.1 and support gRPC v1.84 by @renovate[bot] in #3714
- Update Kubernetes Go packages by @renovate[bot] in #3727
- Update module go.opentelemetry.io/otel/sdk to v1.45.0 [SECURITY] by @renovate[bot] in #3733
- Update module github.com/go-git/go-git/v5 to v5.19.2 [SECURITY] by @renovate[bot] in #3732
- Update module golang.org/x/crypto to v0.52.0 [SECURITY] by @renovate[bot] in #3734
- Update dependency laravel/framework to v13.36.0 by @renovate[bot] in #3736
- Update module golang.org/x/net to v0.55.0 [SECURITY] by @renovate[bot] in #3735
- Update dependency sqlite3 to v2.10.0 by @renovate[bot] in #3737
- Update OpenTelemetry Go contrib packages by @renovate[bot] in #3724
- Update curlimages/curl Docker tag to v8.23.0 by @renovate[bot] in #3743
- Update Github Actions by @renovate[bot] in #3738
- Update module go.opentelemetry.io/ebpf-profiler to v0.0.202640 by @renovate[bot] in #3713
- Update Docker by @renovate[bot] in #3718
- Update nginx Docker tag to v1.31.7 by @renovate[bot] in #3751
New Contributors
- @martincostello made their first contribution in #3655
- @bogdandrutu made their first contribution in #3746
Full Changelog: v0.14.0...v0.15.2