diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java new file mode 100644 index 000000000000..5efed55bd1d9 --- /dev/null +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java @@ -0,0 +1,34 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.incubator.config.internal; + +import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class DeclarativeConfigUtil { + + private DeclarativeConfigUtil() {} + + public static ExtendedDeclarativeConfigProperties get(OpenTelemetry openTelemetry) { + DeclarativeConfigProperties javaConfig = empty(); + if (openTelemetry instanceof ExtendedOpenTelemetry) { + ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry; + DeclarativeConfigProperties instrumentationConfig = + extendedOpenTelemetry.getConfigProvider().getInstrumentationConfig(); + if (instrumentationConfig != null) { + javaConfig = instrumentationConfig.getStructured("java", empty()); + } + } + return new ExtendedDeclarativeConfigProperties(javaConfig); + } +} diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/ExtendedDeclarativeConfigProperties.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/ExtendedDeclarativeConfigProperties.java new file mode 100644 index 000000000000..a2fdf323d7ae --- /dev/null +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/ExtendedDeclarativeConfigProperties.java @@ -0,0 +1,112 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.incubator.config.internal; + +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.common.ComponentLoader; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import javax.annotation.Nullable; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class ExtendedDeclarativeConfigProperties implements DeclarativeConfigProperties { + + private final DeclarativeConfigProperties delegate; + + ExtendedDeclarativeConfigProperties(DeclarativeConfigProperties delegate) { + this.delegate = delegate; + } + + @Nullable + @Override + public String getString(String name) { + return delegate.getString(name); + } + + public Optional getBoolean(String... path) { + if (path.length == 0) { + return Optional.empty(); + } + DeclarativeConfigProperties current = delegate; + for (int i = 0; i < path.length - 1; i++) { + current = current.getStructured(path[i]); + if (current == null) { + return Optional.empty(); + } + } + return Optional.ofNullable(current.getBoolean(path[path.length - 1])); + } + + public Optional> getScalarList(Class scalarType, String... path) { + if (path.length == 0) { + return Optional.empty(); + } + DeclarativeConfigProperties current = delegate; + for (int i = 0; i < path.length - 1; i++) { + current = current.getStructured(path[i]); + if (current == null) { + return Optional.empty(); + } + } + return Optional.ofNullable(current.getScalarList(path[path.length - 1], scalarType)); + } + + @Nullable + @Override + public Boolean getBoolean(String name) { + return delegate.getBoolean(name); + } + + @Nullable + @Override + public Integer getInt(String name) { + return delegate.getInt(name); + } + + @Nullable + @Override + public Long getLong(String name) { + return delegate.getLong(name); + } + + @Nullable + @Override + public Double getDouble(String name) { + return delegate.getDouble(name); + } + + @Nullable + @Override + public List getScalarList(String name, Class scalarType) { + return delegate.getScalarList(name, scalarType); + } + + @Nullable + @Override + public DeclarativeConfigProperties getStructured(String name) { + return delegate.getStructured(name); + } + + @Nullable + @Override + public List getStructuredList(String name) { + return delegate.getStructuredList(name); + } + + @Override + public Set getPropertyKeys() { + return delegate.getPropertyKeys(); + } + + @Override + public ComponentLoader getComponentLoader() { + return delegate.getComponentLoader(); + } +} diff --git a/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsSingletons.java b/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsSingletons.java index d68de50afb9c..4b45c434bda3 100644 --- a/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsSingletons.java +++ b/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsSingletons.java @@ -6,10 +6,12 @@ package io.opentelemetry.javaagent.instrumentation.jms.v1_1; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jms.JmsInstrumenterFactory; import io.opentelemetry.javaagent.instrumentation.jms.MessageWithDestination; +import java.util.Collections; public final class JmsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jms-1.1"; @@ -19,11 +21,18 @@ public final class JmsSingletons { private static final Instrumenter CONSUMER_PROCESS_INSTRUMENTER; static { + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()); JmsInstrumenterFactory factory = new JmsInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()); + config + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false)); PRODUCER_INSTRUMENTER = factory.createProducerInstrumenter(); CONSUMER_RECEIVE_INSTRUMENTER = factory.createConsumerReceiveInstrumenter(); diff --git a/instrumentation/jms/jms-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/JmsSingletons.java b/instrumentation/jms/jms-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/JmsSingletons.java index d5595e75899f..96e063a0ad3b 100644 --- a/instrumentation/jms/jms-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/JmsSingletons.java +++ b/instrumentation/jms/jms-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/JmsSingletons.java @@ -6,10 +6,12 @@ package io.opentelemetry.javaagent.instrumentation.jms.v3_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jms.JmsInstrumenterFactory; import io.opentelemetry.javaagent.instrumentation.jms.MessageWithDestination; +import java.util.Collections; public final class JmsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jms-3.0"; @@ -19,11 +21,18 @@ public final class JmsSingletons { private static final Instrumenter CONSUMER_PROCESS_INSTRUMENTER; static { + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()); JmsInstrumenterFactory factory = new JmsInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()); + config + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false)); PRODUCER_INSTRUMENTER = factory.createProducerInstrumenter(); CONSUMER_RECEIVE_INSTRUMENTER = factory.createConsumerReceiveInstrumenter(); diff --git a/instrumentation/jms/jms-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsReceiveSpanUtil.java b/instrumentation/jms/jms-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsReceiveSpanUtil.java index be0bbd88b243..e06a865da794 100644 --- a/instrumentation/jms/jms-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsReceiveSpanUtil.java +++ b/instrumentation/jms/jms-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsReceiveSpanUtil.java @@ -8,16 +8,18 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil; import io.opentelemetry.instrumentation.api.internal.Timer; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.bootstrap.jms.JmsReceiveContextHolder; public final class JmsReceiveSpanUtil { private static final ContextPropagators propagators = GlobalOpenTelemetry.getPropagators(); private static final boolean receiveInstrumentationEnabled = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false); public static void createReceiveSpan( Instrumenter receiveInstrumenter, diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java b/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java index fa181e8dbb24..175e21fdb1b3 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java @@ -6,35 +6,43 @@ package io.opentelemetry.javaagent.instrumentation.kafkaclients.v0_11; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProducerRequest; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaReceiveRequest; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import org.apache.kafka.clients.producer.RecordMetadata; public final class KafkaSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.kafka-clients-0.11"; private static final boolean PRODUCER_PROPAGATION_ENABLED = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.producer-propagation.enabled", true); + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getBoolean("kafka", "producer_propagation", "enabled") + .orElse(true); private static final Instrumenter PRODUCER_INSTRUMENTER; private static final Instrumenter CONSUMER_RECEIVE_INSTRUMENTER; private static final Instrumenter CONSUMER_PROCESS_INSTRUMENTER; static { + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()); KafkaInstrumenterFactory instrumenterFactory = new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) + config.getBoolean("kafka", "experimental_span_attributes").orElse(false)) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()); + config + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false)); PRODUCER_INSTRUMENTER = instrumenterFactory.createProducerInstrumenter(); CONSUMER_RECEIVE_INSTRUMENTER = instrumenterFactory.createConsumerReceiveInstrumenter(); CONSUMER_PROCESS_INSTRUMENTER = instrumenterFactory.createConsumerProcessInstrumenter(); diff --git a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java index b39a610a3a6d..0c4d4222c94b 100644 --- a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java +++ b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java @@ -6,25 +6,36 @@ package io.opentelemetry.javaagent.instrumentation.kafkastreams; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; public final class KafkaStreamsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.kafka-streams-0.11"; - private static final Instrumenter INSTRUMENTER = - new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) - .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) - .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) - .createConsumerProcessInstrumenter(); + private static final Instrumenter INSTRUMENTER; + + static { + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()); + INSTRUMENTER = + new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) + .setCapturedHeaders( + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) + .setCaptureExperimentalSpanAttributes( + config.getBoolean("kafka", "experimental_span_attributes").orElse(false)) + .setMessagingReceiveInstrumentationEnabled( + config + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false)) + .createConsumerProcessInstrumenter(); + } public static Instrumenter instrumenter() { return INSTRUMENTER; diff --git a/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsSingletons.java b/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsSingletons.java index 13e95063e94c..9cb21fdfe165 100644 --- a/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsSingletons.java +++ b/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsSingletons.java @@ -9,15 +9,18 @@ import static io.opentelemetry.instrumentation.nats.v2_17.internal.NatsInstrumenterFactory.createProducerInstrumenter; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.nats.v2_17.internal.NatsRequest; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import java.util.List; public final class NatsSingletons { private static final List capturedHeaders = - ExperimentalConfig.get().getMessagingHeaders(); + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList()); public static final Instrumenter PRODUCER_INSTRUMENTER = createProducerInstrumenter(GlobalOpenTelemetry.get(), capturedHeaders); diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java index c26022efea02..708501adea20 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java @@ -10,6 +10,7 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter; @@ -25,9 +26,8 @@ import io.opentelemetry.instrumentation.api.internal.PropagatorBasedSpanLinksExtractor; import io.opentelemetry.instrumentation.api.internal.Timer; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.pulsar.v2_8.VirtualFieldStore; +import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; import org.apache.pulsar.client.api.Consumer; @@ -41,9 +41,13 @@ public final class PulsarSingletons { private static final TextMapPropagator PROPAGATOR = TELEMETRY.getPropagators().getTextMapPropagator(); private static final List capturedHeaders = - ExperimentalConfig.get().getMessagingHeaders(); + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList()); private static final boolean receiveInstrumentationEnabled = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false); private static final Instrumenter CONSUMER_PROCESS_INSTRUMENTER = createConsumerProcessInstrumenter(); @@ -143,8 +147,9 @@ private static Instrumenter createProducerInstrumenter() { ServerAttributesExtractor.create(new PulsarNetClientAttributesGetter())) .addOperationMetrics(MessagingProducerMetrics.get()); - if (AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.pulsar.experimental-span-attributes", false)) { + if (DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getBoolean("pulsar", "experimental_span_attributes") + .orElse(false)) { builder.addAttributesExtractor(ExperimentalProducerAttributesExtractor.INSTANCE); } diff --git a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitInstrumenterHelper.java b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitInstrumenterHelper.java index 2f0c77addc01..5402ac461aa1 100644 --- a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitInstrumenterHelper.java +++ b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitInstrumenterHelper.java @@ -13,7 +13,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes; import java.util.Map; @@ -21,8 +21,9 @@ public class RabbitInstrumenterHelper { static final AttributeKey RABBITMQ_COMMAND = AttributeKey.stringKey("rabbitmq.command"); private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.rabbitmq.experimental-span-attributes", false); + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getBoolean("rabbitmq", "experimental_span_attributes") + .orElse(false); private static final RabbitInstrumenterHelper INSTRUMENTER_HELPER = new RabbitInstrumenterHelper(); diff --git a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java index c8af3a8784d6..9d4518891938 100644 --- a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java +++ b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java @@ -11,6 +11,8 @@ import com.rabbitmq.client.GetResponse; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.ContextKey; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter; @@ -19,16 +21,16 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.internal.PropagatorBasedSpanLinksExtractor; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public final class RabbitSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.rabbitmq.experimental-span-attributes", false); + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getBoolean("rabbitmq", "experimental_span_attributes") + .orElse(false); private static final String instrumentationName = "io.opentelemetry.rabbitmq-2.7"; private static final Instrumenter channelInstrumenter = createChannelInstrumenter(false); @@ -83,7 +85,10 @@ private static Instrumenter createReceiveInstrument return Instrumenter.builder( GlobalOpenTelemetry.get(), instrumentationName, ReceiveRequest::spanName) .addAttributesExtractors(extractors) - .setEnabled(ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) + .setEnabled( + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false)) .addSpanLinksExtractor( new PropagatorBasedSpanLinksExtractor<>( GlobalOpenTelemetry.getPropagators().getTextMapPropagator(), @@ -111,7 +116,10 @@ private static Instrumenter createDeliverInstrumenter() { private static AttributesExtractor buildMessagingAttributesExtractor( MessagingAttributesGetter getter, MessageOperation operation) { return MessagingAttributesExtractor.builder(getter, operation) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) .build(); } diff --git a/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java b/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java index e965f84a05d5..87721a53ae66 100644 --- a/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java +++ b/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java @@ -6,25 +6,36 @@ package io.opentelemetry.javaagent.instrumentation.reactor.kafka.v1_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; final class ReactorKafkaSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.reactor-kafka-1.0"; - private static final Instrumenter PROCESS_INSTRUMENTER = - new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) - .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) - .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) - .createConsumerProcessInstrumenter(); + private static final Instrumenter PROCESS_INSTRUMENTER; + + static { + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()); + PROCESS_INSTRUMENTER = + new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) + .setCapturedHeaders( + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) + .setCaptureExperimentalSpanAttributes( + config.getBoolean("kafka", "experimental_span_attributes").orElse(false)) + .setMessagingReceiveInstrumentationEnabled( + config + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false)) + .createConsumerProcessInstrumenter(); + } public static Instrumenter processInstrumenter() { return PROCESS_INSTRUMENTER; diff --git a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java index 7c2b958ca4f9..1df547f8ca23 100644 --- a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java +++ b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java @@ -6,23 +6,31 @@ package io.opentelemetry.javaagent.instrumentation.rocketmqclient.v4_8; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.rocketmqclient.v4_8.RocketMqTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import org.apache.rocketmq.client.hook.ConsumeMessageHook; import org.apache.rocketmq.client.hook.SendMessageHook; public final class RocketMqClientHooks { @SuppressWarnings("deprecation") // call to deprecated method will be removed in the future - private static final RocketMqTelemetry TELEMETRY = - RocketMqTelemetry.builder(GlobalOpenTelemetry.get()) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) - .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.rocketmq-client.experimental-span-attributes", false)) - .build(); + private static final RocketMqTelemetry TELEMETRY; + + static { + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()); + TELEMETRY = + RocketMqTelemetry.builder(GlobalOpenTelemetry.get()) + .setCapturedHeaders( + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) + .setCaptureExperimentalSpanAttributes( + config.getBoolean("rocketmq-client", "experimental_span_attributes").orElse(false)) + .build(); + } public static final ConsumeMessageHook CONSUME_MESSAGE_HOOK = TELEMETRY.newTracingConsumeMessageHook(); diff --git a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v5_0/RocketMqSingletons.java b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v5_0/RocketMqSingletons.java index 605838c13c2a..99d698f9e2a5 100644 --- a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v5_0/RocketMqSingletons.java +++ b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v5_0/RocketMqSingletons.java @@ -8,8 +8,10 @@ import apache.rocketmq.v2.ReceiveMessageRequest; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import java.util.List; import org.apache.rocketmq.client.apis.consumer.ConsumeResult; import org.apache.rocketmq.client.apis.message.MessageView; @@ -25,9 +27,13 @@ public final class RocketMqSingletons { static { OpenTelemetry openTelemetry = GlobalOpenTelemetry.get(); - List messagingHeaders = ExperimentalConfig.get().getMessagingHeaders(); + ExtendedDeclarativeConfigProperties config = DeclarativeConfigUtil.get(openTelemetry); + List messagingHeaders = + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList()); boolean receiveInstrumentationEnabled = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + config.getBoolean("messaging", "receive_telemetry/development", "enabled").orElse(false); PRODUCER_INSTRUMENTER = RocketMqInstrumenterFactory.createProducerInstrumenter(openTelemetry, messagingHeaders); diff --git a/instrumentation/spring/spring-jms/spring-jms-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v2_0/SpringJmsSingletons.java b/instrumentation/spring/spring-jms/spring-jms-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v2_0/SpringJmsSingletons.java index 034e3cdedac7..14577dd63db1 100644 --- a/instrumentation/spring/spring-jms/spring-jms-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v2_0/SpringJmsSingletons.java +++ b/instrumentation/spring/spring-jms/spring-jms-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v2_0/SpringJmsSingletons.java @@ -6,23 +6,32 @@ package io.opentelemetry.javaagent.instrumentation.spring.jms.v2_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jms.JmsInstrumenterFactory; import io.opentelemetry.javaagent.instrumentation.jms.MessageWithDestination; +import java.util.Collections; public final class SpringJmsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-jms-2.0"; private static final boolean RECEIVE_TELEMETRY_ENABLED = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false); private static final Instrumenter LISTENER_INSTRUMENTER; private static final Instrumenter RECEIVE_INSTRUMENTER; static { + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()); JmsInstrumenterFactory factory = new JmsInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) .setMessagingReceiveInstrumentationEnabled(RECEIVE_TELEMETRY_ENABLED); LISTENER_INSTRUMENTER = factory.createConsumerProcessInstrumenter(true); diff --git a/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsSingletons.java b/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsSingletons.java index 38360f67e3a6..23ea6096cf92 100644 --- a/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsSingletons.java +++ b/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsSingletons.java @@ -6,23 +6,32 @@ package io.opentelemetry.javaagent.instrumentation.spring.jms.v6_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jms.JmsInstrumenterFactory; import io.opentelemetry.javaagent.instrumentation.jms.MessageWithDestination; +import java.util.Collections; public final class SpringJmsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-jms-6.0"; private static final boolean RECEIVE_TELEMETRY_ENABLED = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false); private static final Instrumenter LISTENER_INSTRUMENTER; private static final Instrumenter RECEIVE_INSTRUMENTER; static { + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()); JmsInstrumenterFactory factory = new JmsInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) .setMessagingReceiveInstrumentationEnabled(RECEIVE_TELEMETRY_ENABLED); LISTENER_INSTRUMENTER = factory.createConsumerProcessInstrumenter(true); diff --git a/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java b/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java index 1fd566dd5659..f92283c57e35 100644 --- a/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java +++ b/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java @@ -6,37 +6,50 @@ package io.opentelemetry.javaagent.instrumentation.spring.kafka.v2_7; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaReceiveRequest; import io.opentelemetry.instrumentation.spring.kafka.v2_7.SpringKafkaTelemetry; import io.opentelemetry.instrumentation.spring.kafka.v2_7.internal.SpringKafkaErrorCauseExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; +import java.util.List; public final class SpringKafkaSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-kafka-2.7"; + private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES; + private static final List CAPTURED_HEADERS; + private static final boolean RECEIVE_TELEMETRY_ENABLED; + + static { + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()); + CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = + config.getBoolean("kafka", "experimental_span_attributes").orElse(false); + CAPTURED_HEADERS = + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList()); + RECEIVE_TELEMETRY_ENABLED = + config.getBoolean("messaging", "receive_telemetry/development", "enabled").orElse(false); + } + private static final SpringKafkaTelemetry TELEMETRY = SpringKafkaTelemetry.builder(GlobalOpenTelemetry.get()) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) - .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) - .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) + .setCapturedHeaders(CAPTURED_HEADERS) + .setCaptureExperimentalSpanAttributes(CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES) + .setMessagingReceiveInstrumentationEnabled(RECEIVE_TELEMETRY_ENABLED) .build(); private static final Instrumenter BATCH_PROCESS_INSTRUMENTER; static { KafkaInstrumenterFactory factory = new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) - .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) - .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) + .setCapturedHeaders(CAPTURED_HEADERS) + .setCaptureExperimentalSpanAttributes(CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES) + .setMessagingReceiveInstrumentationEnabled(RECEIVE_TELEMETRY_ENABLED) .setErrorCauseExtractor(SpringKafkaErrorCauseExtractor.INSTANCE); BATCH_PROCESS_INSTRUMENTER = factory.createBatchProcessInstrumenter(); } diff --git a/instrumentation/spring/spring-pulsar-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/pulsar/v1_0/SpringPulsarSingletons.java b/instrumentation/spring/spring-pulsar-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/pulsar/v1_0/SpringPulsarSingletons.java index fc9c454dcda2..c9815366d78d 100644 --- a/instrumentation/spring/spring-pulsar-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/pulsar/v1_0/SpringPulsarSingletons.java +++ b/instrumentation/spring/spring-pulsar-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/pulsar/v1_0/SpringPulsarSingletons.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor; @@ -14,7 +15,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.internal.PropagatorBasedSpanLinksExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import org.apache.pulsar.client.api.Message; public final class SpringPulsarSingletons { @@ -26,7 +27,9 @@ public final class SpringPulsarSingletons { SpringPulsarMessageAttributesGetter getter = SpringPulsarMessageAttributesGetter.INSTANCE; MessageOperation operation = MessageOperation.PROCESS; boolean messagingReceiveInstrumentationEnabled = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false); InstrumenterBuilder, Void> builder = Instrumenter., Void>builder( @@ -35,7 +38,10 @@ public final class SpringPulsarSingletons { MessagingSpanNameExtractor.create(getter, operation)) .addAttributesExtractor( MessagingAttributesExtractor.builder(getter, operation) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) .build()); if (messagingReceiveInstrumentationEnabled) { builder.addSpanLinksExtractor( diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitSingletons.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitSingletons.java index eae11c3df682..1cfd5ecb9bb9 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitSingletons.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitSingletons.java @@ -6,11 +6,12 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import org.springframework.amqp.core.Message; public final class SpringRabbitSingletons { @@ -30,7 +31,10 @@ public final class SpringRabbitSingletons { MessagingSpanNameExtractor.create(getter, operation)) .addAttributesExtractor( MessagingAttributesExtractor.builder(getter, operation) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()) + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) .build()) .buildConsumerInstrumenter(MessageHeaderGetter.INSTANCE); } diff --git a/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java b/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java index 44947e2723d7..a5f491ce29bc 100644 --- a/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java +++ b/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java @@ -6,12 +6,13 @@ package io.opentelemetry.javaagent.instrumentation.vertx.kafka.v3_6; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaReceiveRequest; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; public final class VertxKafkaSingletons { @@ -21,14 +22,20 @@ public final class VertxKafkaSingletons { private static final Instrumenter PROCESS_INSTRUMENTER; static { + ExtendedDeclarativeConfigProperties config = + DeclarativeConfigUtil.get(GlobalOpenTelemetry.get()); KafkaInstrumenterFactory factory = new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + config + .getScalarList(String.class, "messaging", "capture_headers/development") + .orElse(Collections.emptyList())) .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) + config.getBoolean("kafka", "experimental_span_attributes").orElse(false)) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()); + config + .getBoolean("messaging", "receive_telemetry/development", "enabled") + .orElse(false)); BATCH_PROCESS_INSTRUMENTER = factory.createBatchProcessInstrumenter(); PROCESS_INSTRUMENTER = factory.createConsumerProcessInstrumenter(); }