Skip to content

[BUG] Adding Otel and Azure Monitor Exporter leads to an Exception when run in Payara #44671

Open
@Tim-Wasl

Description

@Tim-Wasl

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

Metadata

Metadata

Assignees

Labels

Monitor - AutoconfigureMonitor OpenTelemetry AutoconfigurebugThis issue requires a change to an existing behavior in the product in order to be resolved.customer-reportedIssues that are reported by GitHub users external to the Azure organization.needs-team-attentionWorkflow: This issue needs attention from Azure service team or SDK team

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions