acherla opened a new issue, #13924: URL: https://github.com/apache/druid/issues/13924
opentelemetry-emitter fails to load on startup when added to the load-list when starting up druid with the documented configuration. https://github.com/apache/druid/tree/master/extensions-contrib/opentelemetry-emitter ``` Exception in thread "main" java.lang.RuntimeException: com.google.inject.CreationException: Unable to create injector, see the following errors: 1) Error in custom provider, org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException: OTLP gRPC Trace Exporter enabled but opentelemetry-exporter-otlp not found on classpath. Make sure to add it as a dependency to enable this feature. at org.apache.druid.emitter.opentelemetry.OpenTelemetryEmitterModule.getEmitter(OpenTelemetryEmitterModule.java:58) (via modules: com.google.inject.util.Modules$OverrideModule -> org.apache.druid.emitter.opentelemetry.OpenTelemetryEmitterModule) at org.apache.druid.emitter.opentelemetry.OpenTelemetryEmitterModule.getEmitter(OpenTelemetryEmitterModule.java:58) (via modules: com.google.inject.util.Modules$OverrideModule -> org.apache.druid.emitter.opentelemetry.OpenTelemetryEmitterModule) while locating org.apache.druid.java.util.emitter.core.Emitter annotated with @com.google.inject.name.Named(value=opentelemetry) at org.apache.druid.server.emitter.EmitterModule.getServiceEmitter(EmitterModule.java:104) (via modules: com.google.inject.util.Modules$OverrideModule -> com.google.inject.util.Modules$OverrideModule -> org.apache.druid.server.emitter.EmitterModule) at org.apache.druid.server.emitter.EmitterModule.getServiceEmitter(EmitterModule.java:104) (via modules: com.google.inject.util.Modules$OverrideModule -> com.google.inject.util.Modules$OverrideModule -> org.apache.druid.server.emitter.EmitterModule) while locating org.apache.druid.java.util.emitter.service.ServiceEmitter for the 4th parameter of org.apache.druid.server.metrics.MetricsModule.getMonitorScheduler(MetricsModule.java:110) at org.apache.druid.server.metrics.MetricsModule.getMonitorScheduler(MetricsModule.java:110) (via modules: com.google.inject.util.Modules$OverrideModule -> com.google.inject.util.Modules$OverrideModule -> org.apache.druid.server.metrics.MetricsModule) while locating org.apache.druid.java.util.metrics.MonitorScheduler at org.apache.druid.server.metrics.MetricsModule.configure(MetricsModule.java:95) (via modules: com.google.inject.util.Modules$OverrideModule -> com.google.inject.util.Modules$OverrideModule -> org.apache.druid.server.metrics.MetricsModule) while locating org.apache.druid.java.util.metrics.MonitorScheduler annotated with @com.google.inject.name.Named(value=ForTheEagerness) 1 error at org.apache.druid.cli.GuiceRunnable.makeInjector(GuiceRunnable.java:88) at org.apache.druid.cli.ServerRunnable.run(ServerRunnable.java:62) at org.apache.druid.cli.Main.main(Main.java:112) Caused by: com.google.inject.CreationException: Unable to create injector, see the following errors: 1) Error in custom provider, org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException: OTLP gRPC Trace Exporter enabled but opentelemetry-exporter-otlp not found on classpath. Make sure to add it as a dependency to enable this feature. at org.apache.druid.emitter.opentelemetry.OpenTelemetryEmitterModule.getEmitter(OpenTelemetryEmitterModule.java:58) (via modules: com.google.inject.util.Modules$OverrideModule -> org.apache.druid.emitter.opentelemetry.OpenTelemetryEmitterModule) at org.apache.druid.emitter.opentelemetry.OpenTelemetryEmitterModule.getEmitter(OpenTelemetryEmitterModule.java:58) (via modules: com.google.inject.util.Modules$OverrideModule -> org.apache.druid.emitter.opentelemetry.OpenTelemetryEmitterModule) while locating org.apache.druid.java.util.emitter.core.Emitter annotated with @com.google.inject.name.Named(value=opentelemetry) at org.apache.druid.server.emitter.EmitterModule.getServiceEmitter(EmitterModule.java:104) (via modules: com.google.inject.util.Modules$OverrideModule -> com.google.inject.util.Modules$OverrideModule -> org.apache.druid.server.emitter.EmitterModule) at org.apache.druid.server.emitter.EmitterModule.getServiceEmitter(EmitterModule.java:104) (via modules: com.google.inject.util.Modules$OverrideModule -> com.google.inject.util.Modules$OverrideModule -> org.apache.druid.server.emitter.EmitterModule) while locating org.apache.druid.java.util.emitter.service.ServiceEmitter for the 4th parameter of org.apache.druid.server.metrics.MetricsModule.getMonitorScheduler(MetricsModule.java:110) at org.apache.druid.server.metrics.MetricsModule.getMonitorScheduler(MetricsModule.java:110) (via modules: com.google.inject.util.Modules$OverrideModule -> com.google.inject.util.Modules$OverrideModule -> org.apache.druid.server.metrics.MetricsModule) while locating org.apache.druid.java.util.metrics.MonitorScheduler at org.apache.druid.server.metrics.MetricsModule.configure(MetricsModule.java:95) (via modules: com.google.inject.util.Modules$OverrideModule -> com.google.inject.util.Modules$OverrideModule -> org.apache.druid.server.metrics.MetricsModule) while locating org.apache.druid.java.util.metrics.MonitorScheduler annotated with @com.google.inject.name.Named(value=ForTheEagerness) 1 error at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:470) at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:184) at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110) at com.google.inject.Guice.createInjector(Guice.java:99) at com.google.inject.Guice.createInjector(Guice.java:73) at com.google.inject.Guice.createInjector(Guice.java:62) at org.apache.druid.initialization.ExtensionInjectorBuilder.build(ExtensionInjectorBuilder.java:49) at org.apache.druid.initialization.ServerInjectorBuilder.build(ServerInjectorBuilder.java:118) at org.apache.druid.initialization.ServerInjectorBuilder.makeServerInjector(ServerInjectorBuilder.java:73) at org.apache.druid.cli.GuiceRunnable.makeInjector(GuiceRunnable.java:85) ... 2 more Caused by: org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException: OTLP gRPC Trace Exporter enabled but opentelemetry-exporter-otlp not found on classpath. Make sure to add it as a dependency to enable this feature. at org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.ClasspathUtil.checkClassExists(ClasspathUtil.java:17) at org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.SpanExporterConfiguration.configureOtlp(SpanExporterConfiguration.java:130) at org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.SpanExporterConfiguration.configureExporter(SpanExporterConfiguration.java:88) at org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.SpanExporterConfiguration.lambda$configureSpanExporters$1(SpanExporterConfiguration.java:80) at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1321) at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) at java.util.Collections$2.tryAdvance(Collections.java:4719) at java.util.Collections$2.forEachRemaining(Collections.java:4727) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566) at org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.SpanExporterConfiguration.configureSpanExporters(SpanExporterConfiguration.java:77) at org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.TracerProviderConfiguration.configureTracerProvider(TracerProviderConfiguration.java:52) at org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.OpenTelemetrySdkAutoConfiguration.initialize(OpenTelemetrySdkAutoConfiguration.java:66) at org.apache.druid.opentelemetry.shaded.io.opentelemetry.sdk.autoconfigure.OpenTelemetrySdkAutoConfiguration.initialize(OpenTelemetrySdkAutoConfiguration.java:46) at org.apache.druid.emitter.opentelemetry.OpenTelemetryEmitterModule.getEmitter(OpenTelemetryEmitterModule.java:58) at org.apache.druid.emitter.opentelemetry.OpenTelemetryEmitterModule$$FastClassByGuice$$545204ec.invoke(<generated>) at com.google.inject.internal.ProviderMethod$FastClassProviderMethod.doProvision(ProviderMethod.java:264) at com.google.inject.internal.ProviderMethod$Factory.provision(ProviderMethod.java:401) at com.google.inject.internal.ProviderMethod$Factory.get(ProviderMethod.java:376) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at org.apache.druid.guice.LifecycleScope$1.get(LifecycleScope.java:68) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1019) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1015) at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1050) at org.apache.druid.server.emitter.ComposingEmitterModule$1.apply(ComposingEmitterModule.java:65) at org.apache.druid.server.emitter.ComposingEmitterModule$1.apply(ComposingEmitterModule.java:61) at com.google.common.collect.Lists$TransformingRandomAccessList$1.transform(Lists.java:582) at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) at java.util.AbstractCollection.toString(AbstractCollection.java:461) at java.lang.String.valueOf(String.java:2994) at java.lang.StringBuilder.append(StringBuilder.java:136) at org.apache.druid.java.util.emitter.core.ComposingEmitter.toString(ComposingEmitter.java:109) at java.util.Formatter$FormatSpecifier.printString(Formatter.java:2886) at java.util.Formatter$FormatSpecifier.print(Formatter.java:2763) at java.util.Formatter.format(Formatter.java:2520) at java.util.Formatter.format(Formatter.java:2455) at java.lang.String.format(String.java:2981) at org.apache.druid.java.util.common.StringUtils.nonStrictFormat(StringUtils.java:363) at org.apache.druid.java.util.common.logger.Logger.info(Logger.java:105) at org.apache.druid.server.emitter.EmitterModule.getServiceEmitter(EmitterModule.java:105) at org.apache.druid.server.emitter.EmitterModule$$FastClassByGuice$$4b8c4ff1.invoke(<generated>) at com.google.inject.internal.ProviderMethod$FastClassProviderMethod.doProvision(ProviderMethod.java:264) at com.google.inject.internal.ProviderMethod$Factory.provision(ProviderMethod.java:401) at com.google.inject.internal.ProviderMethod$Factory.get(ProviderMethod.java:376) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at org.apache.druid.guice.LifecycleScope$1.get(LifecycleScope.java:68) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) at com.google.inject.internal.ProviderMethod$Factory.provision(ProviderMethod.java:402) at com.google.inject.internal.ProviderMethod$Factory.get(ProviderMethod.java:376) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at org.apache.druid.guice.LifecycleScope$1.get(LifecycleScope.java:68) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205) at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1085) at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199) at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180) ... 10 more ``` ### Affected Version 25.0.0 ### Description 1. Ran the following pull deps and loaded the opentelemetry-emitter ``` java -classpath "/usr/apps/druid/product/current/lib/*" org.apache.druid.cli.Main tools pull-deps --clean -c org.apache.druid.extensions.contrib:opentelemetry-emitter:25.0.0 ``` 2. Verified the deps are loaded into the proper folder with the correct jars ``` -rwxr-x--- 1 druid druid 4467 Feb 13 10:42 aopalliance-1.0.jar -rwxr-x--- 1 druid druid 2228009 Feb 13 10:42 guava-16.0.1.jar -rwxr-x--- 1 druid druid 674028 Feb 13 10:42 guice-4.1.0.jar -rwxr-x--- 1 druid druid 2497 Feb 13 10:42 javax.inject-1.jar -rwxr-x--- 1 druid druid 31866 Feb 13 10:42 jsr305-2.0.1.jar -rwxr-x--- 1 druid druid 12881713 Feb 13 10:42 opentelemetry-emitter-25.0.0.jar -rwxr-x--- 1 druid druid 6385 Feb 13 10:42 perfmark-api-0.23.0.jar ``` 3. Configuration in common.runtime.properties ``` druid.extensions.loadList=["druid-orc-extensions", "druid-protobuf-extensions", "druid-parquet-extensions", "opentelemetry-emitter", "prometheus-emitter", "druid-s3-extensions", "druid-kafka-indexing-service", "druid-datasketches", "mysql-metadata-storage", "druid-basic-security", "druid-avro-extensions", "druid-stats", "druid-kafka-extraction-namespace", "druid-lookups-cached-global", "druid-lookups-cached-single", "druid-multi-stage-query"] druid.monitoring.monitors=["org.apache.druid.java.util.metrics.JvmMonitor","org.apache.druid.java.util.metrics.JvmCpuMonitor","org.apache.druid.java.util.metrics.JvmThreadsMonitor"] druid.emitter=composing druid.emitter.composing.emitters=["prometheus","opentelemetry"] ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
