Skip to content

Instantly share code, notes, and snippets.

@greatvovan
Last active September 19, 2024 07:27
Show Gist options
  • Save greatvovan/a2148bccf2c0e0c2305e8a35e0779dc3 to your computer and use it in GitHub Desktop.
Save greatvovan/a2148bccf2c0e0c2305e8a35e0779dc3 to your computer and use it in GitHub Desktop.
Databricks Scala notebook: OpenTelemetry Exporter - autoconfigure
val aiConnStr = "..."
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Level
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory
import org.apache.logging.log4j.core.config.Configurator
import io.opentelemetry.instrumentation.log4j.appender.v2_17.OpenTelemetryAppender
import io.opentelemetry.api.OpenTelemetry
import io.opentelemetry.api.common.Attributes
import io.opentelemetry.api.common.AttributeKey
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder
import com.azure.monitor.opentelemetry.exporter.AzureMonitorExporterBuilder
val configBuilder = ConfigurationBuilderFactory.newConfigurationBuilder()
val configuration = configBuilder
.add(
configBuilder
.newAppender("Console", "CONSOLE")
)
.add(
configBuilder
.newAppender("Otel", "OpenTelemetry")
)
.add(
configBuilder
.newRootLogger(Level.INFO)
.add(configBuilder.newAppenderRef("Console"))
.add(configBuilder.newAppenderRef("Otel"))
)
.build(false)
Configurator.initialize(configuration)
val sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder()
new AzureMonitorExporterBuilder()
.connectionString(aiConnStr)
.install(sdkBuilder)
val openTelemetry = sdkBuilder.build().getOpenTelemetrySdk()
OpenTelemetryAppender.install(openTelemetry)
println("Auto-configured")
val logger = LogManager.getLogger()
logger.info("ScalaEA Log outside span")
println("log sent")
val attributes = Attributes.of[java.lang.String, java.lang.Long](
AttributeKey.stringKey("foo"), "bar",
AttributeKey.longKey("code"), 42L
)
val tracer = openTelemetry.getTracer("my-notebook")
val span = tracer.spanBuilder("My-span-ScalaEA").startSpan()
val scope = span.makeCurrent()
try {
span.addEvent("ScalaEA span event", attributes)
logger.info("ScalaEA Log from span")
Thread.sleep(1000L)
}
finally {
scope.close()
span.end()
}
println("trace sent")
val meter = openTelemetry.getMeter("my-notebook")
val gauge = meter.gaugeBuilder("my-gauge-ScalaEA").build()
gauge.set(111, attributes)
println("metric sent")
openTelemetry.shutdown()
println("Done")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment