Overview
v0.12.2 is an expedited patch release following v0.12.1 that fixes a log-enricher defect capable of deadlocking instrumented shell workloads. It also includes protocol reliability fixes merged since the previous release.
Critical reliability fixes
- The log enricher now only consumes pipes registered as a tracked process's stdout or stderr, keyed by inode and device. Previously it intercepted every pipe write of a tracked process: shell command substitutions (
$(...)) came back empty in any enriched namespace, and since v0.12.0 the capture-time warm-open could hold a substitution pipe's write end for up to 30 minutes, deadlocking the shell and then feeding it the enricher's own output. Non-log pipes are no longer zeroed, captured, or held; enriched lines are delivered through a live owner's descriptor with per-event references, so short-lived writers' final lines still land without holding pipes open. (#3107) - Serialized descriptor-cache publication with pipe retirement, closing a race where a destination opened concurrently with its owner's teardown could leave an unretirable cached write end held until cache expiry. (#3130)
Protocol fixes
- Correlated TLS connections that OpenSSL manages through memory BIOs by matching ciphertext prefixes, restoring traces for applications that do their own socket I/O. (#3023)
- Decoded HTTP/2 headers in capture order, preventing HPACK dynamic-table drift from misattributing header values. (#3039)
- Reassembled Aerospike responses split across TCP reads in kernel, fixing missed or truncated Aerospike spans. (#3082)
Behavior changes and compatibility notes
- The
application_spanandapplication_span_sizesfeatures (Grafana-conventiontraces_spanmetrics_*names) are deprecated in favor ofapplication_span_otel. Nothing is removed and no metric stops being emitted; existing configurations keep working and log a deprecation warning. (#2979) - Log enrichment no longer touches pipes that are not a tracked process's stdout/stderr: application data on other pipes now passes through untouched and un-enriched, including pipelines where a process writes logs to a pipe on a non-stdio descriptor. (#3107)
What's Changed
General
- Decode HTTP/2 headers in capture order by @MrAlias in #3039
- Reassemble split Aerospike responses in kernel by @pinoOgni in #3082
- Correlate memory-BIO TLS connections by ciphertext prefix by @mifisignal in #3023
- refactor(otel): generalize the JVM up-down counter for shared runtime use by @pinoOgni in #3111
- Deprecate the
application_spanmetrics feature by @NimrodAvni78 in #2979 - logenricher: serialize cache publication with retirement by @MrAlias in #3130
- Release v0.12.2 by @mmat11 in #3129
Fixed
Dependencies
- Update Java by @renovate[bot] in #3102
- Update Rust crate actix-files to 0.7.0 - autoclosed by @renovate[bot] in #3104
- Update nginx Docker tag to v1.31.4 by @renovate[bot] in #3100
- Update dependency @opentelemetry/sdk-trace-node to ^2.9.0 by @renovate[bot] in #3103
- Update dependency zope-interface to v8.6 by @renovate[bot] in #3114
- Update dependency protobuf to v7.36.0 by @renovate[bot] in #3113
- Update golang.org/x packages by @renovate[bot] in #3049
- Pin dependencies by @renovate[bot] in #3093
- Update dependency pyzmq to v27.2.0 by @renovate[bot] in #3115
- Update grafana/grafana Docker tag to v13.2.0 by @renovate[bot] in #3078
- Update quay.io/prometheus/prometheus Docker tag to v3.14.0 by @renovate[bot] in #3094
- Update otel/opentelemetry-collector-contrib Docker tag to v0.159.0 by @renovate[bot] in #3117
- Update grafana/otel-lgtm Docker tag to v0.31.0 by @renovate[bot] in #3120
- Update dependency Faker to v40.37.0 by @renovate[bot] in #3128
New Contributors
- @mifisignal made their first contribution in #3023
Full Changelog: v0.12.1...v0.12.2