Skip to content

Commit cde2835

Browse files
mariusoeHeiko HolzMarius Brill
authored
Closes #1297 - Use OpenTelemetry as OpenCensus implementation (#1431)
Co-authored-by: Heiko Holz <heiko.holz@novatec-gmbh.de> Co-authored-by: Marius Brill <marius.brill@novatec-gmbh.de>
1 parent df4fcc7 commit cde2835

File tree

103 files changed

+8637
-3327
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+8637
-3327
lines changed

THIRD-PARTY-LICENSES.txt

Lines changed: 3493 additions & 1974 deletions
Large diffs are not rendered by default.

components/inspectit-ocelot-configurationserver/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ dependencies {
138138
"io.springfox:springfox-swagger2:2.9.2",
139139
"io.springfox:springfox-swagger-ui:2.9.2",
140140

141-
"io.opencensus:opencensus-impl:${openCensusVersion}"
141+
"io.opentelemetry:opentelemetry-sdk:${openTelemetryVersion}",
142+
"io.opentelemetry:opentelemetry-opencensus-shim:${openTelemetryAlphaVersion}"
142143
)
143144
testImplementation(
144145
'org.springframework.boot:spring-boot-starter-test:2.1.6.RELEASE',

components/inspectit-ocelot-configurationserver/src/main/java/rocks/inspectit/ocelot/file/accessor/git/RevisionAccess.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ protected String verifyPath(String relativeBasePath, String relativePath) throws
189189
Path path = Paths.get(relativePath).normalize();
190190

191191
if (StringUtils.isBlank(relativeBasePath)) {
192-
return path.toString().replace("\\", "/");
192+
// replace '\' with '/'. A regex that matches a single backslash character must include four backslashes, see https://www.gnu.org/software/guile/manual/html_node/Backslash-Escapes.html
193+
return path.toString().replaceAll("\\\\", "/");
193194
}
194195

195196
Path basePath = Paths.get(relativeBasePath).normalize();
@@ -199,7 +200,8 @@ protected String verifyPath(String relativeBasePath, String relativePath) throws
199200
throw new IllegalArgumentException("User path escapes the base path: " + relativePath);
200201
}
201202

202-
return resolvedPath.toString().replace("\\", "/");
203+
// replace '\' with '/'. A regex that matches a single backslash character must include four backslashes, see https://www.gnu.org/software/guile/manual/html_node/Backslash-Escapes.html
204+
return resolvedPath.toString().replaceAll("\\\\", "/");
203205
}
204206

205207
@Override

components/inspectit-ocelot-configurationserver/src/test/java/rocks/inspectit/ocelot/autocomplete/autocompleterimpl/ModelAutoCompleterTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ void pastList() {
4747

4848
List<String> result = completer.getSuggestions(input);
4949

50-
assertThat(result).containsExactlyInAnyOrder("config", "exporters", "instrumentation", "logging", "metrics", "plugins", "privacy", "publish-open-census-to-bootstrap", "self-monitoring", "service-name", "tags", "thread-pool-size", "tracing", "agent-commands", "log-preloading");
50+
assertThat(result).containsExactlyInAnyOrder("config", "exporters", "instrumentation", "logging", "metrics", "plugins", "privacy", "publish-open-telemetry-to-bootstrap", "self-monitoring", "service-name", "tags", "thread-pool-size", "tracing", "agent-commands", "log-preloading");
5151
}
5252

