Skip to content

Commit b07f361

Browse files
committed
removing delta temporality and adding condition for checking both bool and endpoint string
1 parent b14fba4 commit b07f361

File tree

2 files changed

+90
-91
lines changed

2 files changed

+90
-91
lines changed

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/OtelJMXMetricsCustomizerProvider.java

Lines changed: 89 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -40,105 +40,105 @@
4040
* environment variable OTEL_JMX_ENABLED_CONFIG. This flag is disabled by default.
4141
*/
4242
public class OtelJMXMetricsCustomizerProvider implements AutoConfigurationCustomizerProvider {
43-
private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1);
44-
private static final Logger logger =
45-
Logger.getLogger(OtelJMXMetricsCustomizerProvider.class.getName());
43+
private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1);
44+
private static final Logger logger =
45+
Logger.getLogger(OtelJMXMetricsCustomizerProvider.class.getName());
4646

47-
private static final String OTEL_JMX_ENABLED_CONFIG = "otel.jmx.enabled";
48-
private static final String OTEL_JMX_ENDPOINT_CONFIG = "otel.jmx.exporter.metrics.endpoint";
47+
private static final String OTEL_JMX_ENABLED_CONFIG = "otel.jmx.enabled";
48+
private static final String OTEL_JMX_ENDPOINT_CONFIG = "otel.jmx.exporter.metrics.endpoint";
4949

50-
public void customize(AutoConfigurationCustomizer autoConfiguration) {
51-
autoConfiguration.addMeterProviderCustomizer(this::customizeMeterProvider);
52-
}
50+
public void customize(AutoConfigurationCustomizer autoConfiguration) {
51+
autoConfiguration.addMeterProviderCustomizer(this::customizeMeterProvider);
52+
}
5353

54-
private boolean isOtelJMXEnabled(ConfigProperties configProps) {
55-
return configProps.getBoolean(OTEL_JMX_ENABLED_CONFIG);
56-
}
54+
private boolean isOtelJMXEnabled(ConfigProperties configProps) {
55+
return configProps.getBoolean(OTEL_JMX_ENABLED_CONFIG)
56+
&& configProps.getString(OTEL_JMX_ENDPOINT_CONFIG, "") != "";
57+
}
5758

