Skip to content

Commit 44a5935

Browse files
eddumelendezwilkinsona
authored andcommitted
Support Otlp Tracing's GRPC port from service connections
Otlp Tracing's exporter is configured using `Transport`. Current support for service connections read the mapped port for HTTP transport `4318`. This commits adds support to read port for GRPC transport `4317`. See spring-projectsgh-41333
1 parent 6f17ff5 commit 44a5935

File tree

7 files changed

+53
-11
lines changed

7 files changed

+53
-11
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/otlp/OtlpTracingConfigurations.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder;
2525

2626
import org.springframework.boot.actuate.autoconfigure.tracing.ConditionalOnEnabledTracing;
27+
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpProperties.Transport;
2728
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2829
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2930
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -34,6 +35,7 @@
3435
* Configurations imported by {@link OtlpAutoConfiguration}.
3536
*
3637
* @author Moritz Halbritter
38+
* @author Eddú Meléndez
3739
*/
3840
class OtlpTracingConfigurations {
3941

@@ -63,6 +65,11 @@ public String getUrl() {
6365
return this.properties.getEndpoint();
6466
}
6567

68+
@Override
69+
public String getGrpcEndpoint() {
70+
return this.properties.getEndpoint();
71+
}
72+
6673
}
6774

6875
}
@@ -79,7 +86,7 @@ static class Exporters {
7986
OtlpHttpSpanExporter otlpHttpSpanExporter(OtlpProperties properties,
8087
OtlpTracingConnectionDetails connectionDetails) {
8188
OtlpHttpSpanExporterBuilder builder = OtlpHttpSpanExporter.builder()
82-
.setEndpoint(connectionDetails.getUrl())
89+
.setEndpoint(resolveEndpoint(properties.getTransport(), connectionDetails))
8390
.setTimeout(properties.getTimeout())
8491
.setCompression(properties.getCompression().name().toLowerCase());
8592
for (Entry<String, String> header : properties.getHeaders().entrySet()) {
@@ -93,7 +100,7 @@ OtlpHttpSpanExporter otlpHttpSpanExporter(OtlpProperties properties,
93100
OtlpGrpcSpanExporter otlpGrpcSpanExporter(OtlpProperties properties,
94101
OtlpTracingConnectionDetails connectionDetails) {
95102
OtlpGrpcSpanExporterBuilder builder = OtlpGrpcSpanExporter.builder()
96-
.setEndpoint(connectionDetails.getUrl())
103+
.setEndpoint(resolveEndpoint(properties.getTransport(), connectionDetails))
97104
.setTimeout(properties.getTimeout())
98105
.setCompression(properties.getCompression().name().toLowerCase());
99106
for (Entry<String, String> header : properties.getHeaders().entrySet()) {
@@ -102,6 +109,11 @@ OtlpGrpcSpanExporter otlpGrpcSpanExporter(OtlpProperties properties,
102109
return builder.build();
103110
}
104111

112+
private static String resolveEndpoint(OtlpProperties.Transport transport,
113+
OtlpTracingConnectionDetails connectionDetails) {
114+
return (transport == Transport.HTTP) ? connectionDetails.getUrl() : connectionDetails.getGrpcEndpoint();
115+
}
116+
105117
}
106118

107119
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/otlp/OtlpTracingConnectionDetails.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2023 the original author or authors.
2+
* Copyright 2012-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -32,4 +32,8 @@ public interface OtlpTracingConnectionDetails extends ConnectionDetails {
3232
*/
3333
String getUrl();
3434

35+
default String getGrpcEndpoint() {
36+
return "http://localhost:4317/v1/traces";
37+
}
38+
3539
}

spring-boot-project/spring-boot-docker-compose/src/dockerTest/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests
3232

3333
@DockerComposeTest(composeFile = "otlp-compose.yaml", image = TestImage.OPENTELEMETRY)
3434
void runCreatesConnectionDetails(OtlpTracingConnectionDetails connectionDetails) {
35+
assertThat(connectionDetails.getGrpcEndpoint()).startsWith("http://").endsWith("/v1/traces");
3536
assertThat(connectionDetails.getUrl()).startsWith("http://").endsWith("/v1/traces");
3637
}
3738

spring-boot-project/spring-boot-docker-compose/src/dockerTest/resources/org/springframework/boot/docker/compose/service/connection/otlp/otlp-compose.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ services:
22
otlp:
33
image: '{imageName}'
44
ports:
5+
- '4317'
56
- '4318'

spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryTracingDockerComposeConnectionDetailsFactory.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2023 the original author or authors.
2+
* Copyright 2012-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -30,7 +30,9 @@
3030
class OpenTelemetryTracingDockerComposeConnectionDetailsFactory
3131
extends DockerComposeConnectionDetailsFactory<OtlpTracingConnectionDetails> {
3232

33-
private static final int OTLP_PORT = 4318;
33+
private static final int OTLP_GRPC_PORT = 4317;
34+
35+
private static final int OTLP_HTTP_PORT = 4318;
3436

3537
OpenTelemetryTracingDockerComposeConnectionDetailsFactory() {
3638
super("otel/opentelemetry-collector-contrib",
@@ -47,17 +49,25 @@ private static final class OpenTelemetryTracingDockerComposeConnectionDetails ex
4749

4850
private final String host;
4951

50-
private final int port;
52+
private final int grpcPort;
53+
54+
private final int httPort;
5155

5256
private OpenTelemetryTracingDockerComposeConnectionDetails(RunningService source) {
5357
super(source);
5458
this.host = source.host();
55-
this.port = source.ports().get(OTLP_PORT);
59+
this.grpcPort = source.ports().get(OTLP_GRPC_PORT);
60+
this.httPort = source.ports().get(OTLP_HTTP_PORT);
5661
}
5762

5863
@Override
5964
public String getUrl() {
60-
return "http://%s:%d/v1/traces".formatted(this.host, this.port);
65+
return "http://%s:%d/v1/traces".formatted(this.host, this.httPort);
66+
}
67+
68+
@Override
69+
public String getGrpcEndpoint() {
70+
return "http://%s:%d/v1/traces".formatted(this.host, this.grpcPort);
6171
}
6272

6373
}

spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/otlp/OpenTelemetryTracingContainerConnectionDetailsFactoryIntegrationTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,16 @@ class OpenTelemetryTracingContainerConnectionDetailsFactoryIntegrationTests {
4343

4444
@Container
4545
@ServiceConnection
46-
static final GenericContainer<?> container = TestImage.OPENTELEMETRY.genericContainer().withExposedPorts(4318);
46+
static final GenericContainer<?> container = TestImage.OPENTELEMETRY.genericContainer()
47+
.withExposedPorts(4317, 4318);
4748

4849
@Autowired
4950
private OtlpTracingConnectionDetails connectionDetails;
5051

5152
@Test
5253
void connectionCanBeMadeToOpenTelemetryContainer() {
54+
assertThat(this.connectionDetails.getGrpcEndpoint())
55+
.isEqualTo("http://" + container.getHost() + ":" + container.getMappedPort(4317) + "/v1/traces");
5356
assertThat(this.connectionDetails.getUrl())
5457
.isEqualTo("http://" + container.getHost() + ":" + container.getMappedPort(4318) + "/v1/traces");
5558
}

spring-boot-project/spring-boot-testcontainers/src/main/java/org/springframework/boot/testcontainers/service/connection/otlp/OpenTelemetryTracingContainerConnectionDetailsFactory.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2023 the original author or authors.
2+
* Copyright 2012-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -35,6 +35,10 @@
3535
class OpenTelemetryTracingContainerConnectionDetailsFactory
3636
extends ContainerConnectionDetailsFactory<Container<?>, OtlpTracingConnectionDetails> {
3737

38+
private static final int OTLP_GRPC_PORT = 4317;
39+
40+
private static final int OTLP_HTTP_PORT = 4318;
41+
3842
OpenTelemetryTracingContainerConnectionDetailsFactory() {
3943
super("otel/opentelemetry-collector-contrib",
4044
"org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpAutoConfiguration");
@@ -55,7 +59,14 @@ private OpenTelemetryTracingContainerConnectionDetails(ContainerConnectionSource
5559

5660
@Override
5761
public String getUrl() {
58-
return "http://%s:%d/v1/traces".formatted(getContainer().getHost(), getContainer().getMappedPort(4318));
62+
return "http://%s:%d/v1/traces".formatted(getContainer().getHost(),
63+
getContainer().getMappedPort(OTLP_HTTP_PORT));
64+
}
65+
66+
@Override
67+
public String getGrpcEndpoint() {
68+
return "http://%s:%d/v1/traces".formatted(getContainer().getHost(),
69+
getContainer().getMappedPort(OTLP_GRPC_PORT));
5970
}
6071

6172
}

0 commit comments

Comments
 (0)