Skip to content

Commit bb5449f

Browse files
add declarative config for baggage (open-telemetry#2031)
Co-authored-by: otelbot <[email protected]>
1 parent b5b5fb7 commit bb5449f

File tree

8 files changed

+177
-2
lines changed

8 files changed

+177
-2
lines changed

baggage-processor/README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,36 @@ processors through configuration.
2525
| `otel.java.experimental.span-attributes.copy-from-baggage.include` | Add baggage entries as span attributes, e.g. `key1,key2` or `*` to add all baggage items as keys. |
2626
| `otel.java.experimental.log-attributes.copy-from-baggage.include` | Add baggage entries as log attributes, e.g. `key1,key2` or `*` to add all baggage items as keys. |
2727

28+
### Usage with declarative configuration
29+
30+
You can configure the baggage span and log record processors using declarative YAML configuration with the OpenTelemetry SDK.
31+
32+
For the tracer provider (span processor):
33+
34+
```yaml
35+
file_format: 1.0-rc.1
36+
tracer_provider:
37+
processors:
38+
- baggage:
39+
included: [foo]
40+
excluded: [bar]
41+
```
42+
43+
For the logger provider (log record processor):
44+
45+
```yaml
46+
file_format: 1.0-rc.1
47+
logger_provider:
48+
processors:
49+
- baggage:
50+
included: [foo]
51+
excluded: [bar]
52+
```
53+
54+
This will configure the respective processor to include baggage keys listed in `included` and
55+
exclude those in `excluded` as explained in
56+
[Properties which pattern matching](https://github.com/open-telemetry/opentelemetry-configuration/blob/main/CONTRIBUTING.md#properties-which-pattern-matching).
57+
2858
### Usage through programmatic activation
2959

3060
Add the span and log processor when configuring the tracer and logger providers.

baggage-processor/build.gradle.kts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,19 @@ description = "OpenTelemetry Baggage Span Processor"
88
otelJava.moduleName.set("io.opentelemetry.contrib.baggage.processor")
99

1010
dependencies {
11+
annotationProcessor("com.google.auto.service:auto-service")
12+
compileOnly("com.google.auto.service:auto-service-annotations")
1113
api("io.opentelemetry:opentelemetry-api")
1214
api("io.opentelemetry:opentelemetry-sdk")
1315
implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")
16+
compileOnly("io.opentelemetry:opentelemetry-sdk-common")
17+
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-incubator")
1418

19+
testAnnotationProcessor("com.google.auto.service:auto-service")
20+
testCompileOnly("com.google.auto.service:auto-service-annotations")
21+
testImplementation("io.opentelemetry:opentelemetry-sdk-common")
1522
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
23+
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator")
1624
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
1725
testImplementation("org.mockito:mockito-inline")
1826
testImplementation("com.google.guava:guava")
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.baggage.processor;
7+
8+
import com.google.auto.service.AutoService;
9+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
10+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
11+
import io.opentelemetry.sdk.internal.IncludeExcludePredicate;
12+
import io.opentelemetry.sdk.logs.LogRecordProcessor;
13+
14+
@SuppressWarnings("rawtypes")
15+
@AutoService(ComponentProvider.class)
16+
public class BaggageLogRecordComponentProvider implements ComponentProvider<LogRecordProcessor> {
17+
@Override
18+
public String getName() {
19+
return "baggage";
20+
}
21+
22+
@Override
23+
public LogRecordProcessor create(DeclarativeConfigProperties config) {
24+
return new BaggageLogRecordProcessor(
25+
IncludeExcludePredicate.createPatternMatching(
26+
config.getScalarList("included", String.class),
27+
config.getScalarList("excluded", String.class)));
28+
}
29+
30+
@Override
31+
public Class<LogRecordProcessor> getType() {
32+
return LogRecordProcessor.class;
33+
}
34+
}

baggage-processor/src/main/java/io/opentelemetry/contrib/baggage/processor/BaggageProcessorCustomizer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55

66
package io.opentelemetry.contrib.baggage.processor;
77

8+
import com.google.auto.service.AutoService;
89
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer;
910
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
1011
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1112
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
1213
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
1314
import java.util.List;
1415

16+
@AutoService(AutoConfigurationCustomizerProvider.class)
1517
public class BaggageProcessorCustomizer implements AutoConfigurationCustomizerProvider {
1618
@Override
1719
public void customize(AutoConfigurationCustomizer autoConfigurationCustomizer) {
@@ -57,7 +59,7 @@ private static void addLogRecordProcessor(
5759
return;
5860
}
5961

60-
// need to add before the batch span processor
62+
// need to add before the batch log processor
6163
sdkLoggerProviderBuilder.addLogRecordProcessorFirst(createBaggageLogRecordProcessor(keys));
6264
}
6365

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.baggage.processor;
7+
8+
import com.google.auto.service.AutoService;
9+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
10+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
11+
import io.opentelemetry.sdk.internal.IncludeExcludePredicate;
12+
import io.opentelemetry.sdk.trace.SpanProcessor;
13+
14+
@SuppressWarnings("rawtypes")
15+
@AutoService(ComponentProvider.class)
16+
public class BaggageSpanComponentProvider implements ComponentProvider<SpanProcessor> {
17+
@Override
18+
public String getName() {
19+
return "baggage";
20+
}
21+
22+
@Override
23+
public SpanProcessor create(DeclarativeConfigProperties config) {
24+
return new BaggageSpanProcessor(
25+
IncludeExcludePredicate.createPatternMatching(
26+
config.getScalarList("included", String.class),
27+
config.getScalarList("excluded", String.class)));
28+
}
29+
30+
@Override
31+
public Class<SpanProcessor> getType() {
32+
return SpanProcessor.class;
33+
}
34+
}

baggage-processor/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.baggage.processor;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.sdk.OpenTelemetrySdk;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
12+
import java.io.ByteArrayInputStream;
13+
import java.nio.charset.StandardCharsets;
14+
import org.junit.jupiter.api.Test;
15+
16+
class BaggageLogRecordComponentProviderTest {
17+
18+
@Test
19+
void declarativeConfig() {
20+
String yaml =
21+
"file_format: 1.0-rc.1\n"
22+
+ "logger_provider:\n"
23+
+ " processors:\n"
24+
+ " - baggage:\n"
25+
+ " included: [foo]\n"
26+
+ " excluded: [bar]\n";
27+
28+
OpenTelemetrySdk sdk =
29+
DeclarativeConfiguration.parseAndCreate(
30+
new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8)));
31+
32+
assertThat(sdk).asString().contains("BaggageLogRecordProcessor");
33+
}
34+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.baggage.processor;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.sdk.OpenTelemetrySdk;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
12+
import java.io.ByteArrayInputStream;
13+
import java.nio.charset.StandardCharsets;
14+
import org.junit.jupiter.api.Test;
15+
16+
class BaggageSpanComponentProviderTest {
17+
18+
@Test
19+
void declarativeConfig() {
20+
String yaml =
21+
"file_format: 1.0-rc.1\n"
22+
+ "tracer_provider:\n"
23+
+ " processors:\n"
24+
+ " - baggage:\n"
25+
+ " included: [foo]\n"
26+
+ " excluded: [bar]\n";
27+
28+
OpenTelemetrySdk sdk =
29+
DeclarativeConfiguration.parseAndCreate(
30+
new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8)));
31+
32+
assertThat(sdk).asString().contains("BaggageSpanProcessor");
33+
}
34+
}

0 commit comments

Comments
 (0)