Metrics | JVM Runtime
See the semantic conventions for JVM metrics.
Java 8 and newer
The OpenTelemetry runtime-telemetry module provides the JVM runtime metrics for Java 8 and newer. The module uses JMX and JFR (on Java 17+) to produce metrics.
Add the following configuration to the favorite build tool:
Add settings to the build.sbt:
libraryDependencies ++= Seq(
"org.typelevel" %% "otel4s-oteljava" % "1.0.0", // <1>
"io.opentelemetry.instrumentation" % "opentelemetry-runtime-telemetry" % "2.28.1-alpha" // <2>
)
Add directives to the *.scala file:
//> using dep "org.typelevel::otel4s-oteljava:1.0.0" // <1>
//> using dep "io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry:2.28.1-alpha" // <2>
- Add the
otel4s-oteljavalibrary - Add the OpenTelemetry runtime metrics library
The producers can be registered manually:
import cats.effect.{IO, IOApp, Resource, Sync}
import cats.syntax.flatMap._
import cats.syntax.functor._
import io.opentelemetry.api.{OpenTelemetry => JOpenTelemetry}
import io.opentelemetry.instrumentation.runtimetelemetry._
import org.typelevel.otel4s.oteljava.OtelJava
object Service extends IOApp.Simple {
def run: IO[Unit] =
OtelJava
.autoConfigured[IO]()
.flatTap(otel4s => registerRuntimeTelemetry(otel4s.underlying))
.use { otel4s =>
val _ = otel4s
???
}
private def registerRuntimeTelemetry[F[_]: Sync](
openTelemetry: JOpenTelemetry
): Resource[F, Unit] = {
val acquire = Sync[F].delay(RuntimeTelemetry.create(openTelemetry))
Resource.fromAutoCloseable(acquire).void
}
}