Инструментарий Datadog в приложении загрузочного контейнера Spring - класс не найден - PullRequest
0 голосов
/ 17 марта 2020

В настоящее время я запускаю приложение весенней загрузки в виде контейнера в кластер 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"]

Я также настроил переменную среды, чтобы указать HOST IP агента к моему контейнеру через файл развертывания.

Проблема в том, что я получаю исключение, когда этот класс не найден при запуске приложения:

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)

Довольно прямолинейно, мне нужно включить некоторые зависимости в пакет приложения. Но я не смог найти ничего полезного на сайте datadog или в центральном хранилище maven. Включая сам агент или библиотеки API ничего не исправить. Этот класс присутствует в агенте, но по другому пути.

Кто-нибудь знает, какие зависимости должны быть включены в путь к классу приложения, чтобы это исправить?

1 Ответ

0 голосов
/ 19 марта 2020

Spring сканирует ваш путь к классу, который кажется неполным. Возможно, это связано с механизмами загрузки классов Spring. Класс , о котором идет речь существует и, по-видимому, является частью агента.

Возможно, вы используете устаревшую версию агента.

...