Description
Describe the bug
When following this article https://learn.microsoft.com/en-us/java/api/overview/azure/monitor-opentelemetry-autoconfigure-readme?view=azure-java-preview and trying to add an azure and an otel exporter, an error appears when the application is run with payara.
Exception or Stack Trace
io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException: Unrecognized value for otel.metrics.exporter: azure_monitor
at io.opentelemetry.sdk.autoconfigure.MetricExporterConfiguration.configureExporter(MetricExporterConfiguration.java:95)
at io.opentelemetry.sdk.autoconfigure.MetricExporterConfiguration.configureReader(MetricExporterConfiguration.java:60)
at io.opentelemetry.sdk.autoconfigure.MeterProviderConfiguration.lambda$configureMetricReaders$2(MeterProviderConfiguration.java:88)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1707)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at io.opentelemetry.sdk.autoconfigure.MeterProviderConfiguration.configureMetricReaders(MeterProviderConfiguration.java:91)
at io.opentelemetry.sdk.autoconfigure.MeterProviderConfiguration.configureMeterProvider(MeterProviderConfiguration.java:60)
at io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder.build(AutoConfiguredOpenTelemetrySdkBuilder.java:348)
at com.example.demo.OpenTelemetryService.initOpenTelemetry(OpenTelemetryService.java:34)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
To Reproduce
Steps to reproduce the behavior:
Clone https://github.com/Tim-Wasl/Azure-OpenTelemetry, run maven build and docker build and run the docker container.
Code Snippet
@Singleton
@Startup
public class OpenTelemetryService {
private OpenTelemetry openTelemetry;
private final String testConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;EndpointSuffix=ai.contoso.com";
@PostConstruct
public void initOpenTelemetry() {
System.out.println("🔵 OteltestApplication class loaded!");
try {
AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder();
AzureMonitorAutoConfigure.customize(sdkBuilder, testConnectionString);
Resource resource = Resource.getDefault().toBuilder().put(ResourceAttributes.SERVICE_NAME, "").build();
OtlpHttpMetricExporter otlpHttpMetricExporter = OtlpHttpMetricExporter.builder().setEndpoint("http://localhost:8080").build();
PeriodicMetricReader periodicMetricReader = PeriodicMetricReader.builder(otlpHttpMetricExporter).setInterval(10, TimeUnit.SECONDS).build();
openTelemetry = sdkBuilder.addMeterProviderCustomizer((sdkMeterProviderBuilder, configProperties) -> sdkMeterProviderBuilder.setResource(resource).registerMetricReader(periodicMetricReader)).build().getOpenTelemetrySdk();
} catch (Exception e) {
System.out.println("OpenTelemetry error during initialization" +e.getMessage());
e.printStackTrace();
openTelemetry = OpenTelemetry.noop();
} finally {
System.out.println("OpenTelemetry initialized" +openTelemetry);
}
}
}
FROM payara/micro:6.2025.1-jdk17
USER payara
EXPOSE 8080
ADD --chown=payara:payara /target/demo-1.0-SNAPSHOT.war $DEPLOY_DIR/demo-1.0-SNAPSHOT.war
Expected behavior
I expect to have two exporters one azure monitor exporter and one otel exporter running. This can also be seen in the test output in the example repo. When running a simple test locally without payara i get both metric exporters:
metricReaders = [
PeriodicMetricReader {
exporter = OtlpHttpMetricExporter {
exporterName = "otlp"
type = "metric"
endpoint = "http://localhost:8080"
...
}
},
PeriodicMetricReader {
exporter = AzureMonitorMetricExporter@40e4ea87
intervalNanos = 60000000000
}
]
Setup (please complete the following information):
- OS: [Windows11]
- IDE: [IntelliJ]
- Library/Libraries: [com.azure.azure-monitor-opentelemetry-autoconfigure:1.0.0-beta.2,io.opentelemetry.opentelemetry-exporter-otlp:1.47.0, io.opentelemetry.opentelemetry-api:1.47.0]
- Java version: [17]
- App Server/Environment: [Payara]
Additional context
Already created an issue in the Open-Telemetry Repo:
open-telemetry/opentelemetry-java#7201
(@jeanbisutti , @trask )
Information Checklist
Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report
- Bug Description Added
- Repro Steps Added
- Setup information Added