From a42a0f0e0ffaaa993cbf8d28be48d1465f421f61 Mon Sep 17 00:00:00 2001
From: Pavol Loffay
Date: Tue, 9 Feb 2021 10:07:07 +0100
Subject: [PATCH 1/2] Fix remove HT config from bootstrap and app classloader
Signed-off-by: Pavol Loffay
---
javaagent/build.gradle.kts | 4 +-
.../agent/instrument/HypertraceAgent.java | 37 -----------
.../HypertraceAgentConfiguration.java | 65 +++++++++++++++++++
.../HypertraceAgentConfigurationTest.java | 7 +-
4 files changed, 70 insertions(+), 43 deletions(-)
create mode 100644 otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java
rename javaagent/src/test/java/org/hypertrace/agent/instrument/HypertraceAgentTest.java => otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfigurationTest.java (82%)
diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts
index fd3339a61..7eb40f320 100644
--- a/javaagent/build.gradle.kts
+++ b/javaagent/build.gradle.kts
@@ -12,7 +12,6 @@ dependencies {
// https://oss.jfrog.org/artifactory/oss-snapshot-local/io/opentelemetry/instrumentation/auto/
// https://dl.bintray.com/open-telemetry/maven/
implementation("io.opentelemetry.javaagent", "opentelemetry-javaagent", version = "${versions["opentelemetry_java_agent"]}", classifier = "all")
- implementation(project(":javaagent-core"))
implementation(project(":filter-api"))
}
@@ -50,8 +49,7 @@ tasks {
}
relocate("org.slf4j", "io.opentelemetry.javaagent.slf4j")
- // TODO causes data not being reported
-// relocate("java.util.logging.Logger", "io.opentelemetry.javaagent.bootstrap.PatchLogger")
+ relocate("java.util.logging.Logger", "io.opentelemetry.javaagent.bootstrap.PatchLogger")
// prevents conflict with library instrumentation
relocate("io.opentelemetry.instrumentation.api", "io.opentelemetry.javaagent.shaded.instrumentation.api")
diff --git a/javaagent/src/main/java/org/hypertrace/agent/instrument/HypertraceAgent.java b/javaagent/src/main/java/org/hypertrace/agent/instrument/HypertraceAgent.java
index c96f05d95..6dde821e0 100644
--- a/javaagent/src/main/java/org/hypertrace/agent/instrument/HypertraceAgent.java
+++ b/javaagent/src/main/java/org/hypertrace/agent/instrument/HypertraceAgent.java
@@ -16,28 +16,13 @@
package org.hypertrace.agent.instrument;
-import com.google.common.annotations.VisibleForTesting;
import io.opentelemetry.javaagent.OpenTelemetryAgent;
import java.lang.instrument.Instrumentation;
import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
-import org.hypertrace.agent.config.Config.AgentConfig;
-import org.hypertrace.agent.config.Config.PropagationFormat;
-import org.hypertrace.agent.core.config.HypertraceConfig;
public class HypertraceAgent {
- // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/sdk-environment-variables.md
- private static final String OTEL_EXPORTER = "otel.exporter";
- private static final String OTEL_PROPAGATORS = "otel.propagators";
- private static final String OTEL_EXPORTER_ZIPKIN_ENDPOINT = "otel.exporter.zipkin.endpoint";
- private static final String OTEL_EXPORTER_ZIPKIN_SERVICE_NAME =
- "otel.exporter.zipkin.service.name";
- private static final String OTEL_PROCESSOR_BATCH_MAX_QUEUE = "otel.bsp.max.queue.size";
- private static final String OTEL_DEFAULT_LOG_LEVEL =
- "io.opentelemetry.javaagent.slf4j.simpleLogger.defaultLogLevel";
private static HypertraceAgent instance;
@@ -64,34 +49,12 @@ public static void agentmain(String agentArgs, Instrumentation inst) {
}
instance = new HypertraceAgent();
- setDefaultConfig();
OpenTelemetryAgent.premain(agentArgs, inst);
System.out.printf(
"Hypertrace agent started, version: %s\n",
HypertraceAgent.class.getPackage().getImplementationVersion());
}
- /** Set default values to OTEL config. OTEL config has a higher precedence. */
- private static void setDefaultConfig() {
- AgentConfig agentConfig = HypertraceConfig.get();
- OpenTelemetryConfig.setDefault(OTEL_EXPORTER, "zipkin");
- OpenTelemetryConfig.setDefault(
- OTEL_EXPORTER_ZIPKIN_SERVICE_NAME, agentConfig.getServiceName().getValue());
- OpenTelemetryConfig.setDefault(
- OTEL_PROPAGATORS, toOtelPropagators(agentConfig.getPropagationFormatsList()));
- OpenTelemetryConfig.setDefault(
- OTEL_EXPORTER_ZIPKIN_ENDPOINT, agentConfig.getReporting().getEndpoint().getValue());
- OpenTelemetryConfig.setDefault(
- OTEL_EXPORTER_ZIPKIN_SERVICE_NAME, agentConfig.getServiceName().getValue());
- }
-
- @VisibleForTesting
- static String toOtelPropagators(List propagationFormats) {
- return propagationFormats.stream()
- .map(v -> v.name().toLowerCase())
- .collect(Collectors.joining(","));
- }
-
// Expected format is "arg1=val1,arg2=val2,arg3=val3"
private static Map parseAgentArgs(String agentArgs) {
if (agentArgs == null) {
diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java
new file mode 100644
index 000000000..32f017fef
--- /dev/null
+++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright The Hypertrace Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.hypertrace.agent.otel.extensions;
+
+import com.google.auto.service.AutoService;
+import com.google.common.annotations.VisibleForTesting;
+import io.opentelemetry.javaagent.spi.config.PropertySource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.hypertrace.agent.config.Config.AgentConfig;
+import org.hypertrace.agent.config.Config.PropagationFormat;
+import org.hypertrace.agent.core.config.HypertraceConfig;
+
+@AutoService(PropertySource.class)
+public class HypertraceAgentConfiguration implements PropertySource {
+
+ // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/sdk-environment-variables.md
+ private static final String OTEL_EXPORTER = "otel.exporter";
+ private static final String OTEL_PROPAGATORS = "otel.propagators";
+ private static final String OTEL_EXPORTER_ZIPKIN_ENDPOINT = "otel.exporter.zipkin.endpoint";
+ private static final String OTEL_EXPORTER_ZIPKIN_SERVICE_NAME =
+ "otel.exporter.zipkin.service.name";
+ private static final String OTEL_PROCESSOR_BATCH_MAX_QUEUE = "otel.bsp.max.queue.size";
+ private static final String OTEL_DEFAULT_LOG_LEVEL =
+ "io.opentelemetry.javaagent.slf4j.simpleLogger.defaultLogLevel";
+
+ @Override
+ public Map getProperties() {
+ AgentConfig agentConfig = HypertraceConfig.get();
+
+ Map configProperties = new HashMap<>();
+ configProperties.put(OTEL_EXPORTER, "zipkin");
+ configProperties.put(
+ OTEL_EXPORTER_ZIPKIN_SERVICE_NAME, agentConfig.getServiceName().getValue());
+ configProperties.put(
+ OTEL_EXPORTER_ZIPKIN_ENDPOINT, agentConfig.getReporting().getEndpoint().getValue());
+ configProperties.put(
+ OTEL_PROPAGATORS, toOtelPropagators(agentConfig.getPropagationFormatsList()));
+
+ return configProperties;
+ }
+
+ @VisibleForTesting
+ static String toOtelPropagators(List propagationFormats) {
+ return propagationFormats.stream()
+ .map(v -> v.name().toLowerCase())
+ .collect(Collectors.joining(","));
+ }
+}
diff --git a/javaagent/src/test/java/org/hypertrace/agent/instrument/HypertraceAgentTest.java b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfigurationTest.java
similarity index 82%
rename from javaagent/src/test/java/org/hypertrace/agent/instrument/HypertraceAgentTest.java
rename to otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfigurationTest.java
index addda9d70..80853e88c 100644
--- a/javaagent/src/test/java/org/hypertrace/agent/instrument/HypertraceAgentTest.java
+++ b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfigurationTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.hypertrace.agent.instrument;
+package org.hypertrace.agent.otel.extensions;
import java.util.Arrays;
import java.util.List;
@@ -22,12 +22,13 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-public class HypertraceAgentTest {
+public class HypertraceAgentConfigurationTest {
@Test
public void propagationFormatList() {
List formats =
Arrays.asList(PropagationFormat.B3, PropagationFormat.TRACECONTEXT);
- Assertions.assertEquals("b3,tracecontext", HypertraceAgent.toOtelPropagators(formats));
+ Assertions.assertEquals(
+ "b3,tracecontext", HypertraceAgentConfiguration.toOtelPropagators(formats));
}
}
From 6bd167ade7bb4cb2f9479d21b43c905d28df8443 Mon Sep 17 00:00:00 2001
From: Pavol Loffay
Date: Tue, 9 Feb 2021 10:32:38 +0100
Subject: [PATCH 2/2] Fix
Signed-off-by: Pavol Loffay
---
.../extensions/processor/HypertraceTracerCustomizer.java | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/HypertraceTracerCustomizer.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/HypertraceTracerCustomizer.java
index 67319295d..d86bedcf6 100644
--- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/HypertraceTracerCustomizer.java
+++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/HypertraceTracerCustomizer.java
@@ -33,9 +33,6 @@ public class HypertraceTracerCustomizer implements TracerCustomizer {
@Override
public void configure(SdkTracerManagement tracerManagement) {
- String exporter = System.getProperty("otel.exporter");
- if (exporter != null && exporter.contains("zipkin")) {
- tracerManagement.addSpanProcessor(new AddTagsSpanProcessor());
- }
+ tracerManagement.addSpanProcessor(new AddTagsSpanProcessor());
}
}