Skip to content

Commit 108dbd6

Browse files
authored
declarative config metrics delta (#1062)
* declarative config metrics delta * refactor test a bit + fix things * provide env variable to override temporality * fix pebkc * update comment for grpc
1 parent 3a81c80 commit 108dbd6

5 files changed

Lines changed: 87 additions & 60 deletions

File tree

custom/src/main/resources/co/elastic/otel/config.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,12 @@ meter_provider:
4747
otlp_http:
4848
endpoint: ${OTEL_EXPORTER_OTLP_ENDPOINT:-http://localhost:4318}/v1/metrics
4949
headers_list: ${OTEL_EXPORTER_OTLP_HEADERS}
50+
temporality_preference: ${OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE:-delta}
5051
# use the following for grpc
5152
# otlp_grpc:
5253
# endpoint: ${OTEL_EXPORTER_OTLP_ENDPOINT}
5354
# headers_list: ${OTEL_EXPORTER_OTLP_HEADERS}
55+
# temporality_preference: ${OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE:-delta}
5456

5557
logger_provider:
5658
processors:
@@ -70,4 +72,4 @@ instrumentation/development:
7072
java:
7173
runtime_telemetry:
7274
# emit not-yet stable runtime telemetry metrics which are currently part of semconv for java runtime
73-
emit_experimental_metrics/development: true
75+
emit_experimental_metrics/development: ${OTEL_INSTRUMENTATION_RUNTIME_TELEMETRY_EMIT_EXPERIMENTAL_METRICS:-true}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ void testDefaults() {
7878
assertThatJson(json(config.getMeterProvider().getReaders().get(0)))
7979
.inPath("periodic.exporter.otlp_http")
8080
.isObject()
81-
.containsEntry("endpoint", "http://localhost:4318/v1/metrics");
81+
.containsEntry("endpoint", "http://localhost:4318/v1/metrics")
82+
.containsEntry("temporality_preference", "delta");
8283

8384
assertThat(config.getLoggerProvider()).isNotNull();
8485
assertThat(config.getLoggerProvider().getProcessors()).hasSize(1);

smoke-tests/src/test/java/com/example/javaagent/smoketest/AppServerProvidersTest.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,17 @@ static void afterAll() {
6060
@Test
6161
void tomcat() {
6262
target =
63-
startTarget(
64-
"tomcat:latest",
65-
container ->
66-
container
67-
.withExposedPorts(PORT)
68-
.waitingFor(Wait.forListeningPorts(PORT))
69-
.withCopyFileToContainer(
70-
MountableFile.forHostPath(testAppWar),
71-
"/usr/local/tomcat/webapps/app.war"));
63+
testTarget("tomcat:latest")
64+
.withBaseEnvironmentVariables(true)
65+
.customize(
66+
container ->
67+
container
68+
.withExposedPorts(PORT)
69+
.waitingFor(Wait.forListeningPorts(PORT))
70+
.withCopyFileToContainer(
71+
MountableFile.forHostPath(testAppWar),
72+
"/usr/local/tomcat/webapps/app.war"))
73+
.start();
7274

7375
await()
7476
.atMost(Duration.ofSeconds(30))

smoke-tests/src/test/java/com/example/javaagent/smoketest/SmokeTest.java

Lines changed: 62 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -108,55 +108,79 @@ static void setupSpec() {
108108
backend.start();
109109
}
110110

111-
protected static GenericContainer<?> startTarget(
112-
String image, Consumer<GenericContainer<?>> customizeContainer) {
111+
public static TestTarget testTarget(String image) {
112+
return new TestTarget(image);
113+
}
113114

114-
@SuppressWarnings("resource")
115-
GenericContainer<?> target =
116-
new GenericContainer<>(image)
117-
.withNetwork(network)
118-
.withLogConsumer(new Slf4jLogConsumer(logger))
119-
.withCopyFileToContainer(MountableFile.forHostPath(AGENT_PATH), JAVAAGENT_JAR_PATH);
115+
public static class TestTarget {
116+
private final String image;
117+
private Consumer<GenericContainer<?>> customizeContainer;
118+
private boolean baseEnvVariables;
120119

121-
StringBuilder jvmArgs = new StringBuilder();
120+
public TestTarget(String image) {
121+
this.image = image;
122+
}
122123

123-
if (JavaExecutable.isDebugging()) {
124-
// when debugging, automatically use verbose debug logging
125-
target.withEnv("OTEL_JAVAAGENT_DEBUG", "true");
124+
public TestTarget customize(Consumer<GenericContainer<?>> customizeContainer) {
125+
this.customizeContainer = customizeContainer;
126+
return this;
127+
}
126128

127-
if (JavaExecutable.isListeningDebuggerStarted(TARGET_DEBUG_PORT, "target")) {
128-
target = addDockerDebugHost(target);
129-
jvmArgs
130-
.append(JavaExecutable.jvmDebugArgument("remote-localhost", TARGET_DEBUG_PORT))
131-
.append(" ");
132-
}
133-
// Use very long startup delay when debugging as the remote JVM is likely stopped before the
134-
// app has started
135-
target.waitingFor(Wait.defaultWaitStrategy().withStartupTimeout(Duration.ofMinutes(10)));
129+
public TestTarget withBaseEnvironmentVariables(boolean value) {
130+
this.baseEnvVariables = value;
131+
return this;
136132
}
137133

138-
jvmArgs.append(JavaExecutable.jvmAgentArgument(JAVAAGENT_JAR_PATH));
139-
target.withEnv("JAVA_TOOL_OPTIONS", jvmArgs.toString());
134+
public GenericContainer<?> start() {
135+
@SuppressWarnings("resource")
136+
GenericContainer<?> target =
137+
new GenericContainer<>(image)
138+
.withNetwork(network)
139+
.withLogConsumer(new Slf4jLogConsumer(logger))
140+
.withCopyFileToContainer(MountableFile.forHostPath(AGENT_PATH), JAVAAGENT_JAR_PATH);
141+
142+
StringBuilder jvmArgs = new StringBuilder();
143+
144+
if (JavaExecutable.isDebugging()) {
145+
// when debugging, automatically use verbose debug logging
146+
target.withEnv("OTEL_JAVAAGENT_DEBUG", "true");
147+
148+
if (JavaExecutable.isListeningDebuggerStarted(TARGET_DEBUG_PORT, "target")) {
149+
target = addDockerDebugHost(target);
150+
jvmArgs
151+
.append(JavaExecutable.jvmDebugArgument("remote-localhost", TARGET_DEBUG_PORT))
152+
.append(" ");
153+
}
154+
// Use very long startup delay when debugging as the remote JVM is likely stopped before the
155+
// app has started
156+
target.waitingFor(Wait.defaultWaitStrategy().withStartupTimeout(Duration.ofMinutes(10)));
157+
}
140158

141-
customizeContainer.accept(target);
159+
jvmArgs.append(JavaExecutable.jvmAgentArgument(JAVAAGENT_JAR_PATH));
160+
target.withEnv("JAVA_TOOL_OPTIONS", jvmArgs.toString());
161+
162+
if (baseEnvVariables) {
163+
target
164+
// batch span processor: very small batch size for testing
165+
.withEnv("OTEL_BSP_MAX_EXPORT_BATCH", "1")
166+
// batch span processor: very short delay for testing
167+
.withEnv("OTEL_BSP_SCHEDULE_DELAY", "10")
168+
// use grpc endpoint as default is now http/protobuf with agent 2.x
169+
.withEnv("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc")
170+
.withEnv("OTEL_PROPAGATORS", "tracecontext,baggage")
171+
.withEnv("OTEL_EXPORTER_OTLP_ENDPOINT", BACKEND_ENDPOINT);
172+
}
142173

143-
Objects.requireNonNull(target).start();
174+
if (customizeContainer != null) {
175+
customizeContainer.accept(target);
176+
}
144177

145-
startedContainers.add(target);
178+
Objects.requireNonNull(target).start();
146179

147-
return target;
148-
}
180+
startedContainers.add(target);
149181

150-
protected static void setBaseEnvironmentVariables(GenericContainer<?> target) {
151-
target
152-
// batch span processor: very small batch size for testing
153-
.withEnv("OTEL_BSP_MAX_EXPORT_BATCH", "1")
154-
// batch span processor: very short delay for testing
155-
.withEnv("OTEL_BSP_SCHEDULE_DELAY", "10")
156-
// use grpc endpoint as default is now http/protobuf with agent 2.x
157-
.withEnv("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc")
158-
.withEnv("OTEL_PROPAGATORS", "tracecontext,baggage")
159-
.withEnv("OTEL_EXPORTER_OTLP_ENDPOINT", BACKEND_ENDPOINT);
182+
return target;
183+
}
160184
}
161185

162186
private static GenericContainer<?> addDockerDebugHost(GenericContainer<?> target) {

smoke-tests/src/test/java/com/example/javaagent/smoketest/TestAppSmokeTest.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,15 @@ public static void startTestApp(Consumer<GenericContainer<?>> customizeContainer
3737
public static void startTestApp(
3838
Consumer<GenericContainer<?>> customizeContainer, boolean defaultEnv) {
3939
target =
40-
startTarget(
41-
TEST_APP_IMAGE,
42-
customizeContainer.andThen(
43-
container -> {
44-
if (defaultEnv) {
45-
setBaseEnvironmentVariables(container);
46-
}
47-
container
48-
.withExposedPorts(PORT)
49-
.waitingFor(Wait.forHttp("/health").forPort(PORT));
50-
}));
40+
testTarget(TEST_APP_IMAGE)
41+
.withBaseEnvironmentVariables(defaultEnv)
42+
.customize(
43+
customizeContainer.andThen(
44+
container ->
45+
container
46+
.withExposedPorts(PORT)
47+
.waitingFor(Wait.forHttp("/health").forPort(PORT))))
48+
.start();
5149
}
5250

5351
protected static String getContainerId() {

0 commit comments

Comments
 (0)