Skip to content

Commit 61c1f63

Browse files
authored
Add configuration type to metadata (#13825)
1 parent 03dffb1 commit 61c1f63

File tree

16 files changed

+160
-19
lines changed

16 files changed

+160
-19
lines changed

docs/instrumentation-list.yaml

Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
libraries:
66
activej:
77
- name: activej-http-6.0
8+
description: This instrumentation provides SERVER spans and metrics for the ActiveJ
9+
HTTP server.
810
source_path: instrumentation/activej-http-6.0
911
minimum_java_version: 17
1012
scope:
@@ -42,6 +44,8 @@ libraries:
4244
- com.typesafe.akka:akka-actor_2.13:[2.3,)
4345
alibaba:
4446
- name: alibaba-druid-1.0
47+
description: |
48+
The Alibaba Druid instrumentation generates database connection pool metrics for druid data sources.
4549
source_path: instrumentation/alibaba-druid-1.0
4650
scope:
4751
name: io.opentelemetry.alibaba-druid-1.0
@@ -149,6 +153,17 @@ libraries:
149153
target_versions:
150154
javaagent:
151155
- org.asynchttpclient:async-http-client:[2.0.0,)
156+
avaje:
157+
- name: avaje-jex-3.0
158+
description: |
159+
This instrumentation does not emit telemetry on its own. Instead, it hooks into the Avaje Jex Context to extract the HTTP route and attach it to existing SERVER spans and HTTP server metrics.
160+
source_path: instrumentation/avaje-jex-3.0
161+
minimum_java_version: 21
162+
scope:
163+
name: io.opentelemetry.avaje-jex-3.0
164+
target_versions:
165+
javaagent:
166+
- io.avaje:avaje-jex:[3.0,)
152167
aws:
153168
- name: aws-lambda-events-2.2
154169
source_path: instrumentation/aws-lambda/aws-lambda-events-2.2
@@ -250,7 +265,8 @@ libraries:
250265
configurations:
251266
- name: otel.instrumentation.common.db-statement-sanitizer.enabled
252267
description: Enables statement sanitization for database queries.
253-
default: 'true'
268+
type: boolean
269+
default: true
254270
- name: cassandra-4.4
255271
description: |
256272
Instruments the Cassandra database client, providing database client spans and metrics for Cassandra queries.
@@ -265,7 +281,8 @@ libraries:
265281
configurations:
266282
- name: otel.instrumentation.common.db-statement-sanitizer.enabled
267283
description: Enables statement sanitization for database queries.
268-
default: 'true'
284+
type: boolean
285+
default: true
269286
- name: cassandra-3.0
270287
description: |
271288
Instruments the Cassandra database client, providing database client spans and metrics for Cassandra queries.
@@ -278,7 +295,8 @@ libraries:
278295
configurations:
279296
- name: otel.instrumentation.common.db-statement-sanitizer.enabled
280297
description: Enables statement sanitization for database queries.
281-
default: 'true'
298+
type: boolean
299+
default: true
282300
clickhouse:
283301
- name: clickhouse-client-0.5
284302
description: Instruments the V1 ClickHouseClient, providing database client spans
@@ -292,7 +310,8 @@ libraries:
292310
configurations:
293311
- name: otel.instrumentation.common.db-statement-sanitizer.enabled
294312
description: Enables statement sanitization for database queries.
295-
default: 'true'
313+
type: boolean
314+
default: true
296315
couchbase:
297316
- name: couchbase-3.1.6
298317
source_path: instrumentation/couchbase/couchbase-3.1.6
@@ -415,10 +434,12 @@ libraries:
415434
configurations:
416435
- name: otel.instrumentation.executors.include
417436
description: List of Executor subclasses to be instrumented.
437+
type: list
418438
default: ''
419439
- name: otel.instrumentation.executors.include-all
420440
description: Whether to instrument all classes that implement the Executor interface.
421-
default: 'false'
441+
type: boolean
442+
default: false
422443
finagle:
423444
- name: finagle-http-23.11
424445
source_path: instrumentation/finagle-http-23.11
@@ -741,7 +762,7 @@ libraries:
741762
- name: jdbc
742763
description: |
743764
The JDBC instrumentation provides database client spans and metrics. Each call produces a span named after the SQL verb, enriched with standard DB client attributes (system, database, operation, sanitized statement, peer address) and error details if an exception occurs.
744-
disabled_by_default: true
765+
There is also a "jdbc-datasource" instrumentation that creates spans for datasource connections, but is disabled by default due to the volume of telemetry produced.
745766
source_path: instrumentation/jdbc
746767
scope:
747768
name: io.opentelemetry.jdbc
@@ -752,14 +773,21 @@ libraries:
752773
- name: otel.instrumentation.jdbc.statement-sanitizer.enabled
753774
description: Enables statement sanitization for database queries. Takes precedent
754775
to otel.instrumentation.common.db-statement-sanitizer.enabled.
755-
default: 'true'
776+
type: boolean
777+
default: true
756778
- name: otel.instrumentation.common.db-statement-sanitizer.enabled
757779
description: Enables statement sanitization for database queries.
758-
default: 'true'
780+
type: boolean
781+
default: true
759782
- name: otel.instrumentation.common.peer-service-mapping
760783
description: Used to specify a mapping from host names or IP addresses to peer
761784
services.
785+
type: map
762786
default: ''
787+
- name: otel.instrumentation.jdbc-datasource.enabled
788+
description: Enables instrumentation of JDBC datasource connections.
789+
type: boolean
790+
default: false
763791
jedis:
764792
- name: jedis-1.4
765793
source_path: instrumentation/jedis/jedis-1.4
@@ -916,6 +944,15 @@ libraries:
916944
target_versions:
917945
javaagent:
918946
- org.apache.kafka:kafka-clients:[0.11.0.0,)
947+
configurations:
948+
- name: otel.instrumentation.kafka.producer-propagation.enabled
949+
description: Enable context propagation for kafka message producers.
950+
type: boolean
951+
default: true
952+
- name: otel.instrumentation.kafka.experimental-span-attributes
953+
description: Enables the capture of the experimental consumer attribute "kafka.record.queue_time_ms"
954+
type: boolean
955+
default: false
919956
kotlinx:
920957
- name: kotlinx-coroutines
921958
source_path: instrumentation/kotlinx-coroutines
@@ -1169,14 +1206,22 @@ libraries:
11691206
javaagent:
11701207
- com.squareup.okhttp:okhttp:[2.2,3)
11711208
opensearch:
1209+
- name: opensearch-rest-3.0
1210+
source_path: instrumentation/opensearch/opensearch-rest-3.0
1211+
minimum_java_version: 11
1212+
scope:
1213+
name: io.opentelemetry.opensearch-rest-3.0
1214+
target_versions:
1215+
javaagent:
1216+
- org.opensearch.client:opensearch-rest-client:[3.0,)
11721217
- name: opensearch-rest-1.0
11731218
source_path: instrumentation/opensearch/opensearch-rest-1.0
11741219
minimum_java_version: 11
11751220
scope:
11761221
name: io.opentelemetry.opensearch-rest-1.0
11771222
target_versions:
11781223
javaagent:
1179-
- org.opensearch.client:opensearch-rest-client:[1.0,)
1224+
- org.opensearch.client:opensearch-rest-client:[1.0,3.0)
11801225
oracle:
11811226
- name: oracle-ucp-11.2
11821227
source_path: instrumentation/oracle-ucp-11.2

instrumentation-docs/readme.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public class SpringWebInstrumentationModule extends InstrumentationModule
6969
* Name: The scope name of the instrumentation, `io.opentelemetry.{instrumentation name}`
7070
* configurations settings
7171
* List of settings that are available for the instrumentation module
72-
* Each setting has a name, description, and default value
72+
* Each setting has a name, description, type, and default value
7373

7474
## Methodology
7575

@@ -87,6 +87,7 @@ classification: internal # instrumentation classification: library | inte
8787
configurations:
8888
- name: otel.instrumentation.common.db-statement-sanitizer.enabled
8989
description: Enables statement sanitization for database queries.
90+
type: boolean # boolean | string | list | map
9091
default: true
9192
```
9293

instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/internal/ConfigurationOption.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,26 @@
66
package io.opentelemetry.instrumentation.docs.internal;
77

88
import com.fasterxml.jackson.annotation.JsonProperty;
9+
import java.util.Objects;
910

1011
/**
11-
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
12-
* any time.
12+
* Represents a configuration option available for an instrumentation. This class is internal and is
13+
* hence not for public use. Its APIs are unstable and can change at any time.
1314
*/
1415
public record ConfigurationOption(
15-
String name, String description, @JsonProperty("default") String defaultValue) {}
16+
String name,
17+
String description,
18+
@JsonProperty("default") String defaultValue,
19+
ConfigurationType type) {
20+
21+
public ConfigurationOption {
22+
Objects.requireNonNull(name, "name");
23+
Objects.requireNonNull(description, "description");
24+
Objects.requireNonNull(defaultValue, "defaultValue");
25+
Objects.requireNonNull(type, "type");
26+
27+
if (name.isBlank() || description.isBlank()) {
28+
throw new IllegalArgumentException("ConfigurationOption name/description cannot be blank");
29+
}
30+
}
31+
}
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.instrumentation.docs.internal;
7+
8+
import com.fasterxml.jackson.annotation.JsonCreator;
9+
import com.fasterxml.jackson.annotation.JsonValue;
10+
import java.util.Locale;
11+
12+
/**
13+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
14+
* any time.
15+
*/
16+
public enum ConfigurationType {
17+
BOOLEAN("boolean"),
18+
STRING("string"),
19+
MAP("map"),
20+
LIST("list");
21+
22+
ConfigurationType(String unused) {}
23+
24+
@JsonCreator
25+
public static ConfigurationType from(String value) {
26+
return ConfigurationType.valueOf(value.toUpperCase(Locale.ROOT));
27+
}
28+
29+
@JsonValue
30+
@Override
31+
public String toString() {
32+
return name().toLowerCase(Locale.ROOT);
33+
}
34+
}

instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/utils/YamlHelper.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.fasterxml.jackson.databind.ObjectMapper;
1010
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
1111
import io.opentelemetry.instrumentation.docs.internal.ConfigurationOption;
12+
import io.opentelemetry.instrumentation.docs.internal.ConfigurationType;
1213
import io.opentelemetry.instrumentation.docs.internal.InstrumentationClassification;
1314
import io.opentelemetry.instrumentation.docs.internal.InstrumentationMetaData;
1415
import io.opentelemetry.instrumentation.docs.internal.InstrumentationModule;
@@ -144,12 +145,18 @@ private static Map<String, Object> baseProperties(InstrumentationModule module)
144145
}
145146

146147
if (module.getMetadata() != null && !module.getMetadata().getConfigurations().isEmpty()) {
147-
List<Map<String, String>> configurations = new ArrayList<>();
148+
List<Map<String, Object>> configurations = new ArrayList<>();
148149
for (ConfigurationOption configuration : module.getMetadata().getConfigurations()) {
149-
Map<String, String> conf = new LinkedHashMap<>();
150+
Map<String, Object> conf = new LinkedHashMap<>();
150151
conf.put("name", configuration.name());
151152
conf.put("description", configuration.description());
152-
conf.put("default", configuration.defaultValue());
153+
conf.put("type", configuration.type().toString());
154+
if (configuration.type().equals(ConfigurationType.BOOLEAN)) {
155+
conf.put("default", Boolean.parseBoolean(configuration.defaultValue()));
156+
} else {
157+
conf.put("default", configuration.defaultValue());
158+
}
159+
153160
configurations.add(conf);
154161
}
155162
moduleMap.put("configurations", configurations);

instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/utils/YamlHelperTest.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import com.fasterxml.jackson.core.JsonProcessingException;
1111
import io.opentelemetry.instrumentation.docs.internal.ConfigurationOption;
12+
import io.opentelemetry.instrumentation.docs.internal.ConfigurationType;
1213
import io.opentelemetry.instrumentation.docs.internal.InstrumentationClassification;
1314
import io.opentelemetry.instrumentation.docs.internal.InstrumentationMetaData;
1415
import io.opentelemetry.instrumentation.docs.internal.InstrumentationModule;
@@ -112,7 +113,8 @@ void testGenerateInstrumentationYamlSeparatesClassifications() throws Exception
112113
new ConfigurationOption(
113114
"otel.instrumentation.spring-web-6.0.enabled",
114115
"Enables or disables Spring Web 6.0 instrumentation.",
115-
"true")));
116+
"true",
117+
ConfigurationType.BOOLEAN)));
116118

117119
modules.add(
118120
new InstrumentationModule.Builder()
@@ -180,7 +182,8 @@ void testGenerateInstrumentationYamlSeparatesClassifications() throws Exception
180182
configurations:
181183
- name: otel.instrumentation.spring-web-6.0.enabled
182184
description: Enables or disables Spring Web 6.0 instrumentation.
183-
default: 'true'
185+
type: boolean
186+
default: true
184187
internal:
185188
- name: internal-application-logger
186189
source_path: instrumentation/internal/internal-application-logger
@@ -209,6 +212,7 @@ void testMetadataParser() throws JsonProcessingException {
209212
configurations:
210213
- name: otel.instrumentation.common.db-statement-sanitizer.enabled
211214
description: Enables statement sanitization for database queries.
215+
type: boolean
212216
default: true
213217
""";
214218

@@ -262,6 +266,7 @@ void testMetadataParserWithOnlyConfigurations() throws JsonProcessingException {
262266
configurations:
263267
- name: otel.instrumentation.common.db-statement-sanitizer.enabled
264268
description: Enables statement sanitization for database queries.
269+
type: boolean
265270
default: true
266271
""";
267272
InstrumentationMetaData metadata = YamlHelper.metaDataParser(input);
@@ -276,5 +281,6 @@ void testMetadataParserWithOnlyConfigurations() throws JsonProcessingException {
276281
assertThat(config.description())
277282
.isEqualTo("Enables statement sanitization for database queries.");
278283
assertThat(config.defaultValue()).isEqualTo("true");
284+
assertThat(config.type()).isEqualTo(ConfigurationType.BOOLEAN);
279285
}
280286
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
description: This instrumentation provides SERVER spans and metrics for the ActiveJ HTTP server.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
description: >
2+
The Alibaba Druid instrumentation generates database connection pool metrics for druid data
3+
sources.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
description: >
2+
This instrumentation does not emit telemetry on its own. Instead, it hooks into the Avaje Jex
3+
Context to extract the HTTP route and attach it to existing SERVER spans and HTTP server
4+
metrics.

instrumentation/cassandra/cassandra-3.0/metadata.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ description: >
44
configurations:
55
- name: otel.instrumentation.common.db-statement-sanitizer.enabled
66
description: Enables statement sanitization for database queries.
7+
type: boolean
78
default: true

0 commit comments

Comments
 (0)