diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java index b6271e5b1..f45a60dff 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java @@ -21,7 +21,7 @@ import io.opentelemetry.javaagent.extension.AgentListener; import java.util.List; import java.util.stream.Collectors; -import org.hypertrace.agent.config.Config.AgentConfig; +import org.hypertrace.agent.config.v1.Config.AgentConfig; import org.hypertrace.agent.filter.FilterRegistry; import org.hypertrace.agent.otel.extensions.config.HypertraceConfig; diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceResourceProvider.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceResourceProvider.java index d4abf0ad9..d810acc81 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceResourceProvider.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceResourceProvider.java @@ -23,7 +23,7 @@ import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; -import org.hypertrace.agent.config.Config.AgentConfig; +import org.hypertrace.agent.config.v1.Config.AgentConfig; import org.hypertrace.agent.otel.extensions.config.HypertraceConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/EnvironmentConfig.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/EnvironmentConfig.java index 2b4e5ff17..b0b215853 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/EnvironmentConfig.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/EnvironmentConfig.java @@ -19,15 +19,15 @@ import com.google.protobuf.BoolValue; import com.google.protobuf.Int32Value; import com.google.protobuf.StringValue; -import org.hypertrace.agent.config.Config.AgentConfig; -import org.hypertrace.agent.config.Config.DataCapture; -import org.hypertrace.agent.config.Config.JavaAgent; -import org.hypertrace.agent.config.Config.Message; -import org.hypertrace.agent.config.Config.Opa; -import org.hypertrace.agent.config.Config.Opa.Builder; -import org.hypertrace.agent.config.Config.PropagationFormat; -import org.hypertrace.agent.config.Config.Reporting; -import org.hypertrace.agent.config.Config.TraceReporterType; +import org.hypertrace.agent.config.v1.Config.AgentConfig; +import org.hypertrace.agent.config.v1.Config.DataCapture; +import org.hypertrace.agent.config.v1.Config.JavaAgent; +import org.hypertrace.agent.config.v1.Config.Message; +import org.hypertrace.agent.config.v1.Config.Opa; +import org.hypertrace.agent.config.v1.Config.Opa.Builder; +import org.hypertrace.agent.config.v1.Config.PropagationFormat; +import org.hypertrace.agent.config.v1.Config.Reporting; +import org.hypertrace.agent.config.v1.Config.TraceReporterType; public class EnvironmentConfig { @@ -46,6 +46,7 @@ private EnvironmentConfig() {} static final String REPORTING_ENDPOINT = REPORTING_PREFIX + "endpoint"; static final String REPORTING_TRACE_TYPE = REPORTING_PREFIX + "trace.reporter.type"; static final String REPORTING_SECURE = REPORTING_PREFIX + "secure"; + static final String REPORTING_CERT_FILE = REPORTING_PREFIX + "cert.file"; private static final String OPA_PREFIX = REPORTING_PREFIX + "opa."; static final String OPA_ENDPOINT = OPA_PREFIX + "endpoint"; @@ -133,6 +134,10 @@ private static Reporting.Builder applyReporting(Reporting.Builder builder) { if (secure != null) { builder.setSecure(BoolValue.newBuilder().setValue(Boolean.valueOf(secure)).build()); } + String certFilePath = getProperty(REPORTING_CERT_FILE); + if (certFilePath != null) { + builder.setCertFile(StringValue.of(certFilePath)); + } Builder opaBuilder = applyOpa(builder.getOpa().toBuilder()); builder.setOpa(opaBuilder); return builder; diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/HypertraceAgentConfiguration.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/HypertraceAgentConfiguration.java index 4b2e8a58f..8fd4eda68 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/HypertraceAgentConfiguration.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/HypertraceAgentConfiguration.java @@ -23,13 +23,17 @@ 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.config.Config.TraceReporterType; +import org.hypertrace.agent.config.v1.Config.AgentConfig; +import org.hypertrace.agent.config.v1.Config.PropagationFormat; +import org.hypertrace.agent.config.v1.Config.TraceReporterType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @AutoService(ConfigPropertySource.class) public class HypertraceAgentConfiguration implements ConfigPropertySource { + private static final Logger log = LoggerFactory.getLogger(HypertraceAgentConfiguration.class); + // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/sdk-environment-variables.md private static final String OTEL_TRACE_EXPORTER = "otel.traces.exporter"; private static final String OTEL_METRICS_EXPORTER = "otel.metrics.exporter"; @@ -43,6 +47,7 @@ public class HypertraceAgentConfiguration implements ConfigPropertySource { private static final String OTEL_EXPORTER_OTLP_ENDPOINT = "otel.exporter.otlp.endpoint"; private static final String OTEL_ENABLED = "otel.javaagent.enabled"; + private static final String OTEL_OTLP_CERT = "otel.exporter.otlp.certificate"; @Override public Map getProperties() { @@ -66,6 +71,14 @@ public Map getProperties() { OTEL_PROPAGATORS, toOtelPropagators(agentConfig.getPropagationFormatsList())); // metrics are not reported configProperties.put(OTEL_METRICS_EXPORTER, "none"); + if (agentConfig.getReporting().hasCertFile()) { + if (agentConfig.getReporting().getTraceReporterType() == TraceReporterType.OTLP) { + configProperties.put(OTEL_OTLP_CERT, agentConfig.getReporting().getCertFile().getValue()); + } else { + log.warn( + "A certificate file was configured, but a trace exporter other than OTLP was configured. If you would like to use a custom certificate file, you must use the OTLP exporter"); + } + } return configProperties; } diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/HypertraceConfig.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/HypertraceConfig.java index c092a5aa2..83dc52956 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/HypertraceConfig.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/HypertraceConfig.java @@ -30,15 +30,15 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; -import org.hypertrace.agent.config.Config; -import org.hypertrace.agent.config.Config.AgentConfig; -import org.hypertrace.agent.config.Config.DataCapture; -import org.hypertrace.agent.config.Config.Message; -import org.hypertrace.agent.config.Config.Opa; -import org.hypertrace.agent.config.Config.Opa.Builder; -import org.hypertrace.agent.config.Config.PropagationFormat; -import org.hypertrace.agent.config.Config.Reporting; -import org.hypertrace.agent.config.Config.TraceReporterType; +import org.hypertrace.agent.config.v1.Config; +import org.hypertrace.agent.config.v1.Config.AgentConfig; +import org.hypertrace.agent.config.v1.Config.DataCapture; +import org.hypertrace.agent.config.v1.Config.Message; +import org.hypertrace.agent.config.v1.Config.Opa; +import org.hypertrace.agent.config.v1.Config.Opa.Builder; +import org.hypertrace.agent.config.v1.Config.PropagationFormat; +import org.hypertrace.agent.config.v1.Config.Reporting; +import org.hypertrace.agent.config.v1.Config.TraceReporterType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/InstrumentationConfigImpl.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/InstrumentationConfigImpl.java index e49a42310..8e0873489 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/InstrumentationConfigImpl.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/InstrumentationConfigImpl.java @@ -17,10 +17,10 @@ package org.hypertrace.agent.otel.extensions.config; import com.google.auto.service.AutoService; -import org.hypertrace.agent.config.Config; -import org.hypertrace.agent.config.Config.AgentConfig; -import org.hypertrace.agent.config.Config.DataCapture; -import org.hypertrace.agent.config.Config.Message; +import org.hypertrace.agent.config.v1.Config; +import org.hypertrace.agent.config.v1.Config.AgentConfig; +import org.hypertrace.agent.config.v1.Config.DataCapture; +import org.hypertrace.agent.config.v1.Config.Message; import org.hypertrace.agent.core.config.InstrumentationConfig; @AutoService(InstrumentationConfig.class) diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/ReportingConfigImpl.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/ReportingConfigImpl.java index 87e7474f2..ef3485034 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/ReportingConfigImpl.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/ReportingConfigImpl.java @@ -17,7 +17,7 @@ package org.hypertrace.agent.otel.extensions.config; import com.google.auto.service.AutoService; -import org.hypertrace.agent.config.Config; +import org.hypertrace.agent.config.v1.Config; import org.hypertrace.agent.core.config.ReportingConfig; @AutoService(ReportingConfig.class) diff --git a/otel-extensions/src/main/proto b/otel-extensions/src/main/proto index 5142f17ae..f66d46bdf 160000 --- a/otel-extensions/src/main/proto +++ b/otel-extensions/src/main/proto @@ -1 +1 @@ -Subproject commit 5142f17ae5053cea947f73b1277ab9f6a8d3beda +Subproject commit f66d46bdfecb1c073bf7c91024d407a473e41c5b diff --git a/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfigurationTest.java b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfigurationTest.java index ce245fd6c..9e211ce57 100644 --- a/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfigurationTest.java +++ b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfigurationTest.java @@ -18,7 +18,7 @@ import java.util.Arrays; import java.util.List; -import org.hypertrace.agent.config.Config.PropagationFormat; +import org.hypertrace.agent.config.v1.Config.PropagationFormat; import org.hypertrace.agent.otel.extensions.config.HypertraceAgentConfiguration; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/EnvironmentConfigTest.java b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/EnvironmentConfigTest.java index 4b3edbcc9..6c5e4e4d5 100644 --- a/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/EnvironmentConfigTest.java +++ b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/EnvironmentConfigTest.java @@ -18,9 +18,9 @@ import com.google.protobuf.StringValue; import java.util.Arrays; -import org.hypertrace.agent.config.Config.AgentConfig; -import org.hypertrace.agent.config.Config.PropagationFormat; -import org.hypertrace.agent.config.Config.TraceReporterType; +import org.hypertrace.agent.config.v1.Config.AgentConfig; +import org.hypertrace.agent.config.v1.Config.PropagationFormat; +import org.hypertrace.agent.config.v1.Config.TraceReporterType; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junitpioneer.jupiter.ClearSystemProperty; @@ -31,6 +31,7 @@ class EnvironmentConfigTest { @ClearSystemProperty(key = EnvironmentConfig.REPORTING_ENDPOINT) @ClearSystemProperty(key = EnvironmentConfig.REPORTING_SECURE) @ClearSystemProperty(key = EnvironmentConfig.REPORTING_TRACE_TYPE) + @ClearSystemProperty(key = EnvironmentConfig.REPORTING_CERT_FILE) @ClearSystemProperty(key = EnvironmentConfig.OPA_ENDPOINT) @ClearSystemProperty(key = EnvironmentConfig.OPA_POLL_PERIOD) @ClearSystemProperty(key = EnvironmentConfig.OPA_ENABLED) @@ -46,6 +47,7 @@ public void systemProperties() { System.setProperty(EnvironmentConfig.REPORTING_ENDPOINT, "http://:-)"); System.setProperty(EnvironmentConfig.REPORTING_TRACE_TYPE, "OTLP"); System.setProperty(EnvironmentConfig.REPORTING_SECURE, "true"); + System.setProperty(EnvironmentConfig.REPORTING_CERT_FILE, "/bar/test.pem"); System.setProperty(EnvironmentConfig.CAPTURE_HTTP_BODY_PREFIX + "request", "true"); System.setProperty(EnvironmentConfig.OPA_ENDPOINT, "http://azkaban:9090"); System.setProperty(EnvironmentConfig.OPA_POLL_PERIOD, "10"); @@ -78,6 +80,7 @@ public void systemProperties() { 10, agentConfig.getReporting().getOpa().getPollPeriodSeconds().getValue()); Assertions.assertEquals(512, agentConfig.getDataCapture().getBodyMaxSizeBytes().getValue()); Assertions.assertEquals(true, agentConfig.getReporting().getSecure().getValue()); + Assertions.assertEquals("/bar/test.pem", agentConfig.getReporting().getCertFile().getValue()); Assertions.assertEquals( true, agentConfig.getDataCapture().getHttpBody().getRequest().getValue()); Assertions.assertEquals(2, agentConfig.getJavaagent().getFilterJarPathsCount()); diff --git a/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/HypertraceConfigTest.java b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/HypertraceConfigTest.java index 0e9148699..6edd9e7e1 100644 --- a/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/HypertraceConfigTest.java +++ b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/HypertraceConfigTest.java @@ -23,9 +23,9 @@ import java.io.IOException; import java.net.URL; import java.util.Arrays; -import org.hypertrace.agent.config.Config.AgentConfig; -import org.hypertrace.agent.config.Config.PropagationFormat; -import org.hypertrace.agent.config.Config.TraceReporterType; +import org.hypertrace.agent.config.v1.Config.AgentConfig; +import org.hypertrace.agent.config.v1.Config.PropagationFormat; +import org.hypertrace.agent.config.v1.Config.TraceReporterType; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -41,6 +41,7 @@ public void defaultValues() throws IOException { Assertions.assertEquals("unknown", agentConfig.getServiceName().getValue()); Assertions.assertEquals( TraceReporterType.OTLP, agentConfig.getReporting().getTraceReporterType()); + Assertions.assertFalse(agentConfig.getReporting().hasCertFile()); Assertions.assertEquals( HypertraceConfig.DEFAULT_REPORTING_ENDPOINT, agentConfig.getReporting().getEndpoint().getValue()); @@ -105,6 +106,8 @@ private void assertConfig(AgentConfig agentConfig) { Arrays.asList(PropagationFormat.B3), agentConfig.getPropagationFormatsList()); Assertions.assertEquals( TraceReporterType.OTLP, agentConfig.getReporting().getTraceReporterType()); + Assertions.assertEquals( + "/foo/bar/example.pem", agentConfig.getReporting().getCertFile().getValue()); Assertions.assertEquals( "http://localhost:4317", agentConfig.getReporting().getEndpoint().getValue()); Assertions.assertEquals(true, agentConfig.getReporting().getSecure().getValue()); diff --git a/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/ReportingConfigImplTest.java b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/ReportingConfigImplTest.java index c86611a7a..a5d378d70 100644 --- a/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/ReportingConfigImplTest.java +++ b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/ReportingConfigImplTest.java @@ -21,9 +21,9 @@ import com.google.protobuf.BoolValue; import java.util.Iterator; import java.util.ServiceLoader; -import org.hypertrace.agent.config.Config.Opa; -import org.hypertrace.agent.config.Config.Reporting; -import org.hypertrace.agent.config.Config.Reporting.Builder; +import org.hypertrace.agent.config.v1.Config.Opa; +import org.hypertrace.agent.config.v1.Config.Reporting; +import org.hypertrace.agent.config.v1.Config.Reporting.Builder; import org.hypertrace.agent.core.config.ReportingConfig; import org.junit.jupiter.api.Test; diff --git a/otel-extensions/src/test/resources/config.yaml b/otel-extensions/src/test/resources/config.yaml index e8102e355..e128c1a64 100644 --- a/otel-extensions/src/test/resources/config.yaml +++ b/otel-extensions/src/test/resources/config.yaml @@ -7,6 +7,7 @@ reporting: endpoint: http://localhost:4317 secure: true trace_reporter_type: OTLP + cert_file: /foo/bar/example.pem opa: endpoint: http://opa.localhost:8181/ pollPeriodSeconds: 12 diff --git a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/SmokeTest.groovy b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/SmokeTest.groovy index ac9150ccb..a394924b0 100644 --- a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/SmokeTest.groovy +++ b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/SmokeTest.groovy @@ -255,7 +255,7 @@ abstract class SmokeTest extends Specification { .withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger("smoke.tests.backend"))) backend.start() - collector = new GenericContainer<>("otel/opentelemetry-collector-contrib-dev:latest") + collector = new GenericContainer<>("otel/opentelemetry-collector:0.21.0") .dependsOn(backend) .withNetwork(network) .withNetworkAliases("collector")