Skip to content

Commit ecb469b

Browse files
Load OTel SDK config from environment variables and system properties. Fix #1416
1 parent ee61c7b commit ecb469b

File tree

2 files changed

+56
-19
lines changed

2 files changed

+56
-19
lines changed

maven-extension/src/main/java/io/opentelemetry/maven/OpenTelemetrySdkService.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.HashMap;
2121
import java.util.Locale;
2222
import java.util.Map;
23+
import java.util.Objects;
2324
import java.util.concurrent.TimeUnit;
2425
import javax.annotation.Nullable;
2526
import javax.annotation.PreDestroy;
@@ -59,16 +60,26 @@ public OpenTelemetrySdkService() {
5960
AutoConfiguredOpenTelemetrySdk.builder()
6061
.setServiceClassLoader(getClass().getClassLoader())
6162
.addPropertiesCustomizer(configProperties -> {
62-
// Change default of "otel.[traces,metrics,logs].exporter" from "otlp" to "none"
63+
// The OTel SDK by default sends data to the OTLP gRPC endpoint at localhost:4317.
64+
// Change this behavior to disable by default the OTel SDK in the Maven extension so
65+
// that it must be explicitly enabled by the user.
66+
// To change this default behavior, we set "otel.[traces,metrics,logs].exporter" to
67+
// "none" if the endpoint has not been specified
6368
if (configProperties.getString("otel.exporter.otlp.endpoint") == null) {
6469
Map<String, String> properties = new HashMap<>();
65-
if (configProperties.getString("otel.exporter.otlp.traces.endpoint") == null) {
70+
if (Objects.equals("otlp",
71+
configProperties.getString("otel.traces.exporter", "otlp"))
72+
&& configProperties.getString("otel.exporter.otlp.traces.endpoint") == null) {
6673
properties.put("otel.traces.exporter", "none");
6774
}
68-
if (configProperties.getString("otel.exporter.otlp.metrics.endpoint") == null) {
75+
if (Objects.equals("otlp",
76+
configProperties.getString("otel.metrics.exporter", "otlp"))
77+
&& configProperties.getString("otel.exporter.otlp.metrics.endpoint") == null) {
6978
properties.put("otel.metrics.exporter", "none");
7079
}
71-
if (configProperties.getString("otel.exporter.otlp.logs.endpoint") == null) {
80+
if (Objects.equals("otlp",
81+
configProperties.getString("otel.logs.exporter", "otlp"))
82+
&& configProperties.getString("otel.exporter.otlp.logs.endpoint") == null) {
7283
properties.put("otel.logs.exporter", "none");
7384
}
7485
return properties;

maven-extension/src/test/java/io/opentelemetry/maven/OpenTelemetrySdkServiceTest.java

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,29 +39,29 @@ public void testOverwrittenResourceAttributes() {
3939
System.setProperty("otel.service.name", "my-maven");
4040
System.setProperty("otel.resource.attributes", "key1=val1,key2=val2");
4141

42-
try (OpenTelemetrySdkService openTelemetrySdkService = new OpenTelemetrySdkService()) {
42+
try (OpenTelemetrySdkService openTelemetrySdkService = new OpenTelemetrySdkService()) {
4343

44-
Resource resource = openTelemetrySdkService.getResource();
45-
assertThat(resource.getAttribute(stringKey("service.name"))).isEqualTo("my-maven");
46-
assertThat(resource.getAttribute(stringKey("key1"))).isEqualTo("val1");
47-
assertThat(resource.getAttribute(stringKey("key2"))).isEqualTo("val2");
44+
Resource resource = openTelemetrySdkService.getResource();
45+
assertThat(resource.getAttribute(stringKey("service.name"))).isEqualTo("my-maven");
46+
assertThat(resource.getAttribute(stringKey("key1"))).isEqualTo("val1");
47+
assertThat(resource.getAttribute(stringKey("key2"))).isEqualTo("val2");
4848

4949
} finally {
50-
System.clearProperty("otel.service.name");
51-
System.clearProperty("otel.resource.attributes");
50+
System.clearProperty("otel.service.name");
51+
System.clearProperty("otel.resource.attributes");
5252
}
5353
}
5454

55-
/** Verify overwritten `"otel.exporter.otlp.endpoint" */
55+
/** Verify defining `otel.exporter.otlp.endpoint` works */
5656
@Test
5757
public void testOverwrittenExporterConfiguration_1() {
58-
System.setProperty("otel.exporter.otlp.endpoint", "http://example.com:4318");
58+
System.setProperty("otel.exporter.otlp.endpoint", "http://example.com:4317");
5959

6060
try (OpenTelemetrySdkService openTelemetrySdkService = new OpenTelemetrySdkService()) {
6161

62-
6362
ConfigProperties configProperties = openTelemetrySdkService.getConfigProperties();
64-
assertThat(configProperties.getString("otel.exporter.otlp.endpoint")).isEqualTo("http://example.com:4318");
63+
assertThat(configProperties.getString("otel.exporter.otlp.endpoint")).isEqualTo(
64+
"http://example.com:4317");
6565
assertThat(configProperties.getString("otel.traces.exporter")).isNull();
6666
assertThat(configProperties.getString("otel.metrics.exporter")).isNull();
6767
assertThat(configProperties.getString("otel.logs.exporter")).isNull();
@@ -71,18 +71,44 @@ public void testOverwrittenExporterConfiguration_1() {
7171
}
7272
}
7373

74-
/** Verify overwritten `"otel.exporter.otlp.traces.endpoint" */
74+
/** Verify defining `otel.exporter.otlp.traces.endpoint` works */
7575
@Test
7676
public void testOverwrittenExporterConfiguration_2() {
7777
System.clearProperty("otel.exporter.otlp.endpoint");
78-
System.setProperty("otel.exporter.otlp.traces.endpoint", "http://example.com:4318/v1/traces");
79-
System.setProperty("otel.exporter.otlp.traces.protocol", "http/protobuf");
78+
System.clearProperty("otel.traces.exporter");
79+
System.setProperty("otel.exporter.otlp.traces.endpoint", "http://example.com:4317/");
80+
81+
try (OpenTelemetrySdkService openTelemetrySdkService = new OpenTelemetrySdkService()) {
82+
83+
ConfigProperties configProperties = openTelemetrySdkService.getConfigProperties();
84+
assertThat(configProperties.getString("otel.exporter.otlp.endpoint")).isNull();
85+
assertThat(configProperties.getString("otel.exporter.otlp.traces.endpoint")).isEqualTo(
86+
"http://example.com:4317/");
87+
assertThat(configProperties.getString("otel.traces.exporter")).isNull();
88+
assertThat(configProperties.getString("otel.metrics.exporter")).isEqualTo("none");
89+
assertThat(configProperties.getString("otel.logs.exporter")).isEqualTo("none");
90+
91+
} finally {
92+
System.clearProperty("otel.exporter.otlp.endpoint");
93+
System.clearProperty("otel.traces.exporter");
94+
System.clearProperty("otel.exporter.otlp.traces.endpoint");
95+
}
96+
}
97+
98+
/** Verify defining `otel.exporter.otlp.traces.endpoint` and `otel.traces.exporter` works */
99+
@Test
100+
public void testOverwrittenExporterConfiguration_3() {
101+
System.clearProperty("otel.exporter.otlp.endpoint");
102+
System.setProperty("otel.traces.exporter", "otlp");
103+
System.setProperty("otel.exporter.otlp.traces.endpoint", "http://example.com:4317/");
80104

81105
try (OpenTelemetrySdkService openTelemetrySdkService = new OpenTelemetrySdkService()) {
82106

83107
ConfigProperties configProperties = openTelemetrySdkService.getConfigProperties();
84108
assertThat(configProperties.getString("otel.exporter.otlp.endpoint")).isNull();
85-
assertThat(configProperties.getString("otel.exporter.otlp.traces.endpoint")).isEqualTo("http://example.com:4318/v1/traces");
109+
assertThat(
110+
configProperties.getString("otel.exporter.otlp.traces.endpoint")).isEqualTo(
111+
"http://example.com:4317/");
86112
assertThat(configProperties.getString("otel.traces.exporter")).isNull();
87113
assertThat(configProperties.getString("otel.metrics.exporter")).isEqualTo("none");
88114
assertThat(configProperties.getString("otel.logs.exporter")).isEqualTo("none");

0 commit comments

Comments
 (0)