Skip to content

Commit 6d400d2

Browse files
committed
Change route
1 parent 5631c54 commit 6d400d2

10 files changed

Lines changed: 85 additions & 64 deletions

File tree

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
# Settings for the Runtime Telemetry instrumentation
22

3-
| System property | Type | Default | Description |
4-
| ------------------------------------------------------------------------------------- | ------- | ------- | ------------------------------------------------------------------------------------------ |
5-
| `otel.instrumentation.runtime-telemetry.emit-experimental-metrics` | Boolean | `false` | Enable the capture of experimental JMX-based metrics. |
6-
| `otel.instrumentation.runtime-telemetry.jfr.enabled` | Boolean | `false` | Enable the default JFR-based runtime metrics on Java 17+. |
7-
| `otel.instrumentation.runtime-telemetry.jfr.enable-all` | Boolean | `false` | Enable all JFR-based runtime metrics on Java 17+, including metrics that overlap with JMX. |
8-
| `otel.instrumentation.runtime-telemetry.experimental.package-emitter.enabled` | Boolean | `false` | Enable creating events for JAR libraries used by the application. |
9-
| `otel.instrumentation.runtime-telemetry.experimental.package-emitter.jars-per-second` | Integer | 10 | The number of JAR files processed per second. |
3+
| System property | Type | Default | Description |
4+
| ------------------------------------------------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------------- |
5+
| `otel.instrumentation.runtime-telemetry.emit-experimental-metrics` | Boolean | `false` | Enable the capture of experimental JMX-based metrics. |
6+
| `otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics` | Boolean | `false` | Enable the capture of experimental JFR-based metrics on Java 17+. |
7+
| `otel.instrumentation.runtime-telemetry.experimental.prefer-jfr` | Boolean | `false` | Prefer JFR over JMX for metrics available from both sources, on Java 17+. |
8+
| `otel.instrumentation.runtime-telemetry.experimental.package-emitter.enabled` | Boolean | `false` | Enable creating events for JAR libraries used by the application. |
9+
| `otel.instrumentation.runtime-telemetry.experimental.package-emitter.jars-per-second` | Integer | 10 | The number of JAR files processed per second. |
1010

1111
## Deprecated Properties (to be removed in 3.0)
1212

13-
| System property | Type | Default | Description |
14-
| ------------------------------------------------------------------------ | ------- | ------- | --------------------------------------------------------------------------------- |
15-
| `otel.instrumentation.runtime-telemetry.capture-gc-cause` | Boolean | `false` | Enable the capture of the jvm.gc.cause attribute. Will always be captured in 3.0. |
16-
| `otel.instrumentation.runtime-telemetry.emit-experimental-telemetry` | Boolean | `false` | Use `emit-experimental-metrics` instead. |
17-
| `otel.instrumentation.runtime-telemetry.experimental.prefer-jfr` | Boolean | `false` | Use `jfr.enable-all` instead. |
18-
| `otel.instrumentation.runtime-telemetry.package-emitter.enabled` | Boolean | `false` | Use `experimental.package-emitter.enabled` instead. |
19-
| `otel.instrumentation.runtime-telemetry.package-emitter.jars-per-second` | Integer | 10 | Use `experimental.package-emitter.jars-per-second` instead. |
20-
| `otel.instrumentation.runtime-telemetry-java17.enabled` | Boolean | `false` | Deprecated. Use `jfr.enabled` instead. |
21-
| `otel.instrumentation.runtime-telemetry-java17.enable-all` | Boolean | `false` | Deprecated. Use `jfr.enable-all` instead. |
13+
| System property | Type | Default | Description |
14+
| ------------------------------------------------------------------------ | ------- | ------- | ------------------------------------------------------------------------------------------------------------ |
15+
| `otel.instrumentation.runtime-telemetry.capture-gc-cause` | Boolean | `false` | Enable the capture of the jvm.gc.cause attribute. Will always be captured in 3.0. |
16+
| `otel.instrumentation.runtime-telemetry.emit-experimental-telemetry` | Boolean | `false` | Use `emit-experimental-metrics` instead. |
17+
| `otel.instrumentation.runtime-telemetry.package-emitter.enabled` | Boolean | `false` | Use `experimental.package-emitter.enabled` instead. |
18+
| `otel.instrumentation.runtime-telemetry.package-emitter.jars-per-second` | Integer | 10 | Use `experimental.package-emitter.jars-per-second` instead. |
19+
| `otel.instrumentation.runtime-telemetry-java17.enabled` | Boolean | `false` | Deprecated. Use `emit-experimental-jfr-metrics` instead. |
20+
| `otel.instrumentation.runtime-telemetry-java17.enable-all` | Boolean | `false` | Deprecated. Use `experimental.prefer-jfr` and `emit-experimental-jfr-metrics` instead. |

