otel4s icon indicating copy to clipboard operation
otel4s copied to clipboard

SDK metrics: native runtime metrics

Open iRevive opened this issue 1 year ago • 3 comments

Runtime metrics:

  • memory usage
  • cpu usage
  • GC stats
  • classloader stats

JVM

We can follow the same path as OpenTelemetry Java does and retrieve metrics using MXBeans.

Scala.js

https://github.com/open-telemetry/opentelemetry-js-contrib/pull/2136/files

Scala Native

https://github.com/scala-native/scala-native/issues/4018

CPU: linux, macos, windows.

iRevive avatar May 05 '24 09:05 iRevive

Scala Native CPU time:

def getProcessCpuTime(): Long = {
  import scala.scalanative.meta.LinktimeInfo
  import scala.scalanative.unsafe._
  
  if (LinktimeInfo.isWindows) {
    import scala.scalanative.windows.MinWinBaseApi.FileTimeStruct
    import scala.scalanative.windows.ProcessThreadsApi
    import scala.scalanative.windows.MinWinBaseApiOps._
    
    val creationTime = stackalloc[FileTimeStruct]()
    val exitTime = stackalloc[FileTimeStruct]()
    val kernelTime = stackalloc[FileTimeStruct]()
    val userTime = stackalloc[FileTimeStruct]()
    val success = ProcessThreadsApi.GetProcessTimes(
      ProcessThreadsApi.GetCurrentProcess(),
      creationTime,
      exitTime,
      kernelTime,
      userTime
    )
    if (success) {
      val totalTime = kernelTime.fileTime + userTime.fileTime
      totalTime.toLong * FileTimeOps.EpochInterval
    } else {
      -1L
    }
  } else {
    import scala.scalanative.posix.sys.resource._
    import scala.scalanative.posix.sys.resourceOps._
    import scala.scalanative.posix.sys.timeOps._
    
    val usage = stackalloc[rusage]()
    if (getrusage(RUSAGE_SELF, usage) == 0) {
      val micros =
        usage.ru_utime.tv_sec * 1000 * 1000 + usage.ru_utime.tv_usec +
          usage.ru_stime.tv_sec * 1000 * 1000 + usage.ru_stime.tv_usec
      micros.toLong * 1000
    } else {
      -1L
    }
  }
}

iRevive avatar Aug 21 '24 07:08 iRevive

Scala Native 0.5.5(6) will provide access to MemoryMXBean. But we need to wait for cats-effect to catch up.

iRevive avatar Sep 01 '24 12:09 iRevive