Last active
September 19, 2024 07:27
-
-
Save greatvovan/a2148bccf2c0e0c2305e8a35e0779dc3 to your computer and use it in GitHub Desktop.
Databricks Scala notebook: OpenTelemetry Exporter - autoconfigure
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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