aboutsummaryrefslogtreecommitdiff
path: root/kamon-system-metrics/src/main/scala/kamon/system/SystemMetrics.scala
diff options
context:
space:
mode:
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.scala30
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)
}