Overview
v1.0.0-rc.2 is the second release candidate for OBI's first stable major release. It brings the functionality and fixes shipped in v0.15.2 into the RC line, including the Collector receiver module split, BPF verifier fixes, and telemetry naming updates.
This candidate continues validation for the stable OBI 1.0 milestone. The final v1.0.0 release remains subject to maintainer validation and signoff; proposed compatibility commitments cover the explicitly documented stable surfaces in VERSIONING.md.
Highlights
- Captures manual spans through the embedded Go Auto SDK, expands .NET route harvesting and CPU/heap metrics, and adds AWS Route53 endpoint name resolution.
- Fixes BPF program loading after verifier loop widening, trace-context injection into sockets misclassified as HTTP/2, metric-label tuple collisions, duplicate
target.infocounts, and Collector receiver shutdown after itsStartcontext ends. - Adds Config v2 metric-feature selection, correct OTLP
http/jsontrace encoding, ring-buffer write/failure counters, and security dependency updates.
Release-impacting changes
- Collector upgrades: the receiver is now the separate Go module
go.opentelemetry.io/obi/collector, with an independent v0 release line and the same import path. This candidate tags only the core module asv1.0.0-rc.2; there is nocollector/v1.0.0-rc.2tag. Receiver users should usecollector/v0.15.2. To test the receiver against RC2, select both module versions explicitly:go get go.opentelemetry.io/obi/collector@v0.15.2 go.opentelemetry.io/obi@v1.0.0-rc.2. RC tags alone do not make the split receiver discoverable through a plaingo get -u. - Configuration: Config v2 is the proposed v1 configuration contract and has been available with standalone loading, the validation/migration CLI, and Collector receiver support since v0.11.0. Config v1 remains supported for backward compatibility, but is frozen and receives no bug fixes or new features. Follow the Config v1 to v2 migration guide, including unsupported mappings, manual migration cases, and canary comparison. Full per-process declarative configuration parity remains deferred. In v2, a protocol's
enabled.metrics: falsenow also suppresses its span metrics and service graphs in both exporters; Config v1 behavior is unchanged. - Telemetry upgrades from RC1: span names,
rpc.methodvalues, default metric attributes, and some Prometheus labels change. Examples include gRPC names losing their leading slash, HTTP clientserver.addressdropping the Host header's port, and new database/RPC/messaging labels that split metric series. Review the full v0.15.2 release-impacting changes before upgrading dashboards, alerts, or processors. Those changes also cover conditional attribute renames and removals that a telemetry schema cannot automatically translate. - Go embedders:
PrometheusConfig.Registryis removed; configure a Prometheus HTTP port instead of supplying a registry. - Telemetry schema: RC2 retains the published
0.15.2schema. Prereleases do not introduce schema identifiers with an RC suffix; the1.0.0schema is cut for the final release, preserving transformation history. See TELEMETRY.md for the proposed stable telemetry contract and known emission limitations. Network flow attribute names remain outside that contract pending semantic-convention alignment.
Artifacts and known SBOM limitations
Linux amd64 and arm64 binary archives include obi, LICENSE, NOTICE, and third-party notices. The source-generated archive includes the tagged source, generated BPF bindings/objects, and the embedded Java agent JAR. Archives, CycloneDX SBOMs, and SHA256SUMS each have a Cosign signature bundle. Verify them and the main container images with ./scripts/verify-draft-release.sh v1.0.0-rc.2 from the tagged repository.
The SBOMs have valid signatures and pass CycloneDX 1.6 schema validation, but have these reporting limitations:
- Both binary SBOMs report the OBI module version as
v1.0.0-rcinstead ofv1.0.0-rc.2. The binaries themselves contain the correct version and tagged revision. - The archive SBOMs identify the embedded Java agent with version
UNKNOWNand omit its Byte Buddy dependencies. For Java dependency analysis, also consumeobi-java-agent-v1.0.0-rc.2.cyclonedx.jsonand its signature bundle. That companion SBOM identifies the agent asv1.0.0-rc.2and listsbyte-buddyandbyte-buddy-agentat1.18.14-jdk5.
Signature verification establishes the authenticity and integrity of the supplied files; it does not correct these inventory limitations. Consumers requiring an accurate, self-contained archive SBOM should account for these limitations when evaluating this candidate.
Release candidate validation
Evaluate this candidate against the support matrix, Config v2 migration guidance, and telemetry contract. The Config v2 release gate and stable v1.0 epic track the release requirements.
Each candidate must remain available for at least 14 days of maintainer validation. Final acceptance requires green release workflows, verified Linux amd64/arm64 artifacts and container images, validation of configuration and telemetry behavior, and confirmation from at least two maintainers. Known limitations and blocking regressions remain subject to maintainer review before final signoff.
What's Changed
General
- 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
- Prepare OBI for version v1.0.0-rc.2 by @mmat11 in #3777
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 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
- Update grafana/otel-lgtm Docker tag to v0.37.0 by @renovate[bot] in #3776
- Update dependency laravel/framework to v13.37.0 by @renovate[bot] in #3772
- Update nginx:1.31.7-alpine Docker digest to 892bb21 by @renovate[bot] in #3766
New Contributors
- @martincostello made their first contribution in #3655
- @bogdandrutu made their first contribution in #3746
Full Changelog: v1.0.0-rc.1...v1.0.0-rc.2