Skip to content

Commit 9d0c25e

Browse files
committed
Refactored OTLP exporter schema
1 parent 5bf6a97 commit 9d0c25e

28 files changed

+512
-409
lines changed

exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtil.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,6 @@ public static String getOtlpProtocol(String dataType, ConfigProperties config) {
5252
return config.getString("otel.exporter.otlp.protocol", PROTOCOL_GRPC);
5353
}
5454

55-
/** Determine the configured OTLP protocol for the {@code dataType}. */
56-
public static String getStructuredConfigOtlpProtocol(StructuredConfigProperties config) {
57-
// NOTE: The default OTLP protocol is different for declarative config than for env var / system
58-
// property based config. This is intentional. OpenTelemetry changed the default protocol
59-
// recommendation from grpc to http/protobuf, but the autoconfigure's env var / system property
60-
// based config did not update to reflect this before stabilizing, and changing is a breaking
61-
// change requiring a major version bump. Declarative config is not yet stable and therefore can
62-
// switch to the current default recommendation, which aligns also aligns with the behavior of
63-
// the OpenTelemetry Java Agent 2.x+.
64-
return config.getString("protocol", PROTOCOL_HTTP_PROTOBUF);
65-
}
66-
6755
/** Invoke the setters with the OTLP configuration for the {@code dataType}. */
6856
@SuppressWarnings("TooManyParameters")
6957
public static void configureOtlpExporterBuilder(
@@ -176,9 +164,8 @@ public static void configureOtlpExporterBuilder(
176164
Consumer<byte[]> setTrustedCertificates,
177165
BiConsumer<byte[], byte[]> setClientTls,
178166
Consumer<RetryPolicy> setRetryPolicy,
179-
Consumer<MemoryMode> setMemoryMode) {
180-
String protocol = getStructuredConfigOtlpProtocol(config);
181-
boolean isHttpProtobuf = protocol.equals(PROTOCOL_HTTP_PROTOBUF);
167+
Consumer<MemoryMode> setMemoryMode,
168+
boolean isHttpProtobuf) {
182169
URL endpoint = validateEndpoint(config.getString("endpoint"), isHttpProtobuf);
183170
if (endpoint != null) {
184171
setEndpoint.accept(endpoint.toString());
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.exporter.otlp.internal;
7+
8+
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_LOGS;
9+
10+
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
11+
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder;
12+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
13+
import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties;
14+
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
15+
16+
/**
17+
* Declarative configuration SPI implementation for {@link OtlpGrpcLogRecordExporter}.
18+
*
19+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
20+
* at any time.
21+
*/
22+
public class OtlpGrpcLogRecordExporterComponentProvider
23+
implements ComponentProvider<LogRecordExporter> {
24+
25+
@Override
26+
public Class<LogRecordExporter> getType() {
27+
return LogRecordExporter.class;
28+
}
29+
30+
@Override
31+
public String getName() {
32+
return "otlp_grpc";
33+
}
34+
35+
@Override
36+
public LogRecordExporter create(StructuredConfigProperties config) {
37+
OtlpGrpcLogRecordExporterBuilder builder = grpcBuilder();
38+
39+
OtlpConfigUtil.configureOtlpExporterBuilder(
40+
DATA_TYPE_LOGS,
41+
config,
42+
builder::setEndpoint,
43+
builder::addHeader,
44+
builder::setCompression,
45+
builder::setTimeout,
46+
builder::setTrustedCertificates,
47+
builder::setClientTls,
48+
builder::setRetryPolicy,
49+
builder::setMemoryMode,
50+
/* isHttpProtobuf= */ false);
51+
52+
return builder.build();
53+
}
54+
55+
// Visible for testing
56+
OtlpGrpcLogRecordExporterBuilder grpcBuilder() {
57+
return OtlpGrpcLogRecordExporter.builder();
58+
}
59+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.exporter.otlp.internal;
7+
8+
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_METRICS;
9+
10+
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
11+
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
12+
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder;
13+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
14+
import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties;
15+
import io.opentelemetry.sdk.metrics.export.MetricExporter;
16+
17+
/**
18+
* Declarative configuration SPI implementation for {@link OtlpGrpcMetricExporter}.
19+
*
20+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
21+
* at any time.
22+
*/
23+
public class OtlpGrpcMetricExporterComponentProvider implements ComponentProvider<MetricExporter> {
24+
25+
@Override
26+
public Class<MetricExporter> getType() {
27+
return MetricExporter.class;
28+
}
29+
30+
@Override
31+
public String getName() {
32+
return "otlp_grpc";
33+
}
34+
35+
@Override
36+
public MetricExporter create(StructuredConfigProperties config) {
37+
OtlpGrpcMetricExporterBuilder builder = grpcBuilder();
38+
39+
OtlpConfigUtil.configureOtlpExporterBuilder(
40+
DATA_TYPE_METRICS,
41+
config,
42+
builder::setEndpoint,
43+
builder::addHeader,
44+
builder::setCompression,
45+
builder::setTimeout,
46+
builder::setTrustedCertificates,
47+
builder::setClientTls,
48+
builder::setRetryPolicy,
49+
builder::setMemoryMode,
50+
/* isHttpProtobuf= */ false);
51+
ExporterBuilderUtil.configureOtlpAggregationTemporality(
52+
config, builder::setAggregationTemporalitySelector);
53+
ExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
54+
config, builder::setDefaultAggregationSelector);
55+
56+
return builder.build();
57+
}
58+
59+
// Visible for testing
60+
OtlpGrpcMetricExporterBuilder grpcBuilder() {
61+
return OtlpGrpcMetricExporter.builder();
62+
}
63+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.exporter.otlp.internal;
7+
8+
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_TRACES;
9+
10+
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
11+
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder;
12+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
13+
import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties;
14+
import io.opentelemetry.sdk.trace.export.SpanExporter;
15+
16+
/**
17+
* Declarative configuration SPI implementation for {@link OtlpGrpcSpanExporter}.
18+
*
19+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
20+
* at any time.
21+
*/
22+
public class OtlpGrpcSpanExporterComponentProvider implements ComponentProvider<SpanExporter> {
23+
24+
@Override
25+
public Class<SpanExporter> getType() {
26+
return SpanExporter.class;
27+
}
28+
29+
@Override
30+
public String getName() {
31+
return "otlp_grpc";
32+
}
33+
34+
@Override
35+
public SpanExporter create(StructuredConfigProperties config) {
36+
OtlpGrpcSpanExporterBuilder builder = grpcBuilder();
37+
38+
OtlpConfigUtil.configureOtlpExporterBuilder(
39+
DATA_TYPE_TRACES,
40+
config,
41+
builder::setEndpoint,
42+
builder::addHeader,
43+
builder::setCompression,
44+
builder::setTimeout,
45+
builder::setTrustedCertificates,
46+
builder::setClientTls,
47+
builder::setRetryPolicy,
48+
builder::setMemoryMode,
49+
/* isHttpProtobuf= */ false);
50+
51+
return builder.build();
52+
}
53+
54+
// Visible for testing
55+
OtlpGrpcSpanExporterBuilder grpcBuilder() {
56+
return OtlpGrpcSpanExporter.builder();
57+
}
58+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.exporter.otlp.internal;
7+
8+
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_LOGS;
9+
10+
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
11+
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder;
12+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
13+
import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties;
14+
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
15+
16+
/**
17+
* Declarative configuration SPI implementation for {@link OtlpHttpLogRecordExporter}.
18+
*
19+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
20+
* at any time.
21+
*/
22+
public class OtlpHttpLogRecordExporterComponentProvider
23+
implements ComponentProvider<LogRecordExporter> {
24+
25+
@Override
26+
public Class<LogRecordExporter> getType() {
27+
return LogRecordExporter.class;
28+
}
29+
30+
@Override
31+
public String getName() {
32+
return "otlp_http";
33+
}
34+
35+
@Override
36+
public LogRecordExporter create(StructuredConfigProperties config) {
37+
OtlpHttpLogRecordExporterBuilder builder = httpBuilder();
38+
39+
OtlpConfigUtil.configureOtlpExporterBuilder(
40+
DATA_TYPE_LOGS,
41+
config,
42+
builder::setEndpoint,
43+
builder::addHeader,
44+
builder::setCompression,
45+
builder::setTimeout,
46+
builder::setTrustedCertificates,
47+
builder::setClientTls,
48+
builder::setRetryPolicy,
49+
builder::setMemoryMode,
50+
/* isHttpProtobuf= */ true);
51+
52+
return builder.build();
53+
}
54+
55+
// Visible for testing
56+
OtlpHttpLogRecordExporterBuilder httpBuilder() {
57+
return OtlpHttpLogRecordExporter.builder();
58+
}
59+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.exporter.otlp.internal;
7+
8+
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_METRICS;
9+
10+
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
11+
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter;
12+
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder;
13+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
14+
import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties;
15+
import io.opentelemetry.sdk.metrics.export.MetricExporter;
16+
17+
/**
18+
* Declarative configuration SPI implementation for {@link OtlpHttpMetricExporter}.
19+
*
20+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
21+
* at any time.
22+
*/
23+
public class OtlpHttpMetricExporterComponentProvider implements ComponentProvider<MetricExporter> {
24+
25+
@Override
26+
public Class<MetricExporter> getType() {
27+
return MetricExporter.class;
28+
}
29+
30+
@Override
31+
public String getName() {
32+
return "otlp_http";
33+
}
34+
35+
@Override
36+
public MetricExporter create(StructuredConfigProperties config) {
37+
OtlpHttpMetricExporterBuilder builder = httpBuilder();
38+
39+
OtlpConfigUtil.configureOtlpExporterBuilder(
40+
DATA_TYPE_METRICS,
41+
config,
42+
builder::setEndpoint,
43+
builder::addHeader,
44+
builder::setCompression,
45+
builder::setTimeout,
46+
builder::setTrustedCertificates,
47+
builder::setClientTls,
48+
builder::setRetryPolicy,
49+
builder::setMemoryMode,
50+
/* isHttpProtobuf= */ true);
51+
ExporterBuilderUtil.configureOtlpAggregationTemporality(
52+
config, builder::setAggregationTemporalitySelector);
53+
ExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
54+
config, builder::setDefaultAggregationSelector);
55+
56+
return builder.build();
57+
}
58+
59+
// Visible for testing
60+
OtlpHttpMetricExporterBuilder httpBuilder() {
61+
return OtlpHttpMetricExporter.builder();
62+
}
63+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.exporter.otlp.internal;
7+
8+
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_TRACES;
9+
10+
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
11+
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder;
12+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
13+
import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties;
14+
import io.opentelemetry.sdk.trace.export.SpanExporter;
15+
16+
/**
17+
* Declarative configuration SPI implementation for {@link OtlpHttpSpanExporter}.
18+
*
19+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
20+
* at any time.
21+
*/
22+
public class OtlpHttpSpanExporterComponentProvider implements ComponentProvider<SpanExporter> {
23+
24+
@Override
25+
public Class<SpanExporter> getType() {
26+
return SpanExporter.class;
27+
}
28+
29+
@Override
30+
public String getName() {
31+
return "otlp_http";
32+
}
33+
34+
@Override
35+
public SpanExporter create(StructuredConfigProperties config) {
36+
OtlpHttpSpanExporterBuilder builder = httpBuilder();
37+
38+
OtlpConfigUtil.configureOtlpExporterBuilder(
39+
DATA_TYPE_TRACES,
40+
config,
41+
builder::setEndpoint,
42+
builder::addHeader,
43+
builder::setCompression,
44+
builder::setTimeout,
45+
builder::setTrustedCertificates,
46+
builder::setClientTls,
47+
builder::setRetryPolicy,
48+
builder::setMemoryMode,
49+
/* isHttpProtobuf= */ true);
50+
51+
return builder.build();
52+
}
53+
54+
// Visible for testing
55+
OtlpHttpSpanExporterBuilder httpBuilder() {
56+
return OtlpHttpSpanExporter.builder();
57+
}
58+
}

0 commit comments

Comments
 (0)