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