diff options
Diffstat (limited to 'kamon-system-metrics/src/main/scala/kamon/system/SystemMetrics.scala')
-rw-r--r-- | kamon-system-metrics/src/main/scala/kamon/system/SystemMetrics.scala | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/kamon-system-metrics/src/main/scala/kamon/system/SystemMetrics.scala b/kamon-system-metrics/src/main/scala/kamon/system/SystemMetrics.scala index 62ffdb33..cb3e2695 100644 --- a/kamon-system-metrics/src/main/scala/kamon/system/SystemMetrics.scala +++ b/kamon-system-metrics/src/main/scala/kamon/system/SystemMetrics.scala @@ -16,19 +16,16 @@ package kamon.system import java.lang.management.ManagementFactory - import akka.actor._ import akka.event.Logging import kamon.Kamon import kamon.metric.Metrics import kamon.metrics._ - import scala.collection.JavaConverters._ import scala.concurrent.duration._ object SystemMetrics extends ExtensionId[SystemMetricsExtension] with ExtensionIdProvider { override def lookup(): ExtensionId[_ <: Extension] = SystemMetrics - override def createExtension(system: ExtendedActorSystem): SystemMetricsExtension = new SystemMetricsExtension(system) } @@ -38,14 +35,25 @@ class SystemMetricsExtension(private val system: ExtendedActorSystem) extends Ka val log = Logging(system, classOf[SystemMetricsExtension]) log.info(s"Starting the Kamon(SystemMetrics) extension") + val config = system.settings.config.getConfig("kamon.system-metrics") + val dispatcher = system.dispatchers.lookup(config.getString("dispatcher")) + val sigarFolder = system.settings.config.getString("kamon.sigar.folder") val systemMetricsExtension = Kamon(Metrics)(system) + //System Metrics + system.actorOf(SystemMetricsCollector.props(1 second), "system-metrics-collector") + //JVM Metrics systemMetricsExtension.register(HeapMetrics(Heap), HeapMetrics.Factory) - garbageCollectors.map { gc ⇒ systemMetricsExtension.register(GCMetrics(gc.getName), GCMetrics.Factory(gc)) } + systemMetricsExtension.register(NonHeapMetrics(NonHeap), NonHeapMetrics.Factory) + systemMetricsExtension.register(ClassLoadingMetrics(Classes), ClassLoadingMetrics.Factory) + systemMetricsExtension.register(ThreadMetrics(Threads), ThreadMetrics.Factory) - //System Metrics - system.actorOf(SystemMetricsCollector.props(1 second), "system-metrics-collector") + garbageCollectors.map { gc ⇒ + val gcName = sanitize(gc.getName) + val recorder = systemMetricsExtension.register(GCMetrics(gcName), GCMetrics.Factory(gc)) + system.actorOf(GcMetricsCollector.props(1 second, recorder, GcMetricExtractor(gc)), s"$gcName-collector") + } } object SystemMetricsExtension { @@ -54,11 +62,17 @@ object SystemMetricsExtension { val Network = "network" val Memory = "memory" val Heap = "heap" + val NonHeap = "non-heap" + val Classes = "classes" + val Threads = "thread" val ContextSwitches = "context-switches" + val Disk = "disk" + val LoadAverage = "load-average" - def toKB(value: Long): Long = (value / 1024) - def toMB(value: Long): Long = (value / 1024 / 1024) + def toKB(value: Long): Long = value / 1024 + def toMB(value: Long): Long = value / 1024 / 1024 def toLong(value: Double): Long = math round (value * 100L) + def sanitize(str: String): String = str.replaceAll("""[^\w]""", "-") val garbageCollectors = ManagementFactory.getGarbageCollectorMXBeans.asScala.filter(_.isValid) } |