getsentry / getsentry/sentry-java

Ktor 3 Sentry OpenTelemetry Agentless ClassNotFoundException

Ouverte
#4,345 5 commentaires 1 réaction 0 personnes assignées Voir sur GitHub
Bug Java Spans
Langage dominant
Kotlin
Étoiles
1.4k
Forks
478
Merge moyen
2 j 23 h
PR mergées (30 j)
67

Description

### Environment

SaaS ([https://sentry.io/]())

### Steps to Reproduce

Potentially relevant used plugin versions:

Ktor Server version `3.1.2`
Kotlin `2.1.20`
Sentry jvm gradle plugin `5.3.0`

I added the following to my `dependencies { .. }` block in my `build.gradle.kts`

```
implementation(platform("io.sentry:sentry-bom:8.8.0"))
implementation("io.sentry:sentry")
implementation("io.sentry:sentry-opentelemetry-agentless")

implementation("io.opentelemetry.instrumentation:opentelemetry-ktor-3.0:2.15.0-alpha")
```

I start sentry in my Ktor application and then configure the ktor 3 plugin in the following way:

```
fun Application.configureMonitoring() {

install(KtorServerTelemetry) {
val openTelemetry = createOpenTelemetry()
setOpenTelemetry(openTelemetry)

attributesExtractor {
onStart {
attributes.put("start-time", Clock.System.now().toEpochMilliseconds())
}
onEnd {
attributes.put("end-time", Clock.System.now().toEpochMilliseconds())
}
}
}
}

private fun createOpenTelemetry(): OpenTelemetry =
AutoConfiguredOpenTelemetrySdk.builder().addResourceCustomizer { oldResource, _ ->
oldResource.toBuilder()
.putAll(oldResource.attributes)
.put(ServiceAttributes.SERVICE_NAME, "my-app-backend")
.build()
}
.build()
.openTelemetrySdk
```

This was what I came up with based on this [Ktor opentelemetry example]() and the [Sentry Agentless Opentelemetry docs]().

### Expected Result

The app starts and reports the traces to Sentry cloud.

### Actual Result

My application doesn't come up, I see the following crash in my logs:

```
java.lang.ClassNotFoundException: io.opentelemetry.api.incubator.events.EventLoggerProvider
at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk.builder(AutoConfiguredOpenTelemetrySdk.java:44)
at io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk.initialize(AutoConfiguredOpenTelemetrySdk.java:36)
at myktorapp.com.plugins.MonitoringKt.configureMonitoring$lambda$3(Monitoring.kt:28)
at io.ktor.server.application.CreatePluginUtilsKt.createRouteScopedPluginInstance(CreatePluginUtils.kt:277)
at io.ktor.server.application.CreatePluginUtilsKt.access$createRouteScopedPluginInstance(CreatePluginUtils.kt:1)
at io.ktor.server.application.RouteScopedPluginImpl.install(CreatePluginUtils.kt:182)
at io.ktor.server.application.RouteScopedPluginImpl.install(CreatePluginUtils.kt:164)
at io.ktor.server.application.ApplicationPluginKt.install(ApplicationPlugin.kt:121)
at myktorapp.com.plugins.MonitoringKt.configureMonitoring(Monitoring.kt:26)
at myktorapp.com.ApplicationKt.module(Application.kt:51)
at myktorapp.com.ApplicationKt.module$default(Application.kt:43)
at myktorapp.com.ApplicationKt.initialize(Application.kt:30)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.lang.reflect.Method.invoke(Method.java:578)
at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97)
at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Static.call(CallerImpl.kt:106)
at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflection(KCallableImpl.kt:207)
at kotlin.reflect.jvm.internal.KCallableImpl.callBy(KCallableImpl.kt:112)
at io.ktor.server.engine.internal.CallableUtilsKt.callFunctionWithInjection(CallableUtils.kt:127)
at io.ktor.server.engine.internal.CallableUtilsKt.executeModuleFunction(CallableUtils.kt:40)
at io.ktor.server.engine.EmbeddedServer.launchModuleByName$lambda$32(EmbeddedServerJvm.kt:422)
at io.ktor.server.engine.EmbeddedServer.avoidingDoubleStartupFor(EmbeddedServerJvm.kt:446)
at io.ktor.server.engine.EmbeddedServer.launchModuleByName(EmbeddedServerJvm.kt:421)
at io.ktor.server.engine.EmbeddedServer.dynamicModule$lambda$26(EmbeddedServerJvm.kt:381)
at io.ktor.server.engine.EmbeddedServer.instantiateAndConfigureApplication$lambda$25(EmbeddedServerJvm.kt:371)
at io.ktor.server.engine.EmbeddedServer.avoidingDoubleStartup(EmbeddedServerJvm.kt:428)
at io.ktor.server.engine.EmbeddedServer.instantiateAndConfigureApplication(EmbeddedServerJvm.kt:370)
at io.ktor.server.engine.EmbeddedServer.createApplication(EmbeddedServerJvm.kt:171)
at io.ktor.server.engine.EmbeddedServer.start(EmbeddedServerJvm.kt:301)
at io.ktor.server.netty.EngineMain.main(EngineMain.kt:25)
at myktorapp.com.ApplicationKt.main(Application.kt:17)
java.lang.NoClassDefFoundError: io/opentelemetry/api/incubator/events/EventLoggerProvider
at io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk.builder(AutoConfiguredOpenTelemetrySdk.java:44)
at io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk.initialize(AutoConfiguredOpenTelemetrySdk.java:36)
at myktorapp.com.plugins.MonitoringKt.configureMonitoring$lambda$3(Monitoring.kt:28)
at io.ktor.server.application.CreatePluginUtilsKt.createRouteScopedPluginInstance(CreatePluginUtils.kt:277)
at io.ktor.server.application.CreatePluginUtilsKt.access$createRouteScopedPluginInstance(CreatePluginUtils.kt:1)
at io.ktor.server.application.RouteScopedPluginImpl.install(CreatePluginUtils.kt:182)
at io.ktor.server.application.RouteScopedPluginImpl.install(CreatePluginUtils.kt:164)
at io.ktor.server.application.ApplicationPluginKt.install(ApplicationPlugin.kt:121)
at myktorapp.com.plugins.MonitoringKt.configureMonitoring(Monitoring.kt:26)
at myktorapp.com.ApplicationKt.module(Application.kt:51)
at myktorapp.com.ApplicationKt.module$default(Application.kt:43)
at myktorapp.com.ApplicationKt.initialize(Application.kt:30)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.lang.reflect.Method.invoke(Method.java:578)
at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97)
at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Static.call(CallerImpl.kt:106)
at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflection(KCallableImpl.kt:207)
at kotlin.reflect.jvm.internal.KCallableImpl.callBy(KCallableImpl.kt:112)
at io.ktor.server.engine.internal.CallableUtilsKt.callFunctionWithInjection(CallableUtils.kt:127)
at io.ktor.server.engine.internal.CallableUtilsKt.executeModuleFunction(CallableUtils.kt:40)
at io.ktor.server.engine.EmbeddedServer.launchModuleByName$lambda$32(EmbeddedServerJvm.kt:422)
at io.ktor.server.engine.EmbeddedServer.avoidingDoubleStartupFor(EmbeddedServerJvm.kt:446)
at io.ktor.server.engine.EmbeddedServer.launchModuleByName(EmbeddedServerJvm.kt:421)
at io.ktor.server.engine.EmbeddedServer.dynamicModule$lambda$26(EmbeddedServerJvm.kt:381)
at io.ktor.server.engine.EmbeddedServer.instantiateAndConfigureApplication$lambda$25(EmbeddedServerJvm.kt:371)
at io.ktor.server.engine.EmbeddedServer.avoidingDoubleStartup(EmbeddedServerJvm.kt:428)
at io.ktor.server.engine.EmbeddedServer.instantiateAndConfigureApplication(EmbeddedServerJvm.kt:370)
at io.ktor.server.engine.EmbeddedServer.createApplication(EmbeddedServerJvm.kt:171)
at io.ktor.server.engine.EmbeddedServer.start(EmbeddedServerJvm.kt:301)
at io.ktor.server.netty.EngineMain.main(EngineMain.kt:25)
at myktorapp.com.ApplicationKt.main(Application.kt:17)
```

### Product Area

Performance

### Link

*No response*

### DSN

*No response*

### Version

*No response*

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.