|
2 | 2 |
|
3 | 3 | ## Unreleased |
4 | 4 |
|
| 5 | +This release targets the OpenTelemetry SDK 1.61.0. |
| 6 | + |
| 7 | +Note that many artifacts have the `-alpha` suffix attached to their version |
| 8 | +number, reflecting that they are still alpha quality and will continue to have |
| 9 | +breaking changes. |
| 10 | +Please see the [VERSIONING.md](VERSIONING.md#opentelemetry-java-instrumentation-versioning) |
| 11 | +for more details. |
| 12 | + |
| 13 | +### ⚠️ Breaking changes to non-stable APIs |
| 14 | + |
| 15 | +- Make `AbstractKtorServerTelemetryBuilder.isOpenTelemetryInitialized()` protected (previously |
| 16 | + public). |
| 17 | + ([#17509](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17509)) |
| 18 | +- Replace `ExperimentalInstrumentationModule.injectClasses(ClassInjector)` with |
| 19 | + `exposedClassNames()` for exposing helper classes to the application class loader. |
| 20 | + ([#17765](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17765)) |
| 21 | +- Moved `WebApplicationContextInstrumentation` from the `spring-web` instrumentation module to |
| 22 | + `spring-webmvc`; users who disabled it via `otel.instrumentation.spring-web.enabled=false` must |
| 23 | + now use `otel.instrumentation.spring-webmvc.enabled=false`. |
| 24 | + ([#17856](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17856)) |
| 25 | + |
5 | 26 | ### 🚫 Deprecations |
6 | 27 |
|
7 | | -- Deprecated GraphQL builder methods `setSanitizeQuery()` and `setAddOperationNameToSpanName()`, |
8 | | - and deprecated config key `otel.instrumentation.graphql.add-operation-name-to-span-name.enabled` |
9 | | - in favor of `setQuerySanitizationEnabled()`, `setOperationNameInSpanNameEnabled()`, and |
| 28 | +- Deprecated `KafkaTelemetryBuilder.setMessagingReceiveInstrumentationEnabled(boolean)` in favor of |
| 29 | + `setMessagingReceiveTelemetryEnabled(boolean)`. |
| 30 | + ([#17092](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17092)) |
| 31 | +- Deprecated GraphQL builder methods `setSanitizeQuery()` and `setAddOperationNameToSpanName()`, and |
| 32 | + deprecated config key `otel.instrumentation.graphql.add-operation-name-to-span-name.enabled` in |
| 33 | + favor of `setQuerySanitizationEnabled()`, `setOperationNameInSpanNameEnabled()`, and |
10 | 34 | `otel.instrumentation.graphql.operation-name-in-span-name.enabled` |
| 35 | + ([#17093](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17093)) |
| 36 | +- Deprecate `Experimental.setEnableSqlCommenter()` in JDBC and R2DBC instrumentation in favor of |
| 37 | + `Experimental.setSqlCommenterEnabled()`. |
| 38 | + ([#17094](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17094)) |
| 39 | +- Rename `otel.instrumentation.servlet.capture-request-parameters` to |
| 40 | + `otel.instrumentation.servlet.experimental.capture-request-parameters` and |
| 41 | + `otel.instrumentation.servlet.add-trace-id-request-attribute` to |
| 42 | + `otel.instrumentation.servlet.experimental.trace-id-request-attribute.enabled`; old property names |
| 43 | + are deprecated. |
| 44 | + ([#17113](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17113)) |
| 45 | +- Deprecated the declarative config name `statement_sanitizer` in favor of `query_sanitization`, and |
| 46 | + the declarative config group `common.database` in favor of `common.db`. |
| 47 | + ([#17116](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17116)) |
| 48 | +- Deprecated the GraphQL declarative config name `query_sanitizer` in favor of `query_sanitization` |
| 49 | + ([#17455](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17455)) |
11 | 50 | - Deprecated the DB query sanitization system property names |
12 | 51 | `otel.instrumentation.common.db-statement-sanitizer.enabled`, |
13 | 52 | `otel.instrumentation.jdbc.statement-sanitizer.enabled`, |
14 | 53 | `otel.instrumentation.mongo.statement-sanitizer.enabled`, and |
15 | 54 | `otel.instrumentation.r2dbc.statement-sanitizer.enabled` in favor of the corresponding |
16 | | - `*.query-sanitization.enabled` names, and deprecated the declarative config name |
17 | | - `statement_sanitizer` in favor of `query_sanitization` |
18 | | -- Deprecated the declarative config group `common.database` in favor of `common.db` |
19 | | -- Deprecated the common DB sqlcommenter system property name |
| 55 | + `*.query-sanitization.enabled` names, deprecated |
20 | 56 | `otel.instrumentation.common.experimental.db-sqlcommenter.enabled` in favor of |
21 | | - `otel.instrumentation.common.db.experimental.sqlcommenter.enabled` |
22 | | -- Deprecated the GraphQL system property name |
23 | | - `otel.instrumentation.graphql.query-sanitizer.enabled` and declarative config name |
24 | | - `query_sanitizer` in favor of `otel.instrumentation.graphql.query-sanitization.enabled` and |
25 | | - `query_sanitization` |
| 57 | + `otel.instrumentation.common.db.experimental.sqlcommenter.enabled`, and deprecated |
| 58 | + `otel.instrumentation.graphql.query-sanitizer.enabled` in favor of |
| 59 | + `otel.instrumentation.graphql.query-sanitization.enabled` |
| 60 | + ([#17464](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17464)) |
| 61 | +- Deprecate `InstrumentationModule.isIndyModule()`; indy mode is now determined by the agent |
| 62 | + distribution configuration instead of per-module overrides. |
| 63 | + ([#17713](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17713)) |
| 64 | + |
| 65 | +### 📈 Enhancements |
| 66 | + |
| 67 | +- Remove `log4j.map_message.` prefix from MapMessage attributes when |
| 68 | + `otel.instrumentation.common.v3-preview` is enabled. |
| 69 | + ([#13871](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/13871)) |
| 70 | +- Stop normalizing messaging header names (dash to underscore) when |
| 71 | + `otel.instrumentation.common.v3-preview` is enabled, so captured header attribute keys now |
| 72 | + preserve the original header name. |
| 73 | + ([#14554](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/14554)) |
| 74 | +- Add `db.system.name` attribute to Vertx SQL client instrumentation when stable database semantic |
| 75 | + conventions are enabled (`otel.semconv-stability.opt-in=database`). |
| 76 | + ([#16254](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16254)) |
| 77 | +- JDBC instrumentation now supports the `db.system.name` attribute with stable semantic convention |
| 78 | + values (e.g., `postgresql`, `oracle.db`, `ibm.db2`, `sap.hana`) when stable database semantic |
| 79 | + conventions are enabled (`otel.semconv-stability.opt-in=database`). |
| 80 | + ([#16277](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16277)) |
| 81 | +- Add `otel.instrumentation.common.v3-preview` flag that enables upcoming 3.0 breaking changes |
| 82 | + early. |
| 83 | + ([#16459](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16459)) |
| 84 | +- Optimized log event MDC attribute mapping in jboss-logmanager, log4j, and logback appenders by |
| 85 | + pre-computing attribute keys at initialization. |
| 86 | + ([#16765](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16765)) |
| 87 | +- Add `messaging.kafka.bootstrap.servers` attribute to Kafka producer spans when |
| 88 | + `otel.instrumentation.kafka.experimental-span-attributes` is enabled. |
| 89 | + ([#17065](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17065)) |
| 90 | +- Disable servlet trace-id request attribute by default when |
| 91 | + `otel.instrumentation.common.v3-preview` is enabled. |
| 92 | + ([#17173](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17173)) |
| 93 | +- Disable thread details span processor (`otel.javaagent.add-thread-details`) by default when |
| 94 | + `otel.instrumentation.common.v3-preview` is enabled. |
| 95 | + ([#17215](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17215)) |
| 96 | +- Improved javaagent startup optimization by decomposing disjunction matchers, allowing more |
| 97 | + transformations to be skipped during class loading. |
| 98 | + ([#17227](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17227)) |
| 99 | +- Add stable `messaging.kafka.offset` attribute to Kafka instrumentation, gated behind |
| 100 | + `otel.semconv-stability.preview=messaging`. |
| 101 | + ([#17785](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17785)) |
| 102 | +- Preserve original casing of servlet request parameter names in attribute keys when |
| 103 | + `otel.instrumentation.common.v3-preview` is enabled. |
| 104 | + ([#17822](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17822)) |
| 105 | +- Add javaagent bridging support for OpenTelemetry API 1.61 stable methods including |
| 106 | + `Tracer.isEnabled()`, metric instrument `isEnabled()`, and `Logger.setBody(Body)` |
| 107 | + ([#17849](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17849)) |
| 108 | +- Fix warning printed on JDK 26 about changing the value of a final field with reflection. |
| 109 | + ([#17824](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17824)) |
| 110 | +- Align RMI context propagation limits with Tomcat defaults, reducing max entries from 1000 to 100 |
| 111 | + and adding an 8 KB total size limit to prevent excessively large payloads. |
| 112 | + ([#17870](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17870)) |
| 113 | + |
| 114 | +### 🛠️ Bug fixes |
| 115 | + |
| 116 | +- Fix `WebClientBeanPostProcessor` and `RestClientBeanPostProcessor` to avoid replacing |
| 117 | + user-customized builder beans when the OpenTelemetry tracing filter/interceptor is already |
| 118 | + registered. |
| 119 | + ([#15546](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/15546)) |
| 120 | +- Fix memory leak where bridged observable metric callbacks were never closed when the |
| 121 | + application-side instrument was garbage collected |
| 122 | + ([#16219](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16219)) |
| 123 | +- Fix Ktor server instrumentation leaking scope across requests due to `restoreThreadContext` not |
| 124 | + always being called by Ktor coroutine machinery. |
| 125 | + ([#16487](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16487)) |
| 126 | +- Add missing `schemaUrl` to servlet response instrumenter. |
| 127 | + ([#16560](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16560)) |
| 128 | +- Fix `OpenTelemetryContextDataProvider` calling `GlobalOpenTelemetry.get()` during class |
| 129 | + initialization, which could interfere with SDK setup ordering. |
| 130 | + ([#16638](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16638)) |
| 131 | +- Fix ZIO instrumentation destroying caller thread context on fiber suspend, which caused spans |
| 132 | + created after `unsafe.run` to lose their parent. |
| 133 | + ([#16647](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16647)) |
| 134 | +- Fix Spring Boot starter adding a duplicate OpenTelemetry logback appender when the appender is |
| 135 | + nested inside another appender. |
| 136 | + ([#16697](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16697)) |
| 137 | +- Fix bridging of `VALUE`-type attributes set via `AttributeKey.valueKey()` on spans and log records |
| 138 | + through the javaagent API bridge. |
| 139 | + ([#16750](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16750)) |
| 140 | +- Fix unsafe deserialization in RMI instrumentation that could lead to remote code execution |
| 141 | + (CVE-2026-33701) |
| 142 | + ([#16986](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16986)) |
| 143 | +- Fix boot loader class injection for `httpurlconnection`, `methods`, and `rmi` instrumentations to |
| 144 | + use `MethodHandles.Lookup` instead of unsafe fallback on JDK 23+. |
| 145 | + ([#17050](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17050)) |
| 146 | +- Fix runtime-telemetry to fall back to JMX metrics when `preferJfr` is enabled but JFR is not |
| 147 | + available. |
| 148 | + ([#17058](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17058)) |
| 149 | +- Fix `NullPointerException` in servlet instrumentation when response object is null during error |
| 150 | + handling. |
| 151 | + ([#17087](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17087)) |
| 152 | +- Limit sanitized Redis command length to 32 KB to prevent excessive memory usage from very large |
| 153 | + commands. |
| 154 | + ([#17139](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17139)) |
| 155 | +- Fix Apache Dubbo 2.7 instrumentation SPI resource path so that filters are properly discovered by |
| 156 | + Dubbo's extension loader. |
| 157 | + ([#17210](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17210)) |
| 158 | +- Fix span leak on cancelled requests in Spring WebFlux server library instrumentation. |
| 159 | + ([#17222](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17222)) |
| 160 | +- Fix Kafka wrapped producer to respect `setPropagationEnabled(false)` and not inject trace context |
| 161 | + into message headers when propagation is disabled. |
| 162 | + ([#17231](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17231)) |
| 163 | +- Fix deadlock in `IgnoredClassLoadersMatcher` caused by `computeIfAbsent` holding a lock while |
| 164 | + calling `loadClass`. |
| 165 | + ([#17241](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17241)) |
| 166 | +- Fix Pulsar consumer instrumentation failing to instrument message listeners in newer Pulsar client |
| 167 | + versions where `triggerListener` was refactored into a lambda. |
| 168 | + ([#17405](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17405)) |
| 169 | +- Fix Kafka producer wrapper silently dropping context propagation when `ProducerRecord` headers are |
| 170 | + read-only (e.g. when a record is sent a second time). |
| 171 | + ([#17530](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17530)) |
| 172 | +- Fix `NullPointerException` in Undertow instrumentation when the active-handlers context key is |
| 173 | + absent. |
| 174 | + ([#17559](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17559)) |
| 175 | +- Fix `HttpServerResponseCustomizer` error isolation so that a failing customizer no longer prevents |
| 176 | + subsequent customizers from running. |
| 177 | + ([#17617](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17617)) |
| 178 | +- Fix `rocketmq-client-4.8` instrumentation not recording spans for ONEWAY messages. |
| 179 | + ([#17656](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17656)) |
| 180 | +- Fix internal application logger not activating when `otel.instrumentation.common.default-enabled` |
| 181 | + is set to `false`. |
| 182 | + ([#17657](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17657)) |
| 183 | +- Fix floating-point precision issue when converting Micrometer timer histogram bucket boundaries |
| 184 | + from nanoseconds to the target time unit. |
| 185 | + ([#17715](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17715)) |
| 186 | +- Fix `ClassNotFoundException` in `MicrometerBridgeAutoConfiguration` when Spring Boot Actuator |
| 187 | + metrics module is not on the classpath in Spring Boot 4. |
| 188 | + ([#17723](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17723)) |
26 | 189 |
|
27 | 190 | ## Version 2.26.1 (2026-03-23) |
28 | 191 |
|
|
0 commit comments