Java Spring引导容器应用程序上的Datadog检测-未找到类

Java Spring引导容器应用程序上的Datadog检测-未找到类,java,kubernetes,instrumentation,datadog,Java,Kubernetes,Instrumentation,Datadog,我目前正在将spring引导应用程序作为容器运行到kubernetes集群中。 Datadog代理正在群集上作为容器运行 在运行应用程序之前,我已修改容器映像构建以包括datadog代理: CMD ["/bin/sh","-c","java -javaagent:dd-java-agent.jar -Ddd.trace.config=datadog.properties -Dlogging.config=/logback.xml -jar service.jar"] 我还设置了环境变量,通过部

我目前正在将spring引导应用程序作为容器运行到kubernetes集群中。 Datadog代理正在群集上作为容器运行

在运行应用程序之前,我已修改容器映像构建以包括datadog代理:

CMD ["/bin/sh","-c","java -javaagent:dd-java-agent.jar -Ddd.trace.config=datadog.properties -Dlogging.config=/logback.xml -jar service.jar"]
我还设置了环境变量,通过部署文件将代理的主机IP指示给我的容器

现在的问题是,当应用程序启动时,我将遇到此类not found异常:

java.lang.NoClassDefFoundError: datadog/trace/instrumentation/springscheduling/SpringSchedulingInstrumentation
    at java.lang.Class.getDeclaringClass0(Native Method)
    at java.lang.Class.getDeclaringClass(Class.java:1235)
    at java.lang.Class.getEnclosingClass(Class.java:1277)
    at org.springframework.core.annotation.AnnotationsScanner.processClassHierarchy(AnnotationsScanner.java:233)
    at org.springframework.core.annotation.AnnotationsScanner.processClassHierarchy(AnnotationsScanner.java:194)
    at org.springframework.core.annotation.AnnotationsScanner.processClass(AnnotationsScanner.java:128)
    at org.springframework.core.annotation.AnnotationsScanner.process(AnnotationsScanner.java:107)
    at org.springframework.core.annotation.AnnotationsScanner.scan(AnnotationsScanner.java:97)
    at org.springframework.core.annotation.AnnotationsScanner.scan(AnnotationsScanner.java:78)
    at org.springframework.core.annotation.TypeMappedAnnotations.scan(TypeMappedAnnotations.java:242)
    at org.springframework.core.annotation.TypeMappedAnnotations.get(TypeMappedAnnotations.java:149)
    at org.springframework.core.annotation.TypeMappedAnnotations.get(TypeMappedAnnotations.java:131)
    at org.springframework.core.annotation.AnnotationUtils.findAnnotation(AnnotationUtils.java:581)
    at org.springframework.cloud.sleuth.DefaultSpanNamer.annotation(DefaultSpanNamer.java:71)
    at org.springframework.cloud.sleuth.DefaultSpanNamer.name(DefaultSpanNamer.java:58)
    at org.springframework.cloud.sleuth.instrument.async.TraceRunnable.<init>(TraceRunnable.java:59)
    at org.springframework.cloud.sleuth.instrument.async.TraceRunnable.<init>(TraceRunnable.java:51)
    at org.springframework.cloud.sleuth.instrument.async.LazyTraceThreadPoolTaskScheduler.scheduleWithFixedDelay(LazyTraceThreadPoolTaskScheduler.java:265)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.cloud.sleuth.instrument.async.ExecutorMethodInterceptor.invoke(ExecutorBeanPostProcessor.java:328)
