Skip to content

Commit 0070c2c

Browse files
authored
✨ Add support for custom certificate files (#348)
* ⬆️ upgrade agent config submodule * ✅ add test case for yaml based config of cert file * ✅ add test case for environment based config of cert file * ✨ support cert file from evn var/system properties' * ✨ configure OpenTelemetry SDK certifacte based on HT cert_file config * 🔊 add log message for case when exporter is not OTLP but there is a cert_file configured' * 🐛 lock collector to version
1 parent e761494 commit 0070c2c

File tree

14 files changed

+65
-40
lines changed

14 files changed

+65
-40
lines changed

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import io.opentelemetry.javaagent.extension.AgentListener;
2222
import java.util.List;
2323
import java.util.stream.Collectors;
24-
import org.hypertrace.agent.config.Config.AgentConfig;
24+
import org.hypertrace.agent.config.v1.Config.AgentConfig;
2525
import org.hypertrace.agent.filter.FilterRegistry;
2626
import org.hypertrace.agent.otel.extensions.config.HypertraceConfig;
2727

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceResourceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
2424
import io.opentelemetry.sdk.resources.Resource;
2525
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
26-
import org.hypertrace.agent.config.Config.AgentConfig;
26+
import org.hypertrace.agent.config.v1.Config.AgentConfig;
2727
import org.hypertrace.agent.otel.extensions.config.HypertraceConfig;
2828
import org.slf4j.Logger;
2929
import org.slf4j.LoggerFactory;

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/EnvironmentConfig.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@
1919
import com.google.protobuf.BoolValue;
2020
import com.google.protobuf.Int32Value;
2121
import com.google.protobuf.StringValue;
22-
import org.hypertrace.agent.config.Config.AgentConfig;
23-
import org.hypertrace.agent.config.Config.DataCapture;
24-
import org.hypertrace.agent.config.Config.JavaAgent;
25-
import org.hypertrace.agent.config.Config.Message;
26-
import org.hypertrace.agent.config.Config.Opa;
27-
import org.hypertrace.agent.config.Config.Opa.Builder;
28-
import org.hypertrace.agent.config.Config.PropagationFormat;
29-
import org.hypertrace.agent.config.Config.Reporting;
30-
import org.hypertrace.agent.config.Config.TraceReporterType;
22+
import org.hypertrace.agent.config.v1.Config.AgentConfig;
23+
import org.hypertrace.agent.config.v1.Config.DataCapture;
24+
import org.hypertrace.agent.config.v1.Config.JavaAgent;
25+
import org.hypertrace.agent.config.v1.Config.Message;
26+
import org.hypertrace.agent.config.v1.Config.Opa;
27+
import org.hypertrace.agent.config.v1.Config.Opa.Builder;
28+
import org.hypertrace.agent.config.v1.Config.PropagationFormat;
29+
import org.hypertrace.agent.config.v1.Config.Reporting;
30+
import org.hypertrace.agent.config.v1.Config.TraceReporterType;
3131

3232
public class EnvironmentConfig {
3333

@@ -46,6 +46,7 @@ private EnvironmentConfig() {}
4646
static final String REPORTING_ENDPOINT = REPORTING_PREFIX + "endpoint";
4747
static final String REPORTING_TRACE_TYPE = REPORTING_PREFIX + "trace.reporter.type";
4848
static final String REPORTING_SECURE = REPORTING_PREFIX + "secure";
49+
static final String REPORTING_CERT_FILE = REPORTING_PREFIX + "cert.file";
4950

5051
private static final String OPA_PREFIX = REPORTING_PREFIX + "opa.";
5152
static final String OPA_ENDPOINT = OPA_PREFIX + "endpoint";
@@ -133,6 +134,10 @@ private static Reporting.Builder applyReporting(Reporting.Builder builder) {
133134
if (secure != null) {
134135
builder.setSecure(BoolValue.newBuilder().setValue(Boolean.valueOf(secure)).build());
135136
}
137+
String certFilePath = getProperty(REPORTING_CERT_FILE);
138+
if (certFilePath != null) {
139+
builder.setCertFile(StringValue.of(certFilePath));
140+
}
136141
Builder opaBuilder = applyOpa(builder.getOpa().toBuilder());
137142
builder.setOpa(opaBuilder);
138143
return builder;

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/HypertraceAgentConfiguration.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,17 @@
2323
import java.util.List;
2424
import java.util.Map;
2525
import java.util.stream.Collectors;
26-
import org.hypertrace.agent.config.Config.AgentConfig;
27-
import org.hypertrace.agent.config.Config.PropagationFormat;
28-
import org.hypertrace.agent.config.Config.TraceReporterType;
26+
import org.hypertrace.agent.config.v1.Config.AgentConfig;
27+
import org.hypertrace.agent.config.v1.Config.PropagationFormat;
28+
import org.hypertrace.agent.config.v1.Config.TraceReporterType;
29+
import org.slf4j.Logger;
30+
import org.slf4j.LoggerFactory;
2931

3032
@AutoService(ConfigPropertySource.class)
3133
public class HypertraceAgentConfiguration implements ConfigPropertySource {
3234

35+
private static final Logger log = LoggerFactory.getLogger(HypertraceAgentConfiguration.class);
36+
3337
// https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/sdk-environment-variables.md
3438
private static final String OTEL_TRACE_EXPORTER = "otel.traces.exporter";
3539
private static final String OTEL_METRICS_EXPORTER = "otel.metrics.exporter";
@@ -43,6 +47,7 @@ public class HypertraceAgentConfiguration implements ConfigPropertySource {
4347
private static final String OTEL_EXPORTER_OTLP_ENDPOINT = "otel.exporter.otlp.endpoint";
4448

4549
private static final String OTEL_ENABLED = "otel.javaagent.enabled";
50+
private static final String OTEL_OTLP_CERT = "otel.exporter.otlp.certificate";
4651

4752
@Override
4853
public Map<String, String> getProperties() {
@@ -66,6 +71,14 @@ public Map<String, String> getProperties() {
6671
OTEL_PROPAGATORS, toOtelPropagators(agentConfig.getPropagationFormatsList()));
6772
// metrics are not reported
6873
configProperties.put(OTEL_METRICS_EXPORTER, "none");
74+
if (agentConfig.getReporting().hasCertFile()) {
75+
if (agentConfig.getReporting().getTraceReporterType() == TraceReporterType.OTLP) {
76+
configProperties.put(OTEL_OTLP_CERT, agentConfig.getReporting().getCertFile().getValue());
77+
} else {
78+
log.warn(
79+
"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");
80+
}
81+
}
6982

7083
return configProperties;
7184
}

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/HypertraceConfig.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@
3030
import java.io.InputStream;
3131
import java.io.InputStreamReader;
3232
import java.io.Reader;
33-
import org.hypertrace.agent.config.Config;
34-
import org.hypertrace.agent.config.Config.AgentConfig;
35-
import org.hypertrace.agent.config.Config.DataCapture;
36-
import org.hypertrace.agent.config.Config.Message;
37-
import org.hypertrace.agent.config.Config.Opa;
38-
import org.hypertrace.agent.config.Config.Opa.Builder;
39-
import org.hypertrace.agent.config.Config.PropagationFormat;
40-
import org.hypertrace.agent.config.Config.Reporting;
41-
import org.hypertrace.agent.config.Config.TraceReporterType;
33+
import org.hypertrace.agent.config.v1.Config;
34+
import org.hypertrace.agent.config.v1.Config.AgentConfig;
35+
import org.hypertrace.agent.config.v1.Config.DataCapture;
36+
import org.hypertrace.agent.config.v1.Config.Message;
37+
import org.hypertrace.agent.config.v1.Config.Opa;
38+
import org.hypertrace.agent.config.v1.Config.Opa.Builder;
39+
import org.hypertrace.agent.config.v1.Config.PropagationFormat;
40+
import org.hypertrace.agent.config.v1.Config.Reporting;
41+
import org.hypertrace.agent.config.v1.Config.TraceReporterType;
4242
import org.slf4j.Logger;
4343
import org.slf4j.LoggerFactory;
4444

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/InstrumentationConfigImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
package org.hypertrace.agent.otel.extensions.config;
1818

1919
import com.google.auto.service.AutoService;
20-
import org.hypertrace.agent.config.Config;
21-
import org.hypertrace.agent.config.Config.AgentConfig;
22-
import org.hypertrace.agent.config.Config.DataCapture;
23-
import org.hypertrace.agent.config.Config.Message;
20+
import org.hypertrace.agent.config.v1.Config;
21+
import org.hypertrace.agent.config.v1.Config.AgentConfig;
22+
import org.hypertrace.agent.config.v1.Config.DataCapture;
23+
import org.hypertrace.agent.config.v1.Config.Message;
2424
import org.hypertrace.agent.core.config.InstrumentationConfig;
2525

2626
@AutoService(InstrumentationConfig.class)

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/ReportingConfigImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package org.hypertrace.agent.otel.extensions.config;
1818

1919
import com.google.auto.service.AutoService;
20-
import org.hypertrace.agent.config.Config;
20+
import org.hypertrace.agent.config.v1.Config;
2121
import org.hypertrace.agent.core.config.ReportingConfig;
2222

2323
@AutoService(ReportingConfig.class)

otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfigurationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import java.util.Arrays;
2020
import java.util.List;
21-
import org.hypertrace.agent.config.Config.PropagationFormat;
21+
import org.hypertrace.agent.config.v1.Config.PropagationFormat;
2222
import org.hypertrace.agent.otel.extensions.config.HypertraceAgentConfiguration;
2323
import org.junit.jupiter.api.Assertions;
2424
import org.junit.jupiter.api.Test;

otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/config/EnvironmentConfigTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818

1919
import com.google.protobuf.StringValue;
2020
import java.util.Arrays;
21-
import org.hypertrace.agent.config.Config.AgentConfig;
22-
import org.hypertrace.agent.config.Config.PropagationFormat;
23-
import org.hypertrace.agent.config.Config.TraceReporterType;
21+
import org.hypertrace.agent.config.v1.Config.AgentConfig;
22+
import org.hypertrace.agent.config.v1.Config.PropagationFormat;
23+
import org.hypertrace.agent.config.v1.Config.TraceReporterType;
2424
import org.junit.jupiter.api.Assertions;
2525
import org.junit.jupiter.api.Test;
2626
import org.junitpioneer.jupiter.ClearSystemProperty;
@@ -31,6 +31,7 @@ class EnvironmentConfigTest {
3131
@ClearSystemProperty(key = EnvironmentConfig.REPORTING_ENDPOINT)
3232
@ClearSystemProperty(key = EnvironmentConfig.REPORTING_SECURE)
3333
@ClearSystemProperty(key = EnvironmentConfig.REPORTING_TRACE_TYPE)
34+
@ClearSystemProperty(key = EnvironmentConfig.REPORTING_CERT_FILE)
3435
@ClearSystemProperty(key = EnvironmentConfig.OPA_ENDPOINT)
3536
@ClearSystemProperty(key = EnvironmentConfig.OPA_POLL_PERIOD)
3637
@ClearSystemProperty(key = EnvironmentConfig.OPA_ENABLED)
@@ -46,6 +47,7 @@ public void systemProperties() {
4647
System.setProperty(EnvironmentConfig.REPORTING_ENDPOINT, "http://:-)");
4748
System.setProperty(EnvironmentConfig.REPORTING_TRACE_TYPE, "OTLP");
4849
System.setProperty(EnvironmentConfig.REPORTING_SECURE, "true");
50+
System.setProperty(EnvironmentConfig.REPORTING_CERT_FILE, "/bar/test.pem");
4951
System.setProperty(EnvironmentConfig.CAPTURE_HTTP_BODY_PREFIX + "request", "true");
5052
System.setProperty(EnvironmentConfig.OPA_ENDPOINT, "http://azkaban:9090");
5153
System.setProperty(EnvironmentConfig.OPA_POLL_PERIOD, "10");
@@ -78,6 +80,7 @@ public void systemProperties() {
7880
10, agentConfig.getReporting().getOpa().getPollPeriodSeconds().getValue());
7981
Assertions.assertEquals(512, agentConfig.getDataCapture().getBodyMaxSizeBytes().getValue());
8082
Assertions.assertEquals(true, agentConfig.getReporting().getSecure().getValue());
83+
Assertions.assertEquals("/bar/test.pem", agentConfig.getReporting().getCertFile().getValue());
8184
Assertions.assertEquals(
8285
true, agentConfig.getDataCapture().getHttpBody().getRequest().getValue());
8386
Assertions.assertEquals(2, agentConfig.getJavaagent().getFilterJarPathsCount());

0 commit comments

Comments
 (0)