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/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()); } } 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)); } }