java.lang.NoClassDefFoundError:datadog/trace/instrumentation/springscheduling/SpringSchedulingInstrumentation
位于java.lang.Class.getDeclaringClass0(本机方法)
位于java.lang.Class.getDeclaringClass(Class.java:1235)
位于java.lang.Class.GetEnclosuringClass(Class.java:1277)
位于org.springframework.core.annotation.AnnotationsScanner.processClassHierarchy(AnnotationsScanner.java:233)
位于org.springframework.core.annotation.AnnotationsScanner.processClassHierarchy(AnnotationsScanner.java:194)
位于org.springframework.core.annotation.AnnotationsScanner.processClass(AnnotationsScanner.java:128)
位于org.springframework.core.annotation.annotationsCanner.process(annotationsCanner.java:107)
位于org.springframework.core.annotation.annotationsCanner.scan(annotationsCanner.java:97)
位于org.springframework.core.annotation.annotationsCanner.scan(annotationsCanner.java:78)
位于org.springframework.core.annotation.TypeMappedAnnotations.scan(TypeMappedAnnotations.java:242)
位于org.springframework.core.annotation.TypeMappedAnnotations.get(TypeMappedAnnotations.java:149)
位于org.springframework.core.annotation.TypeMappedAnnotations.get(TypeMappedAnnotations.java:131)
位于org.springframework.core.annotation.AnnotationUtils.findAnnotation(AnnotationUtils.java:581)
位于org.springframework.cloud.sleuth.DefaultSpanNamer.annotation(DefaultSpanNamer.java:71)
位于org.springframework.cloud.sleuth.DefaultSpanNamer.name(DefaultSpanNamer.java:58)
位于org.springframework.cloud.sleuth.instrument.async.TraceRunnable.(TraceRunnable.java:59)
位于org.springframework.cloud.sleuth.instrument.async.TraceRunnable.(TraceRunnable.java:51)
位于org.springframework.cloud.sleuth.instrument.async.lazytracethreadpoolstaskscheduler.scheduleWithFixedDelay(lazytracethreadpoolstaskscheduler.java:265)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.springframework.cloud.sleuth.instrument.async.ExecutorMethodInterceptor.invoke(ExecutorBeanPostProcessor.java:328)
非常严格地说,我需要在应用程序包中包含一些依赖项。但我在datadog网站和maven中央存储库上都找不到任何有用的东西。 包括代理本身或api库都无法修复任何问题。此类位于代理上,但位于不同的路径下


有人知道应该在应用程序的类路径中包含哪些依赖项来解决这个问题吗?

Spring正在扫描您的类路径,它似乎不完整。也许这与Spring的类加载机制有关。代理存在并且似乎是代理的一部分


您可能正在使用过时的代理版本。

Spring正在扫描您的类路径,该类路径似乎不完整。也许这与Spring的类加载机制有关。代理存在并且似乎是代理的一部分


您可能正在使用过时的代理版本。

不幸的是,没有。我使用代理的多个版本进行了测试,无论在0.43.0之后使用哪个版本,它都会失败(他们在0.44.0中引入了此工具,实际上最新版本是0.46.0)。因此,现在我降级到0.43.0,并将尝试找出light demo应用程序的问题来源。在本例中,这是代理中的一个bug。他们可能会将一个类注入到Spring中,希望它是可加载的,但它最终会进入另一个类加载程序,从而导致这个异常。当解压他们的代理时,我可以在一个完全不同的包路径中找到这个类。我将为他们提供一个简单的应用程序,由于类路径错误而无法启动,当它被修复或者他们发现哪个依赖项引发了这个问题时,我会在这里发布。感谢您的帮助Rafael.Tine已经通过,不幸的是,我无法用更新的应用程序代码重现这个问题。除了通常的功能代码更新外,我还重构了Kubernetes自动配置发现类的配置方式,因为正是这个功能使用了调度程序,所以可能与此相关。我现在没有太多的时间来调查和确保这一点,但我猜测,在某些配置下,spring cloud kubernetes功能可能会检测代码,这可能会与代码的datadog检测产生冲突。但是,这只是一个值得考虑的问题。我使用代理的多个版本进行了测试,无论在0.43.0之后使用哪个版本,它都会失败(他们在0.44.0中引入了此工具,实际上最新版本是0.46.0)。因此,现在我降级到0.43.0,并将尝试找出light demo应用程序的问题来源。在本例中,这是代理中的一个bug。他们可能会将一个类注入到Spring中,希望它是可加载的,但它最终会进入另一个类加载程序,从而导致这个异常。当解压他们的代理时,我可以在一个完全不同的包路径中找到这个类。我将为他们提供一个简单的应用程序,由于类路径错误而无法启动,当它被修复或者他们发现哪个依赖项引发了这个问题时,我会在这里发布。谢谢你的帮助Rafael。Tine已经去世了,不幸的是我无法重现这个问题