micrometer-metrics / tracing

Provides tracing abstractions over tracers and tracing system reporters.
https://micrometer.io
Apache License 2.0
244 stars 43 forks source link

v1.2.0 seems to break compatibility with Spring Boot 3.1.5 #456

Closed mikymigs closed 10 months ago

mikymigs commented 10 months ago

When upgrading from v1.1.7 to v1.2.0, we get the following error at startup while using Spring Boot 3.1.5:

Stack Trace ```shell Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:142) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:489) at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) ... 8 common frames omitted Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webMvcObservationFilter' defined in class path resource [org/springframework/boot/actuate/autoconfigure/observation/web/servlet/WebMvcObservationAutoConfiguration.class]: Unsatisfied dependency expressed through method 'webMvcObservationFilter' parameter 0: Error creating bean with name 'observationRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/observation/ObservationAutoConfiguration.class]: Error creating bean with name 'defaultTracingObservationHandler' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/MicrometerTracingAutoConfiguration.class]: Unsatisfied dependency expressed through method 'defaultTracingObservationHandler' parameter 0: Error creating bean with name 'micrometerOtelTracer' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'micrometerOtelTracer' parameter 0: Error creating bean with name 'otelTracer' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'otelTracer' parameter 0: Error creating bean with name 'openTelemetry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'openTelemetry' parameter 0: Error creating bean with name 'otelSdkTracerProvider' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Failed to instantiate [io.opentelemetry.sdk.trace.SdkTracerProvider]: Factory method 'otelSdkTracerProvider' threw exception with message: io/opentelemetry/semconv/resource/attributes/ResourceAttributes at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:801) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:545) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:210) at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:201) at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:96) at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:85) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:261) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:235) at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:52) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4850) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:845) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:240) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:917) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) at org.apache.catalina.startup.Tomcat.start(Tomcat.java:488) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) ... 13 common frames omitted Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'observationRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/observation/ObservationAutoConfiguration.class]: Error creating bean with name 'defaultTracingObservationHandler' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/MicrometerTracingAutoConfiguration.class]: Unsatisfied dependency expressed through method 'defaultTracingObservationHandler' parameter 0: Error creating bean with name 'micrometerOtelTracer' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'micrometerOtelTracer' parameter 0: Error creating bean with name 'otelTracer' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'otelTracer' parameter 0: Error creating bean with name 'openTelemetry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'openTelemetry' parameter 0: Error creating bean with name 'otelSdkTracerProvider' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Failed to instantiate [io.opentelemetry.sdk.trace.SdkTracerProvider]: Factory method 'otelSdkTracerProvider' threw exception with message: io/opentelemetry/semconv/resource/attributes/ResourceAttributes at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:605) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:910) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) ... 53 common frames omitted Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'defaultTracingObservationHandler' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/MicrometerTracingAutoConfiguration.class]: Unsatisfied dependency expressed through method 'defaultTracingObservationHandler' parameter 0: Error creating bean with name 'micrometerOtelTracer' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'micrometerOtelTracer' parameter 0: Error creating bean with name 'otelTracer' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'otelTracer' parameter 0: Error creating bean with name 'openTelemetry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'openTelemetry' parameter 0: Error creating bean with name 'otelSdkTracerProvider' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Failed to instantiate [io.opentelemetry.sdk.trace.SdkTracerProvider]: Factory method 'otelSdkTracerProvider' threw exception with message: io/opentelemetry/semconv/resource/attributes/ResourceAttributes at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:801) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:545) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1640) at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1597) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1443) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1375) at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.resolveStream(DefaultListableBeanFactory.java:2142) at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.orderedStream(DefaultListableBeanFactory.java:2136) at org.springframework.boot.actuate.autoconfigure.observation.ObservationRegistryConfigurer.asOrderedList(ObservationRegistryConfigurer.java:101) at org.springframework.boot.actuate.autoconfigure.observation.ObservationRegistryConfigurer.lambda$registerHandlers$0(ObservationRegistryConfigurer.java:78) at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.ifAvailable(DefaultListableBeanFactory.java:2070) at org.springframework.boot.actuate.autoconfigure.observation.ObservationRegistryConfigurer.registerHandlers(ObservationRegistryConfigurer.java:77) at org.springframework.boot.actuate.autoconfigure.observation.ObservationRegistryConfigurer.configure(ObservationRegistryConfigurer.java:71) at org.springframework.boot.actuate.autoconfigure.observation.ObservationRegistryPostProcessor.postProcessAfterInitialization(ObservationRegistryPostProcessor.java:69) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:434) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1773) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ... 63 common frames omitted Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'micrometerOtelTracer' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'micrometerOtelTracer' parameter 0: Error creating bean with name 'otelTracer' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'otelTracer' parameter 0: Error creating bean with name 'openTelemetry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'openTelemetry' parameter 0: Error creating bean with name 'otelSdkTracerProvider' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Failed to instantiate [io.opentelemetry.sdk.trace.SdkTracerProvider]: Factory method 'otelSdkTracerProvider' threw exception with message: io/opentelemetry/semconv/resource/attributes/ResourceAttributes at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:801) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:545) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:910) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) ... 88 common frames omitted Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'otelTracer' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'otelTracer' parameter 0: Error creating bean with name 'openTelemetry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'openTelemetry' parameter 0: Error creating bean with name 'otelSdkTracerProvider' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Failed to instantiate [io.opentelemetry.sdk.trace.SdkTracerProvider]: Factory method 'otelSdkTracerProvider' threw exception with message: io/opentelemetry/semconv/resource/attributes/ResourceAttributes at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:801) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:545) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:910) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) ... 102 common frames omitted Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'openTelemetry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Unsatisfied dependency expressed through method 'openTelemetry' parameter 0: Error creating bean with name 'otelSdkTracerProvider' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Failed to instantiate [io.opentelemetry.sdk.trace.SdkTracerProvider]: Factory method 'otelSdkTracerProvider' threw exception with message: io/opentelemetry/semconv/resource/attributes/ResourceAttributes at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:801) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:545) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:910) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) ... 116 common frames omitted Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'otelSdkTracerProvider' defined in class path resource [org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.class]: Failed to instantiate [io.opentelemetry.sdk.trace.SdkTracerProvider]: Factory method 'otelSdkTracerProvider' threw exception with message: io/opentelemetry/semconv/resource/attributes/ResourceAttributes at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:654) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:642) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:910) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) ... 130 common frames omitted Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.opentelemetry.sdk.trace.SdkTracerProvider]: Factory method 'otelSdkTracerProvider' threw exception with message: io/opentelemetry/semconv/resource/attributes/ResourceAttributes at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:171) at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:650) ... 144 common frames omitted Caused by: java.lang.NoClassDefFoundError: io/opentelemetry/semconv/resource/attributes/ResourceAttributes at org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration.otelSdkTracerProvider(OpenTelemetryAutoConfiguration.java:105) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:139) ... 145 common frames omitted Caused by: java.lang.ClassNotFoundException: io.opentelemetry.semconv.resource.attributes.ResourceAttributes at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ... 149 common frames omitted ```