58-
private SdkMeterProviderBuilder customizeMeterProvider(
59-
SdkMeterProviderBuilder sdkMeterProviderBuilder, ConfigProperties configProps) {
59+
private SdkMeterProviderBuilder customizeMeterProvider(
60+
SdkMeterProviderBuilder sdkMeterProviderBuilder, ConfigProperties configProps) {
6061

61-
if (isOtelJMXEnabled(configProps)) {
62-
Set<String> registeredScopeNames = new HashSet<>(1);
63-
String jmxRuntimeScopeName = "io.opentelemetry.jmx";
64-
registeredScopeNames.add(jmxRuntimeScopeName);
62+
if (isOtelJMXEnabled(configProps)) {
63+
Set<String> registeredScopeNames = new HashSet<>(1);
64+
String jmxRuntimeScopeName = "io.opentelemetry.jmx";
65+
registeredScopeNames.add(jmxRuntimeScopeName);
6566

66-
configureMetricFilter(configProps, sdkMeterProviderBuilder, registeredScopeNames);
67+
configureMetricFilter(configProps, sdkMeterProviderBuilder, registeredScopeNames);
6768

68-
MetricExporter metricsExporter = JMXExporterProvider.INSTANCE.createExporter(configProps);
69-
MetricReader metricReader =
70-
ScopeBasedPeriodicMetricReader.create(metricsExporter, registeredScopeNames)
71-
.setInterval(getMetricExportInterval(configProps))
72-
.build();
73-
sdkMeterProviderBuilder.registerMetricReader(metricReader);
69+
MetricExporter metricsExporter = JMXExporterProvider.INSTANCE.createExporter(configProps);
70+
MetricReader metricReader =
71+
ScopeBasedPeriodicMetricReader.create(metricsExporter, registeredScopeNames)
72+
.setInterval(getMetricExportInterval(configProps))
73+
.build();
74+
sdkMeterProviderBuilder.registerMetricReader(metricReader);
7475

75-
logger.info("Otel JMX metric collection enabled");
76-
}
77-
return sdkMeterProviderBuilder;
76+
logger.info("Otel JMX metric collection enabled");
7877
}
79-
80-
private static void configureMetricFilter(
81-
ConfigProperties configProps,
82-
SdkMeterProviderBuilder sdkMeterProviderBuilder,
83-
Set<String> registeredScopeNames) {
84-
Set<String> exporterNames =
85-
DefaultConfigProperties.getSet(configProps, "otel.metrics.exporter");
86-
if (exporterNames.contains("none")) {
87-
for (String scope : registeredScopeNames) {
88-
sdkMeterProviderBuilder.registerView(
89-
InstrumentSelector.builder().setMeterName(scope).build(),
90-
View.builder().setAggregation(Aggregation.defaultAggregation()).build());
91-
92-
logger.log(Level.FINE, "Registered scope {0}", scope);
93-
}
94-
sdkMeterProviderBuilder.registerView(
95-
InstrumentSelector.builder().setName("*").build(),
96-
View.builder().setAggregation(Aggregation.drop()).build());
97-
}
78+
return sdkMeterProviderBuilder;
79+
}
80+
81+
private static void configureMetricFilter(
82+
ConfigProperties configProps,
83+
SdkMeterProviderBuilder sdkMeterProviderBuilder,
84+
Set<String> registeredScopeNames) {
85+
Set<String> exporterNames =
86+
DefaultConfigProperties.getSet(configProps, "otel.metrics.exporter");
87+
if (exporterNames.contains("none")) {
88+
for (String scope : registeredScopeNames) {
89+
sdkMeterProviderBuilder.registerView(
90+
InstrumentSelector.builder().setMeterName(scope).build(),
91+
View.builder().setAggregation(Aggregation.defaultAggregation()).build());
92+
93+
logger.log(Level.FINE, "Registered scope {0}", scope);
94+
}
95+
sdkMeterProviderBuilder.registerView(
96+
InstrumentSelector.builder().setName("*").build(),
97+
View.builder().setAggregation(Aggregation.drop()).build());
9898
}
99-
100-
private static Duration getMetricExportInterval(ConfigProperties configProps) {
101-
Duration exportInterval =
102-
configProps.getDuration("otel.metric.export.interval", DEFAULT_METRIC_EXPORT_INTERVAL);
103-
logger.log(Level.FINE, String.format("Otel JMX Metrics export interval: %s", exportInterval));
104-
// Cap export interval to 60 seconds. This is currently required for metrics-trace correlation
105-
// to work correctly.
106-
if (exportInterval.compareTo(DEFAULT_METRIC_EXPORT_INTERVAL) > 0) {
107-
exportInterval = DEFAULT_METRIC_EXPORT_INTERVAL;
108-
logger.log(
109-
Level.INFO,
110-
String.format("Otel JMX Metrics export interval capped to %s", exportInterval));
111-
}
112-
return exportInterval;
99+
}
100+
101+
private static Duration getMetricExportInterval(ConfigProperties configProps) {
102+
Duration exportInterval =
103+
configProps.getDuration("otel.metric.export.interval", DEFAULT_METRIC_EXPORT_INTERVAL);
104+
logger.log(Level.FINE, String.format("Otel JMX Metrics export interval: %s", exportInterval));
105+
// Cap export interval to 60 seconds. This is currently required for metrics-trace correlation
106+
// to work correctly.
107+
if (exportInterval.compareTo(DEFAULT_METRIC_EXPORT_INTERVAL) > 0) {
108+
exportInterval = DEFAULT_METRIC_EXPORT_INTERVAL;
109+
logger.log(
110+
Level.INFO,
111+
String.format("Otel JMX Metrics export interval capped to %s", exportInterval));
112+
}
113+
return exportInterval;
114+
}
115+
116+
private enum JMXExporterProvider {
117+
INSTANCE;
118+
119+
public MetricExporter createExporter(ConfigProperties configProps) {
120+
String protocol =
121+
OtlpConfigUtil.getOtlpProtocol(OtlpConfigUtil.DATA_TYPE_METRICS, configProps);
122+
logger.log(Level.FINE, String.format("Otel JMX metrics export protocol: %s", protocol));
123+
124+
String otelJMXEndpoint;
125+
if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) {
126+
otelJMXEndpoint = configProps.getString(OTEL_JMX_ENDPOINT_CONFIG, "http://localhost:4314");
127+
logger.log(
128+
Level.FINE, String.format("Otel JMX metrics export endpoint: %s", otelJMXEndpoint));
129+
return OtlpHttpMetricExporter.builder()
130+
.setEndpoint(otelJMXEndpoint)
131+
.setDefaultAggregationSelector(this::getAggregation)
132+
.build();
133+
}
134+
throw new ConfigurationException("Unsupported Otel JMX metrics export protocol: " + protocol);
113135
}
114136

115-
private enum JMXExporterProvider {
116-
INSTANCE;
117-
118-
public MetricExporter createExporter(ConfigProperties configProps) {
119-
String protocol =
120-
OtlpConfigUtil.getOtlpProtocol(OtlpConfigUtil.DATA_TYPE_METRICS, configProps);
121-
logger.log(Level.FINE, String.format("Otel JMX metrics export protocol: %s", protocol));
122-
123-
String otelJMXEndpoint;
124-
if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) {
125-
otelJMXEndpoint = configProps.getString(OTEL_JMX_ENDPOINT_CONFIG, "http://localhost:4314");
126-
logger.log(
127-
Level.FINE, String.format("Otel JMX metrics export endpoint: %s", otelJMXEndpoint));
128-
return OtlpHttpMetricExporter.builder()
129-
.setEndpoint(otelJMXEndpoint)
130-
.setDefaultAggregationSelector(this::getAggregation)
131-
.setAggregationTemporalitySelector(CloudWatchTemporalitySelector.alwaysDelta())
132-
.build();
133-
}
134-
throw new ConfigurationException("Unsupported Otel JMX metrics export protocol: " + protocol);
135-
}
136-
137-
private Aggregation getAggregation(InstrumentType instrumentType) {
138-
if (instrumentType == InstrumentType.HISTOGRAM) {
139-
return Aggregation.base2ExponentialBucketHistogram();
140-
}
141-
return Aggregation.defaultAggregation();
142-
}
137+
private Aggregation getAggregation(InstrumentType instrumentType) {
138+
if (instrumentType == InstrumentType.HISTOGRAM) {
139+
return Aggregation.base2ExponentialBucketHistogram();
140+
}
141+
return Aggregation.defaultAggregation();
143142
}
144-
}
143+
}
144+
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
# http://aws.amazon.com/apache2.0
99
#
1010
# or in the "license" file accompanying this file. This file is distributed
11-
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
12-
ANY KIND, either
11+
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
1312
# express or implied. See the License for the specific language governing
1413
# permissions and limitations under the License.
1514
#

0 commit comments

Comments
 (0)