Skip to content

Commit c313427

Browse files
authored
Pass through configured otlp headers for logs containing profiles. (#2236)
* pass through configured otlp headers for logs containing profiles. * use upstream util to configure exporter.
1 parent ddff7fe commit c313427

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

profiler/src/main/java/com/splunk/opentelemetry/profiler/LogExporterBuilder.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616

1717
package com.splunk.opentelemetry.profiler;
1818

19+
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_LOGS;
20+
1921
import com.google.common.annotations.VisibleForTesting;
2022
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
2123
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder;
24+
import io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil;
2225
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
2326
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder;
2427
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
@@ -56,6 +59,19 @@ static LogRecordExporter buildHttpExporter(
5659
ConfigProperties config, Supplier<OtlpHttpLogRecordExporterBuilder> makeBuilder) {
5760
OtlpHttpLogRecordExporterBuilder builder = makeBuilder.get();
5861
String ingestUrl = Configuration.getConfigUrl(config);
62+
63+
OtlpConfigUtil.configureOtlpExporterBuilder(
64+
DATA_TYPE_LOGS,
65+
config,
66+
builder::setEndpoint,
67+
builder::addHeader,
68+
builder::setCompression,
69+
builder::setTimeout,
70+
builder::setTrustedCertificates,
71+
builder::setClientTls,
72+
builder::setRetryPolicy,
73+
builder::setMemoryMode);
74+
5975
if (ingestUrl != null) {
6076
builder.setEndpoint(ingestUrl);
6177
}

profiler/src/test/java/com/splunk/opentelemetry/profiler/LogExporterBuilderTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder;
3333
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
3434
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
35+
import java.util.Map;
3536
import org.junit.jupiter.api.Test;
3637

3738
class LogExporterBuilderTest {
@@ -58,12 +59,53 @@ void testBuildSimpleHttp() {
5859

5960
when(builder.addHeader(EXTRA_CONTENT_TYPE, STACKTRACES_HEADER_VALUE)).thenReturn(builder);
6061
when(builder.build()).thenReturn(expected);
62+
when(config.getString("otel.exporter.otlp.protocol", "grpc")).thenReturn("http/protobuf");
6163

6264
LogRecordExporter exporter = LogExporterBuilder.buildHttpExporter(config, () -> builder);
6365
assertSame(expected, exporter);
6466
verify(builder, never()).setEndpoint(anyString());
6567
}
6668

69+
@Test
70+
void extraOtlpHeaders() {
71+
ConfigProperties config = mock(ConfigProperties.class);
72+
when(config.getMap("otel.exporter.otlp.headers"))
73+
.thenReturn(Map.of("foo", "bar", "bar", "baz"));
74+
when(config.getMap("otel.exporter.otlp.logs.headers")).thenReturn(Map.of("log", "lady"));
75+
when(config.getString("otel.exporter.otlp.protocol", "grpc")).thenReturn("http/protobuf");
76+
77+
OtlpHttpLogRecordExporterBuilder builder = mock(OtlpHttpLogRecordExporterBuilder.class);
78+
OtlpHttpLogRecordExporter expected = mock(OtlpHttpLogRecordExporter.class);
79+
80+
when(builder.addHeader(anyString(), anyString())).thenReturn(builder);
81+
when(builder.build()).thenReturn(expected);
82+
83+
LogRecordExporter exporter = LogExporterBuilder.buildHttpExporter(config, () -> builder);
84+
assertSame(expected, exporter);
85+
verify(builder).addHeader(EXTRA_CONTENT_TYPE, STACKTRACES_HEADER_VALUE);
86+
verify(builder).addHeader("log", "lady");
87+
verify(builder, never()).addHeader("foo", "bar");
88+
verify(builder, never()).addHeader("bar", "baz");
89+
}
90+
91+
@Test
92+
void extraOtlpLogSpecificHeaders() {
93+
ConfigProperties config = mock(ConfigProperties.class);
94+
when(config.getMap("otel.exporter.otlp.headers"))
95+
.thenReturn(Map.of("foo", "bar", "bar", "baz"));
96+
when(config.getString("otel.exporter.otlp.protocol", "grpc")).thenReturn("http/protobuf");
97+
98+
OtlpHttpLogRecordExporterBuilder builder = mock(OtlpHttpLogRecordExporterBuilder.class);
99+
OtlpHttpLogRecordExporter expected = mock(OtlpHttpLogRecordExporter.class);
100+
101+
when(builder.addHeader(anyString(), anyString())).thenReturn(builder);
102+
when(builder.build()).thenReturn(expected);
103+
104+
LogRecordExporter exporter = LogExporterBuilder.buildHttpExporter(config, () -> builder);
105+
assertSame(expected, exporter);
106+
verify(builder).addHeader(EXTRA_CONTENT_TYPE, STACKTRACES_HEADER_VALUE);
107+
}
108+
67109
@Test
68110
void testCustomEndpointGrpc() {
69111
String endpoint = "http://example.com:9122/";
@@ -105,6 +147,7 @@ void testCustomEndpointHttp() {
105147
when(config.getString(
106148
Configuration.CONFIG_KEY_INGEST_URL, "http://shadowed.example.com:9122/v1/logs"))
107149
.thenReturn(endpoint);
150+
when(config.getString("otel.exporter.otlp.protocol", "grpc")).thenReturn("http/protobuf");
108151
LogRecordExporter exporter = LogExporterBuilder.buildHttpExporter(config, () -> builder);
109152

110153
assertNotNull(exporter);

0 commit comments

Comments
 (0)