This commit is contained in:
@@ -5,11 +5,20 @@ plugins {
|
||||
}
|
||||
|
||||
configurations {
|
||||
|
||||
bundle {
|
||||
canBeResolved = false
|
||||
canBeConsumed = false
|
||||
transitive = true
|
||||
}
|
||||
|
||||
filteredBundle {
|
||||
canBeResolved = true
|
||||
canBeConsumed = false
|
||||
transitive = true
|
||||
|
||||
extendsFrom bundle
|
||||
|
||||
resolutionStrategy {
|
||||
dependencies {
|
||||
exclude group: 'org.slf4j', module: 'slf4j-api'
|
||||
@@ -19,27 +28,39 @@ configurations {
|
||||
}
|
||||
}
|
||||
|
||||
implementation {
|
||||
extendsFrom bundle
|
||||
}
|
||||
|
||||
release {
|
||||
transitive = false
|
||||
canBeConsumed = true
|
||||
canBeResolved = true
|
||||
}
|
||||
|
||||
compileOnly {
|
||||
extendsFrom bundle
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
bundle catalog.opentelemetry.netty['4']['1']
|
||||
compileOnly project(':rbcs-common')
|
||||
compileOnly project(':rbcs-api')
|
||||
|
||||
compileOnly catalog.netty.transport
|
||||
compileOnly catalog.slf4j.api
|
||||
compileOnly catalog.kotlin.stdlib.jdk8
|
||||
compileOnly catalog.logback.core
|
||||
compileOnly catalog.logback.classic
|
||||
|
||||
bundle catalog.opentelemetry.netty.'4'.'1'
|
||||
bundle catalog.opentelemetry.sdk.extension.autoconfigure
|
||||
bundle catalog.opentelemetry.logback.appender['1']['0']
|
||||
bundle catalog.opentelemetry.logback.appender.'1'.'0'
|
||||
bundle catalog.opentelemetry.logback.mdc.'1'.'0'
|
||||
bundle catalog.opentelemetry.extension.trace.propagators
|
||||
bundle catalog.opentelemetry.exporter.otlp
|
||||
bundle catalog.opentelemetry.runtime.telemetry
|
||||
}
|
||||
|
||||
Provider<Tar> bundleTask = tasks.register("bundle", Tar) {
|
||||
from(configurations.bundle)
|
||||
from(tasks.named(JavaPlugin.JAR_TASK_NAME))
|
||||
from(configurations.filteredBundle)
|
||||
group = BasePlugin.BUILD_GROUP
|
||||
}
|
||||
|
||||
|
||||
20
rbcs-server-otel/src/main/java/module-info.java
Normal file
20
rbcs-server-otel/src/main/java/module-info.java
Normal file
@@ -0,0 +1,20 @@
|
||||
module net.woggioni.rbcs.server.otel {
|
||||
requires net.woggioni.rbcs.common;
|
||||
requires kotlin.stdlib;
|
||||
requires io.netty.transport;
|
||||
requires io.netty.common;
|
||||
requires io.netty.buffer;
|
||||
requires org.slf4j;
|
||||
|
||||
requires ch.qos.logback.core;
|
||||
requires ch.qos.logback.classic;
|
||||
requires io.opentelemetry.api;
|
||||
requires io.opentelemetry.sdk.autoconfigure;
|
||||
requires io.opentelemetry.instrumentation.runtime_telemetry;
|
||||
requires io.opentelemetry.instrumentation.netty_4_1;
|
||||
requires io.opentelemetry.instrumentation.logback_appender_1_0;
|
||||
requires io.opentelemetry.extension.trace.propagation;
|
||||
requires net.woggioni.rbcs.api;
|
||||
|
||||
provides net.woggioni.rbcs.api.TelemetryController with net.woggioni.rbcs.server.otel.OtelController;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package net.woggioni.rbcs.server.otel
|
||||
|
||||
import io.netty.channel.ChannelHandler
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry
|
||||
import io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender
|
||||
import io.opentelemetry.instrumentation.netty.v4_1.NettyServerTelemetry
|
||||
import io.opentelemetry.instrumentation.runtimetelemetry.RuntimeTelemetry
|
||||
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk
|
||||
import net.woggioni.rbcs.api.TelemetryController
|
||||
import net.woggioni.rbcs.common.createLogger
|
||||
import net.woggioni.rbcs.common.info
|
||||
|
||||
class OtelController : TelemetryController {
|
||||
|
||||
private val log = createLogger<OtelController>()
|
||||
|
||||
private val appenderAvailable: Boolean by lazy {
|
||||
runCatching {
|
||||
Class.forName("io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender")
|
||||
}.fold(
|
||||
onSuccess = { true },
|
||||
onFailure = {
|
||||
log.info { "OpenTelemetry logback appender not on classpath" }
|
||||
false
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
override fun initialize() {
|
||||
log.info { "Initializing OpenTelemetry SDK with auto-configuration" }
|
||||
|
||||
val sdk = AutoConfiguredOpenTelemetrySdk.builder()
|
||||
.setResultAsGlobal()
|
||||
.build()
|
||||
.openTelemetrySdk
|
||||
RuntimeTelemetry.create(sdk)
|
||||
|
||||
if (appenderAvailable) {
|
||||
runCatching {
|
||||
OpenTelemetryAppender.install(sdk)
|
||||
log.info { "OpenTelemetry logback appender installed" }
|
||||
}.onFailure { ex ->
|
||||
val msg = ex.localizedMessage ?: ex.javaClass.name
|
||||
log.info { "Failed to install OpenTelemetry logback appender: $msg" }
|
||||
}
|
||||
}
|
||||
log.info { "OpenTelemetry SDK initialized successfully" }
|
||||
}
|
||||
|
||||
override fun createHandler(): ChannelHandler {
|
||||
return NettyServerTelemetry.create(GlobalOpenTelemetry.get()).createCombinedHandler()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user