From ceb2ddfb66e15b8902ede7ff98ad8017daa5055c Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 4 Oct 2024 17:18:02 -0400 Subject: [PATCH 01/13] rebasing from main --- .../OtelJMXMetricsCustomizerProvider.java | 144 ++++++++++++++++++ ...re.spi.AutoConfigurationCustomizerProvider | 4 +- 2 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java new file mode 100644 index 0000000000..f1ec17e3a4 --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java @@ -0,0 +1,144 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.javaagent.providers; + +import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter; +import io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil; +import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; +import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; +import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; +import io.opentelemetry.sdk.metrics.Aggregation; +import io.opentelemetry.sdk.metrics.InstrumentSelector; +import io.opentelemetry.sdk.metrics.InstrumentType; +import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder; +import io.opentelemetry.sdk.metrics.View; +import io.opentelemetry.sdk.metrics.export.MetricExporter; +import io.opentelemetry.sdk.metrics.export.MetricReader; +import java.time.Duration; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * You can control when these customizations are applied using the property otel.jmx.enabled or the + * environment variable OTEL_JMX_ENABLED_CONFIG. This flag is disabled by default. + */ +public class OtelJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider { + private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); + private static final Logger logger = + Logger.getLogger(OtelJMXMetricsCustomizerProvider.class.getName()); + + private static final String OTEL_JMX_ENABLED_CONFIG = "otel.jmx.enabled"; + private static final String OTEL_JMX_ENDPOINT_CONFIG = "otel.jmx.exporter.metrics.endpoint"; + + public void customize(AutoConfigurationCustomizer autoConfiguration) { + autoConfiguration.addMeterProviderCustomizer(this::customizeMeterProvider); + } + + private boolean isOtelJMXEnabled(ConfigProperties configProps) { + return configProps.getBoolean(OTEL_JMX_ENABLED_CONFIG); + } + + private SdkMeterProviderBuilder customizeMeterProvider( + SdkMeterProviderBuilder sdkMeterProviderBuilder, ConfigProperties configProps) { + + if (isOtelJMXEnabled(configProps)) { + Set registeredScopeNames = new HashSet<>(1); + String jmxRuntimeScopeName = "io.opentelemetry.jmx"; + registeredScopeNames.add(jmxRuntimeScopeName); + + configureMetricFilter(configProps, sdkMeterProviderBuilder, registeredScopeNames); + + MetricExporter metricsExporter = JMXExporterProvider.INSTANCE.createExporter(configProps); + MetricReader metricReader = + ScopeBasedPeriodicMetricReader.create(metricsExporter, registeredScopeNames) + .setInterval(getMetricExportInterval(configProps)) + .build(); + sdkMeterProviderBuilder.registerMetricReader(metricReader); + + logger.info("Otel JMX metric collection enabled"); + } + return sdkMeterProviderBuilder; + } + + private static void configureMetricFilter( + ConfigProperties configProps, + SdkMeterProviderBuilder sdkMeterProviderBuilder, + Set registeredScopeNames) { + Set exporterNames = + DefaultConfigProperties.getSet(configProps, "otel.metrics.exporter"); + if (exporterNames.contains("none")) { + for (String scope : registeredScopeNames) { + sdkMeterProviderBuilder.registerView( + InstrumentSelector.builder().setMeterName(scope).build(), + View.builder().setAggregation(Aggregation.defaultAggregation()).build()); + + logger.log(Level.FINE, "Registered scope {0}", scope); + } + sdkMeterProviderBuilder.registerView( + InstrumentSelector.builder().setName("*").build(), + View.builder().setAggregation(Aggregation.drop()).build()); + } + } + + private static Duration getMetricExportInterval(ConfigProperties configProps) { + Duration exportInterval = + configProps.getDuration("otel.metric.export.interval", DEFAULT_METRIC_EXPORT_INTERVAL); + logger.log(Level.FINE, String.format("Otel JMX Metrics export interval: %s", exportInterval)); + // Cap export interval to 60 seconds. This is currently required for metrics-trace correlation + // to work correctly. + if (exportInterval.compareTo(DEFAULT_METRIC_EXPORT_INTERVAL) > 0) { + exportInterval = DEFAULT_METRIC_EXPORT_INTERVAL; + logger.log( + Level.INFO, + String.format("Otel JMX Metrics export interval capped to %s", exportInterval)); + } + return exportInterval; + } + + private enum JMXExporterProvider { + INSTANCE; + + public MetricExporter createExporter(ConfigProperties configProps) { + String protocol = + OtlpConfigUtil.getOtlpProtocol(OtlpConfigUtil.DATA_TYPE_METRICS, configProps); + logger.log(Level.FINE, String.format("Otel JMX metrics export protocol: %s", protocol)); + + String otelJMXEndpoint; + if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { + otelJMXEndpoint = configProps.getString(OTEL_JMX_ENDPOINT_CONFIG, "http://localhost:4314"); + logger.log( + Level.FINE, String.format("Otel JMX metrics export endpoint: %s", otelJMXEndpoint)); + return OtlpHttpMetricExporter.builder() + .setEndpoint(otelJMXEndpoint) + .setDefaultAggregationSelector(this::getAggregation) + .setAggregationTemporalitySelector(CloudWatchTemporalitySelector.alwaysDelta()) + .build(); + } + throw new ConfigurationException("Unsupported Otel JMX metrics export protocol: " + protocol); + } + + private Aggregation getAggregation(InstrumentType instrumentType) { + if (instrumentType == InstrumentType.HISTOGRAM) { + return Aggregation.base2ExponentialBucketHistogram(); + } + return Aggregation.defaultAggregation(); + } + } +} \ No newline at end of file diff --git a/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider b/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider index 6cc27f1de4..3b56462b93 100644 --- a/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider +++ b/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider @@ -8,7 +8,8 @@ # http://aws.amazon.com/apache2.0 # # or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. # @@ -16,3 +17,4 @@ software.amazon.opentelemetry.javaagent.providers.AwsAgentPropertiesCustomizerProvider software.amazon.opentelemetry.javaagent.providers.AwsTracerCustomizerProvider software.amazon.opentelemetry.javaagent.providers.AwsApplicationSignalsCustomizerProvider +software.amazon.opentelemetry.javaagent.providers.OtelJMXMetricsCustomizerProvider \ No newline at end of file From ce198d3a6558461205ba3c8028a6d3d8517c07ae Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 4 Oct 2024 19:43:33 -0400 Subject: [PATCH 02/13] removing delta temporality and adding condition for checking both bool and endpoint string --- .../OtelJMXMetricsCustomizerProvider.java | 178 +++++++++--------- ...re.spi.AutoConfigurationCustomizerProvider | 3 +- 2 files changed, 90 insertions(+), 91 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java index f1ec17e3a4..94b8462aaf 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java @@ -40,105 +40,105 @@ * environment variable OTEL_JMX_ENABLED_CONFIG. This flag is disabled by default. */ public class OtelJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider { - private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); - private static final Logger logger = - Logger.getLogger(OtelJMXMetricsCustomizerProvider.class.getName()); + private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); + private static final Logger logger = + Logger.getLogger(OtelJMXMetricsCustomizerProvider.class.getName()); - private static final String OTEL_JMX_ENABLED_CONFIG = "otel.jmx.enabled"; - private static final String OTEL_JMX_ENDPOINT_CONFIG = "otel.jmx.exporter.metrics.endpoint"; + private static final String OTEL_JMX_ENABLED_CONFIG = "otel.jmx.enabled"; + private static final String OTEL_JMX_ENDPOINT_CONFIG = "otel.jmx.exporter.metrics.endpoint"; - public void customize(AutoConfigurationCustomizer autoConfiguration) { - autoConfiguration.addMeterProviderCustomizer(this::customizeMeterProvider); - } + public void customize(AutoConfigurationCustomizer autoConfiguration) { + autoConfiguration.addMeterProviderCustomizer(this::customizeMeterProvider); + } - private boolean isOtelJMXEnabled(ConfigProperties configProps) { - return configProps.getBoolean(OTEL_JMX_ENABLED_CONFIG); - } + private boolean isOtelJMXEnabled(ConfigProperties configProps) { + return configProps.getBoolean(OTEL_JMX_ENABLED_CONFIG) + && configProps.getString(OTEL_JMX_ENDPOINT_CONFIG, "") != ""; + } - private SdkMeterProviderBuilder customizeMeterProvider( - SdkMeterProviderBuilder sdkMeterProviderBuilder, ConfigProperties configProps) { + private SdkMeterProviderBuilder customizeMeterProvider( + SdkMeterProviderBuilder sdkMeterProviderBuilder, ConfigProperties configProps) { - if (isOtelJMXEnabled(configProps)) { - Set registeredScopeNames = new HashSet<>(1); - String jmxRuntimeScopeName = "io.opentelemetry.jmx"; - registeredScopeNames.add(jmxRuntimeScopeName); + if (isOtelJMXEnabled(configProps)) { + Set registeredScopeNames = new HashSet<>(1); + String jmxRuntimeScopeName = "io.opentelemetry.jmx"; + registeredScopeNames.add(jmxRuntimeScopeName); - configureMetricFilter(configProps, sdkMeterProviderBuilder, registeredScopeNames); + configureMetricFilter(configProps, sdkMeterProviderBuilder, registeredScopeNames); - MetricExporter metricsExporter = JMXExporterProvider.INSTANCE.createExporter(configProps); - MetricReader metricReader = - ScopeBasedPeriodicMetricReader.create(metricsExporter, registeredScopeNames) - .setInterval(getMetricExportInterval(configProps)) - .build(); - sdkMeterProviderBuilder.registerMetricReader(metricReader); + MetricExporter metricsExporter = JMXExporterProvider.INSTANCE.createExporter(configProps); + MetricReader metricReader = + ScopeBasedPeriodicMetricReader.create(metricsExporter, registeredScopeNames) + .setInterval(getMetricExportInterval(configProps)) + .build(); + sdkMeterProviderBuilder.registerMetricReader(metricReader); - logger.info("Otel JMX metric collection enabled"); - } - return sdkMeterProviderBuilder; + logger.info("Otel JMX metric collection enabled"); } - - private static void configureMetricFilter( - ConfigProperties configProps, - SdkMeterProviderBuilder sdkMeterProviderBuilder, - Set registeredScopeNames) { - Set exporterNames = - DefaultConfigProperties.getSet(configProps, "otel.metrics.exporter"); - if (exporterNames.contains("none")) { - for (String scope : registeredScopeNames) { - sdkMeterProviderBuilder.registerView( - InstrumentSelector.builder().setMeterName(scope).build(), - View.builder().setAggregation(Aggregation.defaultAggregation()).build()); - - logger.log(Level.FINE, "Registered scope {0}", scope); - } - sdkMeterProviderBuilder.registerView( - InstrumentSelector.builder().setName("*").build(), - View.builder().setAggregation(Aggregation.drop()).build()); - } + return sdkMeterProviderBuilder; + } + + private static void configureMetricFilter( + ConfigProperties configProps, + SdkMeterProviderBuilder sdkMeterProviderBuilder, + Set registeredScopeNames) { + Set exporterNames = + DefaultConfigProperties.getSet(configProps, "otel.metrics.exporter"); + if (exporterNames.contains("none")) { + for (String scope : registeredScopeNames) { + sdkMeterProviderBuilder.registerView( + InstrumentSelector.builder().setMeterName(scope).build(), + View.builder().setAggregation(Aggregation.defaultAggregation()).build()); + + logger.log(Level.FINE, "Registered scope {0}", scope); + } + sdkMeterProviderBuilder.registerView( + InstrumentSelector.builder().setName("*").build(), + View.builder().setAggregation(Aggregation.drop()).build()); } - - private static Duration getMetricExportInterval(ConfigProperties configProps) { - Duration exportInterval = - configProps.getDuration("otel.metric.export.interval", DEFAULT_METRIC_EXPORT_INTERVAL); - logger.log(Level.FINE, String.format("Otel JMX Metrics export interval: %s", exportInterval)); - // Cap export interval to 60 seconds. This is currently required for metrics-trace correlation - // to work correctly. - if (exportInterval.compareTo(DEFAULT_METRIC_EXPORT_INTERVAL) > 0) { - exportInterval = DEFAULT_METRIC_EXPORT_INTERVAL; - logger.log( - Level.INFO, - String.format("Otel JMX Metrics export interval capped to %s", exportInterval)); - } - return exportInterval; + } + + private static Duration getMetricExportInterval(ConfigProperties configProps) { + Duration exportInterval = + configProps.getDuration("otel.metric.export.interval", DEFAULT_METRIC_EXPORT_INTERVAL); + logger.log(Level.FINE, String.format("Otel JMX Metrics export interval: %s", exportInterval)); + // Cap export interval to 60 seconds. This is currently required for metrics-trace correlation + // to work correctly. + if (exportInterval.compareTo(DEFAULT_METRIC_EXPORT_INTERVAL) > 0) { + exportInterval = DEFAULT_METRIC_EXPORT_INTERVAL; + logger.log( + Level.INFO, + String.format("Otel JMX Metrics export interval capped to %s", exportInterval)); + } + return exportInterval; + } + + private enum JMXExporterProvider { + INSTANCE; + + public MetricExporter createExporter(ConfigProperties configProps) { + String protocol = + OtlpConfigUtil.getOtlpProtocol(OtlpConfigUtil.DATA_TYPE_METRICS, configProps); + logger.log(Level.FINE, String.format("Otel JMX metrics export protocol: %s", protocol)); + + String otelJMXEndpoint; + if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { + otelJMXEndpoint = configProps.getString(OTEL_JMX_ENDPOINT_CONFIG, "http://localhost:4314"); + logger.log( + Level.FINE, String.format("Otel JMX metrics export endpoint: %s", otelJMXEndpoint)); + return OtlpHttpMetricExporter.builder() + .setEndpoint(otelJMXEndpoint) + .setDefaultAggregationSelector(this::getAggregation) + .build(); + } + throw new ConfigurationException("Unsupported Otel JMX metrics export protocol: " + protocol); } - private enum JMXExporterProvider { - INSTANCE; - - public MetricExporter createExporter(ConfigProperties configProps) { - String protocol = - OtlpConfigUtil.getOtlpProtocol(OtlpConfigUtil.DATA_TYPE_METRICS, configProps); - logger.log(Level.FINE, String.format("Otel JMX metrics export protocol: %s", protocol)); - - String otelJMXEndpoint; - if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { - otelJMXEndpoint = configProps.getString(OTEL_JMX_ENDPOINT_CONFIG, "http://localhost:4314"); - logger.log( - Level.FINE, String.format("Otel JMX metrics export endpoint: %s", otelJMXEndpoint)); - return OtlpHttpMetricExporter.builder() - .setEndpoint(otelJMXEndpoint) - .setDefaultAggregationSelector(this::getAggregation) - .setAggregationTemporalitySelector(CloudWatchTemporalitySelector.alwaysDelta()) - .build(); - } - throw new ConfigurationException("Unsupported Otel JMX metrics export protocol: " + protocol); - } - - private Aggregation getAggregation(InstrumentType instrumentType) { - if (instrumentType == InstrumentType.HISTOGRAM) { - return Aggregation.base2ExponentialBucketHistogram(); - } - return Aggregation.defaultAggregation(); - } + private Aggregation getAggregation(InstrumentType instrumentType) { + if (instrumentType == InstrumentType.HISTOGRAM) { + return Aggregation.base2ExponentialBucketHistogram(); + } + return Aggregation.defaultAggregation(); } -} \ No newline at end of file + } +} diff --git a/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider b/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider index 3b56462b93..781187aff5 100644 --- a/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider +++ b/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider @@ -8,8 +8,7 @@ # http://aws.amazon.com/apache2.0 # # or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF - ANY KIND, either +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. # From 3c33cadc64886805547e60a2baebd81a56ea2d02 Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 4 Oct 2024 20:01:29 -0400 Subject: [PATCH 03/13] adding fallback as false for boolean jmx config --- .../javaagent/providers/OtelJMXMetricsCustomizerProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java index 94b8462aaf..7f7923fab5 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java @@ -52,7 +52,7 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) { } private boolean isOtelJMXEnabled(ConfigProperties configProps) { - return configProps.getBoolean(OTEL_JMX_ENABLED_CONFIG) + return configProps.getBoolean(OTEL_JMX_ENABLED_CONFIG, false) && configProps.getString(OTEL_JMX_ENDPOINT_CONFIG, "") != ""; } From 05a82094a6af3802e02e0fdc83bffe06c635be8e Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Wed, 9 Oct 2024 15:15:38 -0400 Subject: [PATCH 04/13] trigger build From ffbb4e8440fa5a3590f5cd2d622f240b92eeb05b Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 11 Oct 2024 12:13:21 -0400 Subject: [PATCH 05/13] extracting functions --- ...sApplicationSignalsCustomizerProvider.java | 52 +++------------ .../OtelJMXMetricsCustomizerProvider.java | 50 +++------------ .../providers/SDKMeterProviderBuilder.java | 64 +++++++++++++++++++ 3 files changed, 80 insertions(+), 86 deletions(-) create mode 100644 awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SDKMeterProviderBuilder.java diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java index 4cebc0a48e..df657538e0 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java @@ -26,13 +26,10 @@ import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import io.opentelemetry.sdk.metrics.Aggregation; -import io.opentelemetry.sdk.metrics.InstrumentSelector; import io.opentelemetry.sdk.metrics.InstrumentType; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder; -import io.opentelemetry.sdk.metrics.View; import io.opentelemetry.sdk.metrics.export.MetricExporter; import io.opentelemetry.sdk.metrics.export.MetricReader; import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader; @@ -152,7 +149,9 @@ private SdkTracerProviderBuilder customizeTracerProviderBuilder( SdkTracerProviderBuilder tracerProviderBuilder, ConfigProperties configProps) { if (isApplicationSignalsEnabled(configProps)) { logger.info("AWS Application Signals enabled"); - Duration exportInterval = getMetricExportInterval(configProps); + Duration exportInterval = + SDKMeterProviderBuilder.getMetricExportInterval( + configProps, DEFAULT_METRIC_EXPORT_INTERVAL, logger); // Construct and set local and remote attributes span processor tracerProviderBuilder.addSpanProcessor( AttributePropagatingSpanProcessorBuilder.create().build()); @@ -187,13 +186,16 @@ private SdkMeterProviderBuilder customizeMeterProvider( String jmxRuntimeScopeName = "io.opentelemetry.jmx"; registeredScopeNames.add(jmxRuntimeScopeName); - configureMetricFilter(configProps, sdkMeterProviderBuilder, registeredScopeNames); + SDKMeterProviderBuilder.configureMetricFilter( + configProps, sdkMeterProviderBuilder, registeredScopeNames, logger); MetricExporter metricsExporter = ApplicationSignalsExporterProvider.INSTANCE.createExporter(configProps); MetricReader metricReader = ScopeBasedPeriodicMetricReader.create(metricsExporter, registeredScopeNames) - .setInterval(getMetricExportInterval(configProps)) + .setInterval( + SDKMeterProviderBuilder.getMetricExportInterval( + configProps, DEFAULT_METRIC_EXPORT_INTERVAL, logger)) .build(); sdkMeterProviderBuilder.registerMetricReader(metricReader); @@ -202,44 +204,6 @@ private SdkMeterProviderBuilder customizeMeterProvider( return sdkMeterProviderBuilder; } - private static void configureMetricFilter( - ConfigProperties configProps, - SdkMeterProviderBuilder sdkMeterProviderBuilder, - Set registeredScopeNames) { - Set exporterNames = - DefaultConfigProperties.getSet(configProps, "otel.metrics.exporter"); - if (exporterNames.contains("none")) { - for (String scope : registeredScopeNames) { - sdkMeterProviderBuilder.registerView( - InstrumentSelector.builder().setMeterName(scope).build(), - View.builder().setAggregation(Aggregation.defaultAggregation()).build()); - - logger.log(Level.FINE, "Registered scope {0}", scope); - } - sdkMeterProviderBuilder.registerView( - InstrumentSelector.builder().setName("*").build(), - View.builder().setAggregation(Aggregation.drop()).build()); - } - } - - private static Duration getMetricExportInterval(ConfigProperties configProps) { - Duration exportInterval = - configProps.getDuration("otel.metric.export.interval", DEFAULT_METRIC_EXPORT_INTERVAL); - logger.log( - Level.FINE, - String.format("AWS Application Signals Metrics export interval: %s", exportInterval)); - // Cap export interval to 60 seconds. This is currently required for metrics-trace correlation - // to work correctly. - if (exportInterval.compareTo(DEFAULT_METRIC_EXPORT_INTERVAL) > 0) { - exportInterval = DEFAULT_METRIC_EXPORT_INTERVAL; - logger.log( - Level.INFO, - String.format( - "AWS Application Signals metrics export interval capped to %s", exportInterval)); - } - return exportInterval; - } - private SpanExporter customizeSpanExporter( SpanExporter spanExporter, ConfigProperties configProps) { if (isApplicationSignalsEnabled(configProps)) { diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java index 7f7923fab5..0312e0de62 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java @@ -21,12 +21,9 @@ import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import io.opentelemetry.sdk.metrics.Aggregation; -import io.opentelemetry.sdk.metrics.InstrumentSelector; import io.opentelemetry.sdk.metrics.InstrumentType; import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder; -import io.opentelemetry.sdk.metrics.View; import io.opentelemetry.sdk.metrics.export.MetricExporter; import io.opentelemetry.sdk.metrics.export.MetricReader; import java.time.Duration; @@ -36,8 +33,9 @@ import java.util.logging.Logger; /** - * You can control when these customizations are applied using the property otel.jmx.enabled or the - * environment variable OTEL_JMX_ENABLED_CONFIG. This flag is disabled by default. + * You can control when these customizations are applied using both the properties - + * otel.jmx.enabled and otel.jmx.exporter.metrics.endpoint or the environment variable + * OTEL_JMX_ENABLED_CONFIG and OTEL_JMX_ENDPOINT_CONFIG. These flags are disabled by default. */ public class OtelJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider { private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); @@ -64,12 +62,15 @@ private SdkMeterProviderBuilder customizeMeterProvider( String jmxRuntimeScopeName = "io.opentelemetry.jmx"; registeredScopeNames.add(jmxRuntimeScopeName); - configureMetricFilter(configProps, sdkMeterProviderBuilder, registeredScopeNames); + SDKMeterProviderBuilder.configureMetricFilter( + configProps, sdkMeterProviderBuilder, registeredScopeNames, logger); MetricExporter metricsExporter = JMXExporterProvider.INSTANCE.createExporter(configProps); MetricReader metricReader = ScopeBasedPeriodicMetricReader.create(metricsExporter, registeredScopeNames) - .setInterval(getMetricExportInterval(configProps)) + .setInterval( + SDKMeterProviderBuilder.getMetricExportInterval( + configProps, DEFAULT_METRIC_EXPORT_INTERVAL, logger)) .build(); sdkMeterProviderBuilder.registerMetricReader(metricReader); @@ -78,41 +79,6 @@ private SdkMeterProviderBuilder customizeMeterProvider( return sdkMeterProviderBuilder; } - private static void configureMetricFilter( - ConfigProperties configProps, - SdkMeterProviderBuilder sdkMeterProviderBuilder, - Set registeredScopeNames) { - Set exporterNames = - DefaultConfigProperties.getSet(configProps, "otel.metrics.exporter"); - if (exporterNames.contains("none")) { - for (String scope : registeredScopeNames) { - sdkMeterProviderBuilder.registerView( - InstrumentSelector.builder().setMeterName(scope).build(), - View.builder().setAggregation(Aggregation.defaultAggregation()).build()); - - logger.log(Level.FINE, "Registered scope {0}", scope); - } - sdkMeterProviderBuilder.registerView( - InstrumentSelector.builder().setName("*").build(), - View.builder().setAggregation(Aggregation.drop()).build()); - } - } - - private static Duration getMetricExportInterval(ConfigProperties configProps) { - Duration exportInterval = - configProps.getDuration("otel.metric.export.interval", DEFAULT_METRIC_EXPORT_INTERVAL); - logger.log(Level.FINE, String.format("Otel JMX Metrics export interval: %s", exportInterval)); - // Cap export interval to 60 seconds. This is currently required for metrics-trace correlation - // to work correctly. - if (exportInterval.compareTo(DEFAULT_METRIC_EXPORT_INTERVAL) > 0) { - exportInterval = DEFAULT_METRIC_EXPORT_INTERVAL; - logger.log( - Level.INFO, - String.format("Otel JMX Metrics export interval capped to %s", exportInterval)); - } - return exportInterval; - } - private enum JMXExporterProvider { INSTANCE; diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SDKMeterProviderBuilder.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SDKMeterProviderBuilder.java new file mode 100644 index 0000000000..cf68c0f1a0 --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SDKMeterProviderBuilder.java @@ -0,0 +1,64 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.javaagent.providers; + +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; +import io.opentelemetry.sdk.metrics.Aggregation; +import io.opentelemetry.sdk.metrics.InstrumentSelector; +import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder; +import io.opentelemetry.sdk.metrics.View; +import java.time.Duration; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class SDKMeterProviderBuilder { + static void configureMetricFilter( + ConfigProperties configProps, + SdkMeterProviderBuilder sdkMeterProviderBuilder, + Set registeredScopeNames, + Logger logger) { + Set exporterNames = + DefaultConfigProperties.getSet(configProps, "otel.metrics.exporter"); + if (exporterNames.contains("none")) { + for (String scope : registeredScopeNames) { + sdkMeterProviderBuilder.registerView( + InstrumentSelector.builder().setMeterName(scope).build(), + View.builder().setAggregation(Aggregation.defaultAggregation()).build()); + + logger.log(Level.FINE, "Registered scope {0}", scope); + } + sdkMeterProviderBuilder.registerView( + InstrumentSelector.builder().setName("*").build(), + View.builder().setAggregation(Aggregation.drop()).build()); + } + } + + static Duration getMetricExportInterval( + ConfigProperties configProps, Duration exportIntervalEnvVar, Logger logger) { + Duration exportInterval = + configProps.getDuration("otel.metric.export.interval", exportIntervalEnvVar); + logger.log(Level.FINE, String.format("Metrics export interval: %s", exportInterval)); + // Cap export interval to 60 seconds. This is currently required for metrics-trace correlation + // to work correctly. + if (exportInterval.compareTo(exportIntervalEnvVar) > 0) { + exportInterval = exportIntervalEnvVar; + logger.log(Level.INFO, String.format("Metrics export interval capped to %s", exportInterval)); + } + return exportInterval; + } +} From 9c3ed81029973c0f35f3effbf9262f74e455c3e5 Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 11 Oct 2024 13:35:07 -0400 Subject: [PATCH 06/13] updating namespace --- ...a => AWSJMXMetricsCustomizerProvider.java} | 21 +++++++++++-------- ...re.spi.AutoConfigurationCustomizerProvider | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) rename awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/{OtelJMXMetricsCustomizerProvider.java => AWSJMXMetricsCustomizerProvider.java} (82%) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AWSJMXMetricsCustomizerProvider.java similarity index 82% rename from awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java rename to awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AWSJMXMetricsCustomizerProvider.java index 0312e0de62..898559b940 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AWSJMXMetricsCustomizerProvider.java @@ -37,21 +37,22 @@ * otel.jmx.enabled and otel.jmx.exporter.metrics.endpoint or the environment variable * OTEL_JMX_ENABLED_CONFIG and OTEL_JMX_ENDPOINT_CONFIG. These flags are disabled by default. */ -public class OtelJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider { +public class AWSJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider { private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); private static final Logger logger = - Logger.getLogger(OtelJMXMetricsCustomizerProvider.class.getName()); + Logger.getLogger(AWSJMXMetricsCustomizerProvider.class.getName()); - private static final String OTEL_JMX_ENABLED_CONFIG = "otel.jmx.enabled"; - private static final String OTEL_JMX_ENDPOINT_CONFIG = "otel.jmx.exporter.metrics.endpoint"; + private static final String AWS_OTEL_JMX_ENABLED_CONFIG = "otel.aws.jmx.enabled"; + private static final String AWS_OTEL_JMX_ENDPOINT_CONFIG = + "otel.aws.jmx.exporter.metrics.endpoint"; public void customize(AutoConfigurationCustomizer autoConfiguration) { autoConfiguration.addMeterProviderCustomizer(this::customizeMeterProvider); } private boolean isOtelJMXEnabled(ConfigProperties configProps) { - return configProps.getBoolean(OTEL_JMX_ENABLED_CONFIG, false) - && configProps.getString(OTEL_JMX_ENDPOINT_CONFIG, "") != ""; + return configProps.getBoolean(AWS_OTEL_JMX_ENABLED_CONFIG, false) + && configProps.getString(AWS_OTEL_JMX_ENDPOINT_CONFIG, "") != ""; } private SdkMeterProviderBuilder customizeMeterProvider( @@ -89,15 +90,17 @@ public MetricExporter createExporter(ConfigProperties configProps) { String otelJMXEndpoint; if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { - otelJMXEndpoint = configProps.getString(OTEL_JMX_ENDPOINT_CONFIG, "http://localhost:4314"); + otelJMXEndpoint = + configProps.getString(AWS_OTEL_JMX_ENDPOINT_CONFIG, "http://localhost:4314"); logger.log( - Level.FINE, String.format("Otel JMX metrics export endpoint: %s", otelJMXEndpoint)); + Level.FINE, String.format("AWS Otel JMX metrics export endpoint: %s", otelJMXEndpoint)); return OtlpHttpMetricExporter.builder() .setEndpoint(otelJMXEndpoint) .setDefaultAggregationSelector(this::getAggregation) .build(); } - throw new ConfigurationException("Unsupported Otel JMX metrics export protocol: " + protocol); + throw new ConfigurationException( + "Unsupported AWS Otel JMX metrics export protocol: " + protocol); } private Aggregation getAggregation(InstrumentType instrumentType) { diff --git a/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider b/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider index 781187aff5..9e80fcb262 100644 --- a/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider +++ b/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider @@ -16,4 +16,4 @@ software.amazon.opentelemetry.javaagent.providers.AwsAgentPropertiesCustomizerProvider software.amazon.opentelemetry.javaagent.providers.AwsTracerCustomizerProvider software.amazon.opentelemetry.javaagent.providers.AwsApplicationSignalsCustomizerProvider -software.amazon.opentelemetry.javaagent.providers.OtelJMXMetricsCustomizerProvider \ No newline at end of file +software.amazon.opentelemetry.javaagent.providers.AWSJMXMetricsCustomizerProvider \ No newline at end of file From 19df0b48da34b7998e06612ca1df9d785299a9cc Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 11 Oct 2024 13:39:14 -0400 Subject: [PATCH 07/13] updating comment --- .../AWSJMXMetricsCustomizerProvider.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AWSJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AWSJMXMetricsCustomizerProvider.java index 898559b940..2ad7fc0d31 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AWSJMXMetricsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AWSJMXMetricsCustomizerProvider.java @@ -34,25 +34,24 @@ /** * You can control when these customizations are applied using both the properties - - * otel.jmx.enabled and otel.jmx.exporter.metrics.endpoint or the environment variable - * OTEL_JMX_ENABLED_CONFIG and OTEL_JMX_ENDPOINT_CONFIG. These flags are disabled by default. + * otel.aws.jmx.enabled and otel.aws.jmx.exporter.metrics.endpoint or the environment variable + * AWS_JMX_ENABLED_CONFIG and AWS_JMX_ENDPOINT_CONFIG. These flags are disabled by default. */ public class AWSJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider { private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); private static final Logger logger = Logger.getLogger(AWSJMXMetricsCustomizerProvider.class.getName()); - private static final String AWS_OTEL_JMX_ENABLED_CONFIG = "otel.aws.jmx.enabled"; - private static final String AWS_OTEL_JMX_ENDPOINT_CONFIG = - "otel.aws.jmx.exporter.metrics.endpoint"; + private static final String AWS_JMX_ENABLED_CONFIG = "otel.aws.jmx.enabled"; + private static final String AWS_JMX_ENDPOINT_CONFIG = "otel.aws.jmx.exporter.metrics.endpoint"; public void customize(AutoConfigurationCustomizer autoConfiguration) { autoConfiguration.addMeterProviderCustomizer(this::customizeMeterProvider); } private boolean isOtelJMXEnabled(ConfigProperties configProps) { - return configProps.getBoolean(AWS_OTEL_JMX_ENABLED_CONFIG, false) - && configProps.getString(AWS_OTEL_JMX_ENDPOINT_CONFIG, "") != ""; + return configProps.getBoolean(AWS_JMX_ENABLED_CONFIG, false) + && configProps.getString(AWS_JMX_ENDPOINT_CONFIG, "") != ""; } private SdkMeterProviderBuilder customizeMeterProvider( @@ -90,8 +89,7 @@ public MetricExporter createExporter(ConfigProperties configProps) { String otelJMXEndpoint; if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { - otelJMXEndpoint = - configProps.getString(AWS_OTEL_JMX_ENDPOINT_CONFIG, "http://localhost:4314"); + otelJMXEndpoint = configProps.getString(AWS_JMX_ENDPOINT_CONFIG, "http://localhost:4314"); logger.log( Level.FINE, String.format("AWS Otel JMX metrics export endpoint: %s", otelJMXEndpoint)); return OtlpHttpMetricExporter.builder() From f37454f788bc1b68f484782d422332cfef8dc9f7 Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 11 Oct 2024 13:42:29 -0400 Subject: [PATCH 08/13] renaming to aws-namespace for jmx --- ...izerProvider.java => AwsJMXMetricsCustomizerProvider.java} | 4 ++-- ....sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/{AWSJMXMetricsCustomizerProvider.java => AwsJMXMetricsCustomizerProvider.java} (97%) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AWSJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java similarity index 97% rename from awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AWSJMXMetricsCustomizerProvider.java rename to awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java index 2ad7fc0d31..a5704e993e 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AWSJMXMetricsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java @@ -37,10 +37,10 @@ * otel.aws.jmx.enabled and otel.aws.jmx.exporter.metrics.endpoint or the environment variable * AWS_JMX_ENABLED_CONFIG and AWS_JMX_ENDPOINT_CONFIG. These flags are disabled by default. */ -public class AWSJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider { +public class AwsJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider { private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); private static final Logger logger = - Logger.getLogger(AWSJMXMetricsCustomizerProvider.class.getName()); + Logger.getLogger(AwsJMXMetricsCustomizerProvider.class.getName()); private static final String AWS_JMX_ENABLED_CONFIG = "otel.aws.jmx.enabled"; private static final String AWS_JMX_ENDPOINT_CONFIG = "otel.aws.jmx.exporter.metrics.endpoint"; diff --git a/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider b/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider index 9e80fcb262..5647da4adf 100644 --- a/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider +++ b/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider @@ -16,4 +16,4 @@ software.amazon.opentelemetry.javaagent.providers.AwsAgentPropertiesCustomizerProvider software.amazon.opentelemetry.javaagent.providers.AwsTracerCustomizerProvider software.amazon.opentelemetry.javaagent.providers.AwsApplicationSignalsCustomizerProvider -software.amazon.opentelemetry.javaagent.providers.AWSJMXMetricsCustomizerProvider \ No newline at end of file +software.amazon.opentelemetry.javaagent.providers.AwsJMXMetricsCustomizerProvider \ No newline at end of file From 996f7b931d816d5f3b8370f14468872a6963aba3 Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 11 Oct 2024 13:44:22 -0400 Subject: [PATCH 09/13] updating log lines --- .../providers/AwsJMXMetricsCustomizerProvider.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java index a5704e993e..125ea6cbcd 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java @@ -74,7 +74,7 @@ private SdkMeterProviderBuilder customizeMeterProvider( .build(); sdkMeterProviderBuilder.registerMetricReader(metricReader); - logger.info("Otel JMX metric collection enabled"); + logger.info("AWS JMX metric collection enabled"); } return sdkMeterProviderBuilder; } @@ -85,20 +85,20 @@ private enum JMXExporterProvider { public MetricExporter createExporter(ConfigProperties configProps) { String protocol = OtlpConfigUtil.getOtlpProtocol(OtlpConfigUtil.DATA_TYPE_METRICS, configProps); - logger.log(Level.FINE, String.format("Otel JMX metrics export protocol: %s", protocol)); + logger.log(Level.FINE, String.format("AWS JMX metrics export protocol: %s", protocol)); String otelJMXEndpoint; if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { otelJMXEndpoint = configProps.getString(AWS_JMX_ENDPOINT_CONFIG, "http://localhost:4314"); logger.log( - Level.FINE, String.format("AWS Otel JMX metrics export endpoint: %s", otelJMXEndpoint)); + Level.FINE, String.format("AWS JMX metrics export endpoint: %s", otelJMXEndpoint)); return OtlpHttpMetricExporter.builder() .setEndpoint(otelJMXEndpoint) .setDefaultAggregationSelector(this::getAggregation) .build(); } throw new ConfigurationException( - "Unsupported AWS Otel JMX metrics export protocol: " + protocol); + "Unsupported AWS JMX metrics export protocol: " + protocol); } private Aggregation getAggregation(InstrumentType instrumentType) { From 1b074b4121143e369c0291dc2923d82964e0108a Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 11 Oct 2024 13:49:20 -0400 Subject: [PATCH 10/13] fixing linting --- .../javaagent/providers/AwsJMXMetricsCustomizerProvider.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java index 125ea6cbcd..8732edddbb 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java @@ -97,8 +97,7 @@ public MetricExporter createExporter(ConfigProperties configProps) { .setDefaultAggregationSelector(this::getAggregation) .build(); } - throw new ConfigurationException( - "Unsupported AWS JMX metrics export protocol: " + protocol); + throw new ConfigurationException("Unsupported AWS JMX metrics export protocol: " + protocol); } private Aggregation getAggregation(InstrumentType instrumentType) { From 2abf989a6dfd5e0caf1a997ee182ca16ec54269b Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 11 Oct 2024 14:06:32 -0400 Subject: [PATCH 11/13] retrying build From 580452682a910596cb3e43881cec2dc7028a04e1 Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 11 Oct 2024 14:25:55 -0400 Subject: [PATCH 12/13] updating log lines --- .../providers/AwsJMXMetricsCustomizerProvider.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java index 8732edddbb..01e963c78c 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java @@ -35,7 +35,7 @@ /** * You can control when these customizations are applied using both the properties - * otel.aws.jmx.enabled and otel.aws.jmx.exporter.metrics.endpoint or the environment variable - * AWS_JMX_ENABLED_CONFIG and AWS_JMX_ENDPOINT_CONFIG. These flags are disabled by default. + * AWS_JMX_ENABLED_CONFIG and AWS_JMX_EXPORTER_ENDPOINT_CONFIG. These flags are disabled by default. */ public class AwsJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider { private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); @@ -43,7 +43,8 @@ public class AwsJMXMetricsCustomizerProvider implements AutoConfigurationCustomi Logger.getLogger(AwsJMXMetricsCustomizerProvider.class.getName()); private static final String AWS_JMX_ENABLED_CONFIG = "otel.aws.jmx.enabled"; - private static final String AWS_JMX_ENDPOINT_CONFIG = "otel.aws.jmx.exporter.metrics.endpoint"; + private static final String AWS_JMX_EXPORTER_ENDPOINT_CONFIG = + "otel.aws.jmx.exporter.metrics.endpoint"; public void customize(AutoConfigurationCustomizer autoConfiguration) { autoConfiguration.addMeterProviderCustomizer(this::customizeMeterProvider); @@ -51,7 +52,7 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) { private boolean isOtelJMXEnabled(ConfigProperties configProps) { return configProps.getBoolean(AWS_JMX_ENABLED_CONFIG, false) - && configProps.getString(AWS_JMX_ENDPOINT_CONFIG, "") != ""; + && configProps.getString(AWS_JMX_EXPORTER_ENDPOINT_CONFIG, "") != ""; } private SdkMeterProviderBuilder customizeMeterProvider( @@ -89,7 +90,8 @@ public MetricExporter createExporter(ConfigProperties configProps) { String otelJMXEndpoint; if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { - otelJMXEndpoint = configProps.getString(AWS_JMX_ENDPOINT_CONFIG, "http://localhost:4314"); + otelJMXEndpoint = + configProps.getString(AWS_JMX_EXPORTER_ENDPOINT_CONFIG, "http://localhost:4314"); logger.log( Level.FINE, String.format("AWS JMX metrics export endpoint: %s", otelJMXEndpoint)); return OtlpHttpMetricExporter.builder() From ec15a77a4f8632a62d8ffd0a72921b78e8dd2d83 Mon Sep 17 00:00:00 2001 From: Mitali Salvi Date: Fri, 11 Oct 2024 16:01:36 -0400 Subject: [PATCH 13/13] fixing gate for jmx enabledment --- .../providers/AwsJMXMetricsCustomizerProvider.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java index 01e963c78c..52ef09f5c3 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsJMXMetricsCustomizerProvider.java @@ -34,15 +34,16 @@ /** * You can control when these customizations are applied using both the properties - - * otel.aws.jmx.enabled and otel.aws.jmx.exporter.metrics.endpoint or the environment variable - * AWS_JMX_ENABLED_CONFIG and AWS_JMX_EXPORTER_ENDPOINT_CONFIG. These flags are disabled by default. + * otel.jmx.enabled and otel.aws.jmx.exporter.metrics.endpoint or the environment variable + * OTEL_JMX_ENABLED_CONFIG and AWS_JMX_EXPORTER_ENDPOINT_CONFIG. These flags are disabled by + * default. */ public class AwsJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider { private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); private static final Logger logger = Logger.getLogger(AwsJMXMetricsCustomizerProvider.class.getName()); - private static final String AWS_JMX_ENABLED_CONFIG = "otel.aws.jmx.enabled"; + private static final String OTEL_JMX_ENABLED_CONFIG = "otel.jmx.enabled"; private static final String AWS_JMX_EXPORTER_ENDPOINT_CONFIG = "otel.aws.jmx.exporter.metrics.endpoint"; @@ -51,7 +52,7 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) { } private boolean isOtelJMXEnabled(ConfigProperties configProps) { - return configProps.getBoolean(AWS_JMX_ENABLED_CONFIG, false) + return configProps.getBoolean(OTEL_JMX_ENABLED_CONFIG, true) && configProps.getString(AWS_JMX_EXPORTER_ENDPOINT_CONFIG, "") != ""; } @@ -90,8 +91,7 @@ public MetricExporter createExporter(ConfigProperties configProps) { String otelJMXEndpoint; if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { - otelJMXEndpoint = - configProps.getString(AWS_JMX_EXPORTER_ENDPOINT_CONFIG, "http://localhost:4314"); + otelJMXEndpoint = configProps.getString(AWS_JMX_EXPORTER_ENDPOINT_CONFIG); logger.log( Level.FINE, String.format("AWS JMX metrics export endpoint: %s", otelJMXEndpoint)); return OtlpHttpMetricExporter.builder()