instrumentation/runtime-telemetry/library/README.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,10 @@ builder methods.
9696
- `otel.instrumentation.runtime-telemetry.emit-experimental-metrics=true`
9797
(`emitExperimentalMetrics()`): enables additional JMX-based metrics that are not yet
9898
stable in the semantic conventions.
99-
- `otel.instrumentation.runtime-telemetry.jfr.enabled=true` (Java 17+): enables the
100-
default set of JFR-based metrics. These metrics have no JMX equivalent, so they
101-
complement the JMX metrics without duplication.
102-
- `otel.instrumentation.runtime-telemetry.jfr.enable-all=true` (Java 17+): additionally
103-
sources metrics from JFR instead of JMX wherever a JFR equivalent exists (see
99+
- `otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics=true` (Java 17+):
100+
enables additional JFR-based metrics that are not yet stable in the semantic conventions.
101+
- `otel.instrumentation.runtime-telemetry.experimental.prefer-jfr=true` (Java 17+): sources
102+
metrics from JFR instead of JMX wherever a JFR equivalent exists (see
104103
[JFR-based (Overlap with JMX)](#jfr-based-overlap-with-jmx) below). The corresponding
105104
JMX metrics are suppressed.
106105

@@ -152,7 +151,7 @@ These metrics are collected via JMX on all Java versions:
152151

153152
#### JFR-based (Overlap with JMX)
154153

155-
When `jfr.enable-all=true`, the following metrics are sourced from JFR instead of JMX
154+
When `experimental.prefer-jfr=true`, the following metrics are sourced from JFR instead of JMX
156155
(the JMX-based registration is suppressed to avoid duplicates):
157156

158157
| Metric |

instrumentation/runtime-telemetry/library/src/main/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryBuilder.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,12 @@ public final class RuntimeTelemetryBuilder {
3737

3838
static {
3939
Experimental.internalSetEmitExperimentalMetrics(
40+
(builder, emit) -> builder.emitExperimentalMetrics = emit);
41+
Experimental.internalSetEmitExperimentalJfrMetrics(
4042
(builder, emit) -> {
41-
builder.emitExperimentalMetrics = emit;
43+
if (emit) {
44+
builder.jfrConfig.enableExperimentalFeatures();
45+
}
4246
});
4347
Experimental.internalSetPreferJfrMetrics(
4448
(builder, prefer) -> builder.preferJfrMetrics = prefer);

instrumentation/runtime-telemetry/library/src/main/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/Experimental.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ public final class Experimental {
1919
@Nullable
2020
private static volatile BiConsumer<RuntimeTelemetryBuilder, Boolean> setEmitExperimentalMetrics;
2121

22+
@Nullable
23+
private static volatile BiConsumer<RuntimeTelemetryBuilder, Boolean>
24+
setEmitExperimentalJfrMetrics;
25+
2226
@Nullable
2327
private static volatile BiConsumer<RuntimeTelemetryBuilder, Boolean> setPreferJfrMetrics;
2428

@@ -43,6 +47,27 @@ public static void internalSetEmitExperimentalMetrics(
4347
Experimental.setEmitExperimentalMetrics = setEmitExperimentalMetrics;
4448
}
4549

50+
/**
51+
* Sets whether experimental JFR-based metrics should be emitted (Java 17+). Experimental metrics
52+
* are those not marked as stable in the <a
53+
* href="https://github.com/open-telemetry/semantic-conventions/blob/main/docs/runtime/jvm-metrics.md">semantic
54+
* conventions</a>.
55+
*
56+
* @param builder the runtime telemetry builder
57+
* @param emitExperimentalJfrMetrics {@code true} to emit experimental JFR metrics
58+
*/
59+
public static void setEmitExperimentalJfrMetrics(
60+
RuntimeTelemetryBuilder builder, boolean emitExperimentalJfrMetrics) {
61+
if (setEmitExperimentalJfrMetrics != null) {
62+
setEmitExperimentalJfrMetrics.accept(builder, emitExperimentalJfrMetrics);
63+
}
64+
}
65+
66+
public static void internalSetEmitExperimentalJfrMetrics(
67+
BiConsumer<RuntimeTelemetryBuilder, Boolean> setEmitExperimentalJfrMetrics) {
68+
Experimental.setEmitExperimentalJfrMetrics = setEmitExperimentalJfrMetrics;
69+
}
70+
4671
/**
4772
* Sets whether to prefer JFR over JMX for metrics where both collection methods are available.
4873
* When set to {@code true}, metrics available from both sources will be collected using JFR. When

instrumentation/runtime-telemetry/library/src/main/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/Internal.java

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,8 @@ private static void configureJava17EnableAll(
284284
RuntimeTelemetryBuilder builder, DeclarativeConfigProperties config) {
285285
logger.warning(
286286
"otel.instrumentation.runtime-telemetry-java17.enable-all is deprecated and will be"
287-
+ " removed in 3.0. Use otel.instrumentation.runtime-telemetry.jfr.enable-all"
288-
+ " instead.");
287+
+ " removed in 3.0. Use otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics"
288+
+ " and otel.instrumentation.runtime-telemetry.experimental.prefer-jfr instead.");
289289
// For backward compatibility: route JMX metrics to java8 scope, JFR metrics to java17 scope
290290
Internal.setJmxInstrumentationName(builder, "io.opentelemetry.runtime-telemetry-java8");
291291
Internal.setJfrInstrumentationName(builder, "io.opentelemetry.runtime-telemetry-java17");
@@ -311,7 +311,8 @@ private static void configureJava17EnableAll(
311311
private static void configureJava17Enabled(RuntimeTelemetryBuilder builder) {
312312
logger.warning(
313313
"otel.instrumentation.runtime-telemetry-java17.enabled is deprecated and will be"
314-
+ " removed in 3.0. Use otel.instrumentation.runtime-telemetry.jfr.enabled instead.");
314+
+ " removed in 3.0. Use"
315+
+ " otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics instead.");
315316
enableDefaultJfrFeatures(builder);
316317
// Preserve legacy behavior of the deprecated runtime-telemetry-java17 module, which enabled
317318
// CPU_COUNT_METRICS by default (emitted as jvm.cpu.limit via useLegacyJfrCpuCountMetric).
@@ -331,23 +332,12 @@ private static void enableDefaultJfrFeatures(RuntimeTelemetryBuilder builder) {
331332

332333
private static void configureUnified(
333334
RuntimeTelemetryBuilder builder, DeclarativeConfigProperties config) {
334-
// Check if user is using new unified config options
335335
boolean emitExperimentalMetrics =
336336
config.getBoolean("emit_experimental_metrics/development", false);
337-
Boolean jfrEnabled = config.get("jfr").getBoolean("enabled");
338-
Boolean jfrEnableAll = config.get("jfr").getBoolean("enable_all");
339-
Boolean deprecatedPreferJfr = config.getBoolean("prefer_jfr/development");
340-
if (deprecatedPreferJfr != null) {
341-
logger.warning(
342-
"otel.instrumentation.runtime-telemetry.experimental.prefer-jfr is deprecated and"
343-
+ " will be removed in 3.0. Use"
344-
+ " otel.instrumentation.runtime-telemetry.jfr.enable-all instead.");
345-
}
346-
347-
boolean enableAllJfr =
348-
jfrEnableAll != null ? jfrEnableAll : Boolean.TRUE.equals(deprecatedPreferJfr);
349-
boolean enableDefaultJfr = Boolean.TRUE.equals(jfrEnabled);
350-
boolean newConfig = emitExperimentalMetrics || enableDefaultJfr || enableAllJfr;
337+
boolean emitExperimentalJfrMetrics =
338+
config.getBoolean("emit_experimental_jfr_metrics/development", false);
339+
boolean preferJfrMetrics = config.getBoolean("prefer_jfr/development", false);
340+
boolean newConfig = emitExperimentalMetrics || emitExperimentalJfrMetrics || preferJfrMetrics;
351341

352342
if (newConfig) {
353343
// New unified config: Use new instrumentation name for both JMX and JFR
@@ -373,11 +363,11 @@ private static void configureUnified(
373363
Experimental.setEmitExperimentalMetrics(builder, true);
374364
}
375365

376-
if (enableAllJfr) {
377-
Experimental.setPreferJfrMetrics(builder, true);
366+
if (emitExperimentalJfrMetrics) {
367+
Experimental.setEmitExperimentalJfrMetrics(builder, true);
378368
}
379-
if (enableDefaultJfr || enableAllJfr) {
380-
enableDefaultJfrFeatures(builder);
369+
if (preferJfrMetrics) {
370+
Experimental.setPreferJfrMetrics(builder, true);
381371
}
382372

383373
// Apply capture_gc_cause

instrumentation/runtime-telemetry/metadata.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ configurations:
1111
description: Enables the capture of experimental JMX-based JVM runtime metrics.
1212
type: boolean
1313
default: false
14-
- name: otel.instrumentation.runtime-telemetry.jfr.enabled
15-
declarative_name: java.runtime_telemetry.jfr.enabled
14+
- name: otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics
15+
declarative_name: java.runtime_telemetry.emit_experimental_jfr_metrics/development
1616
description: >
17-
Enables the default JFR-based JVM runtime metrics on Java 17+.
17+
Enables the capture of experimental JFR-based JVM runtime metrics on Java 17+.
1818
type: boolean
1919
default: false
20-
- name: otel.instrumentation.runtime-telemetry.jfr.enable-all
21-
declarative_name: java.runtime_telemetry.jfr.enable_all
20+
- name: otel.instrumentation.runtime-telemetry.experimental.prefer-jfr
21+
declarative_name: java.runtime_telemetry.prefer_jfr/development
2222
description: >
23-
Enables all JFR-based JVM runtime metrics, including metrics that overlap with JMX, on Java
24-
17+.
23+
Prefer JFR over JMX for metrics available from both sources, on Java 17+. When enabled,
24+
overlapping metrics are collected via JFR and the corresponding JMX metrics are suppressed.
2525
type: boolean
2626
default: false
2727
- name: otel.instrumentation.runtime-telemetry.experimental.package-emitter.enabled

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/JfrFeature.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
*
1717
* @deprecated Use {@link RuntimeTelemetry#builder(io.opentelemetry.api.OpenTelemetry)} in the
1818
* {@code runtime-telemetry} module instead. To enable experimental features, use {@link
19-
* io.opentelemetry.instrumentation.runtimetelemetry.internal.Experimental#setEmitExperimentalMetrics(io.opentelemetry.instrumentation.runtimetelemetry.RuntimeTelemetryBuilder,
19+
* io.opentelemetry.instrumentation.runtimetelemetry.internal.Experimental#setEmitExperimentalJfrMetrics(io.opentelemetry.instrumentation.runtimetelemetry.RuntimeTelemetryBuilder,
2020
* boolean)}. When using runtime-telemetry autoconfiguration, use {@code
21-
* otel.instrumentation.runtime-telemetry.jfr.enabled=true} or {@code
22-
* otel.instrumentation.runtime-telemetry.jfr.enable-all=true}. To disable specific metrics,
23-
* configure metric views.
21+
* otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics=true} and/or {@code
22+
* otel.instrumentation.runtime-telemetry.experimental.prefer-jfr=true}. To disable specific
23+
* metrics, configure metric views.
2424
*/
2525
@Deprecated
2626
public enum JfrFeature {

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/RuntimeMetricsBuilder.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,11 @@ Object getJfrConfig() {
6464
*
6565
* @deprecated Use {@link RuntimeTelemetry#builder(OpenTelemetry)} in the {@code
6666
* runtime-telemetry} module instead. To enable experimental features, use {@link
67-
* Experimental#setEmitExperimentalMetrics(RuntimeTelemetryBuilder, boolean)}. When using
67+
* Experimental#setEmitExperimentalJfrMetrics(RuntimeTelemetryBuilder, boolean)}. When using
6868
* runtime-telemetry autoconfiguration, use {@code
69-
* otel.instrumentation.runtime-telemetry.jfr.enable-all=true} to enable all JFR metrics.
69+
* otel.instrumentation.runtime-telemetry.experimental.prefer-jfr=true} together with {@code
70+
* otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics=true} to enable all
71+
* JFR metrics.
7072
*/
7173
@Deprecated
7274
@CanIgnoreReturnValue
@@ -80,11 +82,11 @@ public RuntimeMetricsBuilder enableAllFeatures() {
8082
*
8183
* @deprecated Use {@link RuntimeTelemetry#builder(OpenTelemetry)} in the {@code
8284
* runtime-telemetry} module instead. To enable experimental features, use {@link
83-
* Experimental#setEmitExperimentalMetrics(RuntimeTelemetryBuilder, boolean)}. When using
85+
* Experimental#setEmitExperimentalJfrMetrics(RuntimeTelemetryBuilder, boolean)}. When using
8486
* runtime-telemetry autoconfiguration, use {@code
85-
* otel.instrumentation.runtime-telemetry.jfr.enabled=true} or {@code
86-
* otel.instrumentation.runtime-telemetry.jfr.enable-all=true}. To disable specific metrics,
87-
* configure metric views.
87+
* otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics=true} and/or {@code
88+
* otel.instrumentation.runtime-telemetry.experimental.prefer-jfr=true}. To disable specific
89+
* metrics, configure metric views.
8890
*/
8991
@Deprecated
9092
@CanIgnoreReturnValue

smoke-tests-otel-starter/spring-boot-3/src/test/java/io/opentelemetry/spring/smoketest/OtelSpringStarterSmokeTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
// The headers are simply set here to make sure that headers can be parsed
2727
"otel.exporter.otlp.headers.c=3",
2828
"otel.instrumentation.runtime-telemetry.emit-experimental-metrics=true",
29-
"otel.instrumentation.runtime-telemetry.jfr.enable-all=true",
29+
"otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics=true",
30+
"otel.instrumentation.runtime-telemetry.experimental.prefer-jfr=true",
3031
"otel.instrumentation.common.thread_details.enabled=true",
3132
})
3233
class OtelSpringStarterSmokeTest extends AbstractOtelSpringStarterSmokeTest {

smoke-tests-otel-starter/spring-boot-4/src/test/java/io/opentelemetry/spring/smoketest/OtelSpringStarterSmokeTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
// The headers are simply set here to make sure that headers can be parsed
3333
"otel.exporter.otlp.headers.c=3",
3434
"otel.instrumentation.runtime-telemetry.emit-experimental-metrics=true",
35-
"otel.instrumentation.runtime-telemetry.jfr.enable-all=true",
35+
"otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics=true",
36+
"otel.instrumentation.runtime-telemetry.experimental.prefer-jfr=true",
3637
"otel.instrumentation.common.thread_details.enabled=true",
3738
"logging.level.org.springframework.boot.autoconfigure=DEBUG",
3839
})

0 commit comments

Comments
 (0)