API
- Add null guards and API usage logging for tracing, metrics, propagation, and context APIs (#8913, #8968)
- Add stable
io.opentelemetry.api.impl.Base16EncodingUtilsandTemporaryBuffersutilities (#8929, #8955) - Fix uncompilable Javadoc examples in context APIs (#8934)
Incubating
- Avoid false type warnings in
DeclarativeConfigProperties.toMap()(#8921)
Extensions
- Trace propagators: Handle malformed URL escapes in Jaeger headers (#8912)
- Trace propagators: Include the B3 debug header in multi-header propagation fields (#8930)
- Trace propagators: Fix hexadecimal flag parsing in Jaeger headers (#8975)
SDK
- Remove cross-module internal utility dependencies from resource and retry code (#8916)
- Add experimental
SdkResourceProvidersupport shared by tracer, meter, and logger providers (#8865)
Traces
- Retain invalid span links with attributes or trace state (#8917)
Metrics
- Use a dedicated export worker in
PeriodicMetricReader, queue concurrent flushes, and addsetExporterTimeout()with a default equal to the export interval (#8827)
Exporters
- Logging: Fall back to the observed timestamp in
SystemOutLogRecordExporterwhen the timestamp is unset (#8944) - OTLP: Close the JDK HTTP response body on unsupported
Content-Encoding(#8962) - OTLP: Match the
Hostheader case-insensitively in the managed-channel gRPC sender (#8957) - OTLP: Fix exporter metric server attributes for hosts that
java.net.URIcannot parse (#8941) - OTLP: Pass the original exception to the JDK HTTP sender's error callback (#8963)
- OTLP: Retry OkHttp gRPC exports on the current thread to avoid rejection by bounded executors (#8965)
- OTLP: Restore per-attempt retry logging in the OkHttp gRPC sender (#8967)
- OTLP: Correct exporter builder Javadoc (#8996)
- OTLP: Accept
0as no limit for maximum request body and message sizes (#8945) - OTLP: gRPC exporter internal telemetry uses
rpc.status_codeinstead ofrpc.response.status.codewhenInternalTelemetryVersionis set toLATEST(#9007) - Prometheus: Give exemplar
trace_idandspan_idprecedence over filtered attributes (#8959)
Extensions
- BREAKING Incubator: Change
SamplingIntent.create()andgetTraceStateUpdater()fromFunctiontoBiFunctionaccepting the finalSamplingDecision, and fix consistent sampling corner cases (#8952) - Autoconfigure: Match environment variables for configuration keys containing underscores (#8933, #8951)
- Autoconfigure: Support
PeriodicMetricReaderbatch sizes throughotel.metric.export.max.batch.size(#8935) - Autoconfigure: Correct SPI Javadoc (#8900)
Testing
- Add fluent metric point assertions to
MetricAssert(#8994) - Add a builder supporting aggregation temporality selectors to
InMemoryMetricExporter(#8993)
🙇 Thank you
This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:
@anuraaga
@bogdandrutu
@breedx-splk
@dashpole
@jack-berg
@jameyg42
@jaydeluca
@jkwatson
@jsuereth
@kamikazeayoup
@nbiswal1
@NithinU2802
@opentelemetry-pr-dashboard
@psx95
@Rajkaran-122
@rooks-ns
@thswlsqls
@trask
@zeitlinger