Skip to content

Commit 166f60e

Browse files
authored
enable java experimental runtime metrics by default (elastic#1056)
1 parent 0e60b40 commit 166f60e

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

custom/src/main/java/co/elastic/otel/declarativeconfig/ElasticDeclarativeConfigurationCustomizer.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizerProvider;
3030
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessorModel;
3131
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchSpanProcessorModel;
32+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalInstrumentationModel;
33+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationModel;
34+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationPropertyModel;
3235
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalResourceDetectionModel;
3336
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalResourceDetectorModel;
3437
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporterModel;
@@ -58,16 +61,49 @@
5861
public class ElasticDeclarativeConfigurationCustomizer
5962
implements DeclarativeConfigurationCustomizerProvider {
6063

64+
private static final String RUNTIME_TELEMETRY = "runtime_telemetry";
65+
private static final String EMIT_EXPERIMENTAL_METRICS_DEVELOPMENT =
66+
"emit_experimental_metrics/development";
67+
6168
@Override
6269
public void customize(DeclarativeConfigurationCustomizer customizer) {
6370
customizer.addModelCustomizer(
6471
model -> {
6572
customizeResources(model);
6673
customizeUserAgent(model);
74+
customizeExperimentalRuntimeTelemetryMetrics(model);
6775
return model;
6876
});
6977
}
7078

79+
private static void customizeExperimentalRuntimeTelemetryMetrics(
80+
OpenTelemetryConfigurationModel model) {
81+
82+
ExperimentalInstrumentationModel instrumentationDevelopment =
83+
model.getInstrumentationDevelopment();
84+
if (instrumentationDevelopment == null) {
85+
instrumentationDevelopment = new ExperimentalInstrumentationModel();
86+
model.withInstrumentationDevelopment(instrumentationDevelopment);
87+
}
88+
89+
ExperimentalLanguageSpecificInstrumentationModel java = instrumentationDevelopment.getJava();
90+
if (java == null) {
91+
java = new ExperimentalLanguageSpecificInstrumentationModel();
92+
instrumentationDevelopment.withJava(java);
93+
}
94+
95+
ExperimentalLanguageSpecificInstrumentationPropertyModel runtimeTelemetry =
96+
java.getAdditionalProperties().get(RUNTIME_TELEMETRY);
97+
if (runtimeTelemetry == null) {
98+
runtimeTelemetry = new ExperimentalLanguageSpecificInstrumentationPropertyModel();
99+
java.withAdditionalProperty(RUNTIME_TELEMETRY, runtimeTelemetry);
100+
}
101+
if (runtimeTelemetry.getAdditionalProperties().get(EMIT_EXPERIMENTAL_METRICS_DEVELOPMENT)
102+
== null) {
103+
runtimeTelemetry.withAdditionalProperty(EMIT_EXPERIMENTAL_METRICS_DEVELOPMENT, true);
104+
}
105+
}
106+
71107
private static void customizeResources(OpenTelemetryConfigurationModel model) {
72108
// this is equivalent to adding the following explicitly in declarative configuration
73109
//

custom/src/test/java/co/elastic/otel/declarativeconfig/ElasticDeclarativeConfigurationCustomizerTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizerProvider;
3030
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessorModel;
3131
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchSpanProcessorModel;
32+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalInstrumentationModel;
33+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationModel;
34+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationPropertyModel;
3235
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporterModel;
3336
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessorModel;
3437
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LoggerProviderModel;
@@ -80,6 +83,12 @@ void defaultConfig() {
8083
assertThat(model.getTracerProvider()).isNull();
8184
assertThat(model.getMeterProvider()).isNull();
8285
assertThat(model.getLoggerProvider()).isNull();
86+
87+
// java experimental runtime metrics enabled by default
88+
assertThatJson(json(model.getInstrumentationDevelopment()))
89+
.inPath("java.runtime_telemetry.emit_experimental_metrics/development")
90+
.isBoolean()
91+
.isTrue();
8392
}
8493

8594
@ParameterizedTest
@@ -236,6 +245,28 @@ void addUserAgentPriority() {
236245
.contains("user-agent", "custom-user-Agent");
237246
}
238247

248+
@Test
249+
void optOutExperimentalRuntimeMetrics() {
250+
OpenTelemetryConfigurationModel model =
251+
new OpenTelemetryConfigurationModel()
252+
.withInstrumentationDevelopment(
253+
new ExperimentalInstrumentationModel()
254+
.withJava(
255+
new ExperimentalLanguageSpecificInstrumentationModel()
256+
.withAdditionalProperty(
257+
"runtime_telemetry",
258+
new ExperimentalLanguageSpecificInstrumentationPropertyModel()
259+
.withAdditionalProperty(
260+
"emit_experimental_metrics/development", false))));
261+
262+
model = applyConfigCustomize(model, new ElasticDeclarativeConfigurationCustomizer());
263+
264+
assertThatJson(json(model.getInstrumentationDevelopment()))
265+
.inPath("java.runtime_telemetry.emit_experimental_metrics/development")
266+
.isBoolean()
267+
.isFalse();
268+
}
269+
239270
@NotNull
240271
private static Map<String, String> userAgentHeader(String value) {
241272
Map<String, String> header = new HashMap<>();

0 commit comments

Comments
 (0)