5353
@Test
@@ -119,7 +119,7 @@ void startsNotLikeInspectit() {
119119

120120
@Test
121121
void startsNotWithInspectit() {
122-
List<String> input = Arrays.asList("test", "antotherTest");
122+
List<String> input = Arrays.asList("test", "anotherTest");
123123

124124
List<String> result = completer.getSuggestions(input);
125125

@@ -152,7 +152,7 @@ public class GetProperties {
152152
void getPropertiesInspectit() {
153153
List<String> result = completer.getProperties(InspectitConfig.class);
154154

155-
assertThat(result).containsExactlyInAnyOrder("config", "env", "exporters", "instrumentation", "logging", "metrics", "plugins", "privacy", "publish-open-census-to-bootstrap", "self-monitoring", "service-name", "tags", "thread-pool-size", "tracing", "agent-commands", "log-preloading");
155+
assertThat(result).containsExactlyInAnyOrder("config", "env", "exporters", "instrumentation", "logging", "metrics", "plugins", "privacy", "publish-open-telemetry-to-bootstrap", "self-monitoring", "service-name", "tags", "thread-pool-size", "tracing", "agent-commands", "log-preloading");
156156
}
157157
}
158158
}

components/inspectit-ocelot-eum-server/src/main/java/rocks/inspectit/oce/eum/server/exporters/InfluxExporterService.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,13 @@ public class InfluxExporterService {
4646
private boolean shouldEnable() {
4747
InfluxExporterSettings influx = configuration.getExporters().getMetrics().getInflux();
4848
if (!influx.getEnabled().isDisabled()) {
49-
if (StringUtils.hasText(influx.getUrl())) {
49+
if (StringUtils.hasText(influx.getEndpoint())) {
50+
return true;
51+
} else if (StringUtils.hasText(influx.getUrl())) {
52+
log.warn("You are using the deprecated property 'url'. This property will be invalid in future releases of InspectIT Ocelot, please use `endpoint` instead.");
5053
return true;
5154
} else if (influx.getEnabled().equals(ExporterEnabledState.ENABLED)) {
52-
log.warn("InfluxDB Exporter is enabled but no url set.");
55+
log.warn("InfluxDB Exporter is enabled but 'endpoint' is not set.");
5356
}
5457
}
5558
return false;
@@ -59,9 +62,10 @@ private boolean shouldEnable() {
5962
private void doEnable() {
6063
InfluxExporterSettings influx = configuration.getExporters().getMetrics().getInflux();
6164
if (shouldEnable()) {
62-
log.info("Starting InfluxDB Exporter to '{}:{}' on '{}'", influx.getDatabase(), influx.getRetentionPolicy(), influx.getUrl());
65+
String endpoint = StringUtils.hasText(influx.getEndpoint()) ? influx.getEndpoint() : influx.getUrl();
66+
log.info("Starting InfluxDB Exporter to '{}:{}' on '{}'", influx.getDatabase(), influx.getRetentionPolicy(), endpoint);
6367
activeExporter = InfluxExporter.builder()
64-
.url(influx.getUrl())
68+
.url(endpoint)
6569
.database(influx.getDatabase())
6670
.retention(influx.getRetentionPolicy())
6771
.user(influx.getUser())

components/inspectit-ocelot-eum-server/src/main/java/rocks/inspectit/oce/eum/server/exporters/configuration/TraceExportersConfiguration.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import rocks.inspectit.ocelot.config.model.exporters.trace.TraceExportersSettings;
1818

1919
import javax.annotation.PostConstruct;
20+
import javax.validation.Valid;
2021
import java.util.Optional;
2122

2223
@Configuration
@@ -33,23 +34,23 @@ public void logWrongJaegerConfig() {
3334
.map(TraceExportersSettings::getJaeger)
3435
.filter((jaeger) -> !jaeger.getEnabled().isDisabled())
3536
.ifPresent(settings -> {
36-
if (StringUtils.hasText(settings.getUrl()) && !StringUtils.hasText(settings.getGrpc())) {
37-
log.warn("In order to use Jaeger span exporter, please specify the grpc API endpoint property instead of the url.");
37+
if (StringUtils.hasText(settings.getUrl()) && !StringUtils.hasText(settings.getEndpoint())) {
38+
log.warn("In order to use Jaeger span exporter, please specify the grpc API 'endpoint' property instead of the 'url'.");
3839
}
3940
});
4041
}
4142

4243
@Bean(destroyMethod = "shutdown")
43-
@ConditionalOnProperty({"inspectit-eum-server.exporters.tracing.jaeger.enabled", "inspectit-eum-server.exporters.tracing.jaeger.grpc"})
44-
@ConditionalOnExpression("(NOT new String('${inspectit-eum-server.exporters.tracing.jaeger.enabled}').toUpperCase().equals(T(rocks.inspectit.ocelot.config.model.exporters.ExporterEnabledState).DISABLED.toString())) AND (new String('${inspectit-eum-server.exporters.tracing.jaeger.grpc}').length() > 0)")
44+
@ConditionalOnProperty({"inspectit-eum-server.exporters.tracing.jaeger.enabled", "inspectit-eum-server.exporters.tracing.jaeger.endpoint"})
45+
@ConditionalOnExpression("(NOT new String('${inspectit-eum-server.exporters.tracing.jaeger.enabled}').toUpperCase().equals(T(rocks.inspectit.ocelot.config.model.exporters.ExporterEnabledState).DISABLED.toString())) AND (new String('${inspectit-eum-server.exporters.tracing.jaeger.endpoint}').length() > 0)")
4546
public SpanExporter jaegerSpanExporter() {
4647
JaegerExporterSettings jaegerExporterSettings = configuration.getExporters().getTracing().getJaeger();
4748

48-
ManagedChannel channel = ManagedChannelBuilder.forTarget(jaegerExporterSettings.getGrpc())
49+
ManagedChannel channel = ManagedChannelBuilder.forTarget(jaegerExporterSettings.getEndpoint())
4950
.usePlaintext()
5051
.build();
5152

52-
log.info("Starting Jaeger Exporter on grpc '{}'", jaegerExporterSettings.getGrpc());
53+
log.info("Starting Jaeger Exporter on grpc '{}'", jaegerExporterSettings.getEndpoint());
5354
System.setProperty("otel.resource.attributes", "service.name=" + jaegerExporterSettings.getServiceName());
5455

5556
return JaegerGrpcSpanExporter.builder().setChannel(channel).build();

components/inspectit-ocelot-eum-server/src/main/resources/application.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,10 +172,14 @@ inspectit-eum-server:
172172
# If jaeger exporter for the OT received spans is enabled.
173173
enabled: IF_CONFIGURED
174174

175+
# The transport protocol
176+
protocol: grpc
177+
175178
# Location of the jaeger gRPC API.
176179
# Either a valid NameResolver-compliant URI, or an authority string.
177180
# If this property is not set, the jaeger-exporter will not be started.
178-
# grpc: localhost:14250
181+
# endpoint: localhost:14250
182+
179183

180184
# service name for all exported spans.
181185
service-name: browser-js

components/inspectit-ocelot-eum-server/src/test/java/rocks/inspectit/oce/eum/server/exporters/JaegerExporterIntTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.testcontainers.containers.wait.strategy.Wait;
1717
import org.testcontainers.junit.jupiter.Container;
1818
import org.testcontainers.junit.jupiter.Testcontainers;
19+
import rocks.inspectit.ocelot.config.model.exporters.ExporterEnabledState;
1920

2021
import static org.assertj.core.api.Assertions.assertThat;
2122

@@ -41,16 +42,14 @@ public class JaegerExporterIntTest {
4142
public static final String SERVICE_NAME = "E2E-test";
4243

4344
@Container
44-
public static GenericContainer<?> jaegerContainer = new GenericContainer<>("ghcr.io/open-telemetry/java-test-containers:jaeger")
45-
.withExposedPorts(COLLECTOR_PORT, QUERY_PORT, HEALTH_PORT)
45+
public static GenericContainer<?> jaegerContainer = new GenericContainer<>("ghcr.io/open-telemetry/java-test-containers:jaeger").withExposedPorts(COLLECTOR_PORT, QUERY_PORT, HEALTH_PORT)
4646
.waitingFor(Wait.forHttp("/").forPort(HEALTH_PORT));
4747

4848
static class EnvInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
4949

5050
@Override
5151
public void initialize(ConfigurableApplicationContext applicationContext) {
52-
TestPropertyValues.of(String.format("inspectit-eum-server.exporters.tracing.jaeger.grpc=%s:%d", jaegerContainer
53-
.getHost(), jaegerContainer.getMappedPort(COLLECTOR_PORT)), "inspectit-eum-server.exporters.tracing.jaeger.service-name=" + JaegerExporterIntTest.SERVICE_NAME)
52+
TestPropertyValues.of("inspectit-eum-server.exporters.tracing.jaeger.enabled=" + ExporterEnabledState.ENABLED, String.format("inspectit-eum-server.exporters.tracing.jaeger.endpoint=%s:%d", jaegerContainer.getHost(), jaegerContainer.getMappedPort(COLLECTOR_PORT)), "inspectit-eum-server.exporters.tracing.jaeger.service-name=" + JaegerExporterIntTest.SERVICE_NAME, "inspectit-eum-server.exporters.tracing.jaeger.protocol=grpc")
5453
.applyTo(applicationContext);
5554
}
5655
}

components/inspectit-ocelot-eum-server/src/test/java/rocks/inspectit/oce/eum/server/exporters/configuration/TraceExportersConfigurationTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111

1212
/**
1313
* This Test class tests whether the annotations on {@link TraceExportersConfiguration#jaegerSpanExporter()} are working as expected,
14-
* i.e. whether the Bean only gets created when 'jaeger.enabled' is not set to DISABLED and 'jaeger.grpc' is not empty.
14+
* i.e. whether the Bean only gets created when 'jaeger.enabled' is not set to DISABLED and 'jaeger.endpoint' is not empty.
1515
*/
1616
@SpringBootTest
1717
class TraceExportersConfigurationTest {
1818

19-
@TestPropertySource(properties = {"inspectit-eum-server.exporters.tracing.jaeger.grpc=", "inspectit-eum-server.exporters.tracing.jaeger.enabled=ENABLED"})
19+
@TestPropertySource(properties = {"inspectit-eum-server.exporters.tracing.jaeger.endpoint=", "inspectit-eum-server.exporters.tracing.jaeger.enabled=ENABLED"})
2020
@Nested
21-
public class MissingGrpcTest {
21+
public class MissingEndpointTest {
2222

2323
@Autowired(required = false)
2424
JaegerGrpcSpanExporter exporter;
@@ -29,7 +29,7 @@ public void testBeanWasNotCreated() {
2929
}
3030
}
3131

32-
@TestPropertySource(properties = {"inspectit-eum-server.exporters.tracing.jaeger.grpc=localhost:1234", "inspectit-eum-server.exporters.tracing.jaeger.enabled=DISABLED"})
32+
@TestPropertySource(properties = {"inspectit-eum-server.exporters.tracing.jaeger.endpoint=localhost:1234", "inspectit-eum-server.exporters.tracing.jaeger.enabled=DISABLED", "inspectit-eum-server.exporters.tracing.jaeger.protocol=grpc"})
3333
@Nested
3434
public class DisabledTest {
3535

@@ -42,7 +42,7 @@ public void testBeanWasNotCreated() {
4242
}
4343
}
4444

45-
@TestPropertySource(properties = {"inspectit-eum-server.exporters.tracing.jaeger.grpc=localhost:1234", "inspectit-eum-server.exporters.tracing.jaeger.enabled=ENABLED"})
45+
@TestPropertySource(properties = {"inspectit-eum-server.exporters.tracing.jaeger.endpoint=localhost:1234", "inspectit-eum-server.exporters.tracing.jaeger.enabled=ENABLED", "inspectit-eum-server.exporters.tracing.jaeger.protocol=grpc"})
4646
@Nested
4747
public class BothAvailableTest {
4848

gradle.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,14 @@ logbackVersion=1.2.10
77

88
# Ensure to adapt the netty version (inspectit-ocelot-core/build.gradle) when changing the OpenCensus version
99
openCensusVersion=0.28.3
10-
prometheusClientVersion=0.6.0
10+
# OpenTelemetry related
11+
openTelemetryVersion=1.10.0
12+
openTelemetryAlphaVersion=1.10.0-alpha
13+
14+
prometheusClientVersion=0.15.0
1115
# appropriate netty version, see https://github.com/census-instrumentation/opencensus-java/blob/master/exporters/trace/ocagent/README.md
1216
tcnativeVersion=2.0.20.Final
17+
grpcVersion=1.43.1
1318

1419
# CycloneDX SBOM settings
1520
# Specifies the type of project being built. Defaults to 'library'

0 commit comments

Comments
 (0)