However when using Spring Boot 3.2.0, the application starts fine. Unfortunately we're unable to migrate to Spring Boot 3.2.0 yet which means we cannot use v1.2.0 because of this issue.

I'm wondering if this is a bug or if this break of compatibility is expected ?

Thanks a lot,

jonatan-ivanov commented 10 months ago

This is OpenTelemetry breaking you not Micrometer Tracing nor Spring Boot. Fyi: OpenTelemetry is not stable yet so if you are using it you should expect breaking changes. Also io.opentelemetry:opentelemetry-semconv was moved to io.opentelemetry.semconv:opentelemetry-semconv and the former is deprecated. Micrometer Tracing 1.2 and Boot 3.2 use this new module, Micrometer Tracing 1.1 and Boot 3.1 use the old one. Solutions:

  1. Use Boot 3.2 and Micrometer Tracing 1.2
  2. Use Boot 3.1 and Micrometer Tracing 1.1
  3. Use Boot 3.1 and Micrometer Tracing 1.2 but instead of the OTel Bridge, use the Brave Bridge (it's more performant and Brave is stable)
mikymigs commented 10 months ago

Thanks for the detailed explanation.

From a "simple user" of these libs, it's very easy to get lost between the multiple existing libs, their feature overlap (but not quite), the deprecations, the compatibilities, the not quite stable yet libs, the ones compatible with specific versions of Spring Boot, the dying ones, the bridges etc etc.

Your explanation brings a bit of clarity in this mess, thank you. I think we'll stick with Micrometer Tracing 1.1 until we're finally ready to migrate to Spring Boot 3.2

jonatan-ivanov commented 10 months ago

Please let us know if we can improve this in the Micrometer docs, we are appreciate feedback and happy to improve it. Unfortunately we can't really change the OTel docs so that it better calls out that OTel is not stable yet (I gave this feedback multiple times in the past).

mikymigs commented 10 months ago

Will do :)