aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego <diegolparra@gmail.com>2014-08-13 14:24:48 -0300
committerDiego <diegolparra@gmail.com>2014-08-13 14:24:48 -0300
commit489748e11734ea09fbdc270e01b3c66fff78cd03 (patch)
tree481ceec8f6d35fc6184e80ba91bda1605456aeb8
parent8b4a6a39c0f66033716fa576c65f2db485ae31a8 (diff)
downloadKamon-489748e11734ea09fbdc270e01b3c66fff78cd03.tar.gz
Kamon-489748e11734ea09fbdc270e01b3c66fff78cd03.tar.bz2
Kamon-489748e11734ea09fbdc270e01b3c66fff78cd03.zip
+ log-reporter: include Cpu and Network metrics
-rw-r--r--kamon-log-reporter/src/main/resources/reference.conf12
-rw-r--r--kamon-log-reporter/src/main/scala/kamon/logreporter/LogReporter.scala70
-rw-r--r--kamon-playground/src/main/resources/application.conf4
-rw-r--r--kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala21
4 files changed, 55 insertions, 52 deletions
diff --git a/kamon-log-reporter/src/main/resources/reference.conf b/kamon-log-reporter/src/main/resources/reference.conf
new file mode 100644
index 00000000..dea218eb
--- /dev/null
+++ b/kamon-log-reporter/src/main/resources/reference.conf
@@ -0,0 +1,12 @@
+# ========================================== #
+# Kamon-Log-Reporter Reference Configuration #
+# ========================================== #
+
+kamon {
+ log-reporter {
+
+ # Enable system metrics
+ # In order to not get a ClassNotFoundException, we must register the kamon-sytem-metrics module
+ report-system-metrics = false
+ }
+}
diff --git a/kamon-log-reporter/src/main/scala/kamon/logreporter/LogReporter.scala b/kamon-log-reporter/src/main/scala/kamon/logreporter/LogReporter.scala
index 6599d48d..d58c6330 100644
--- a/kamon-log-reporter/src/main/scala/kamon/logreporter/LogReporter.scala
+++ b/kamon-log-reporter/src/main/scala/kamon/logreporter/LogReporter.scala
@@ -24,10 +24,10 @@ import kamon.metric.Subscriptions.TickMetricSnapshot
import kamon.metric.TraceMetrics.TraceMetricsSnapshot
import kamon.metric.UserMetrics._
import kamon.metric._
-import kamon.metric.instrument.{Counter, Histogram}
+import kamon.metric.instrument.{ Counter, Histogram }
import kamon.metrics.MemoryMetrics.MemoryMetricSnapshot
import kamon.metrics.NetworkMetrics.NetworkMetricSnapshot
-import kamon.metrics.{NetworkMetrics, MemoryMetrics, CPUMetrics}
+import kamon.metrics.{ NetworkMetrics, MemoryMetrics, CPUMetrics }
import kamon.metrics.CPUMetrics.CPUMetricSnapshot
object LogReporter extends ExtensionId[LogReporterExtension] with ExtensionIdProvider {
@@ -45,6 +45,8 @@ class LogReporterExtension(system: ExtendedActorSystem) extends Kamon.Extension
val log = Logging(system, classOf[LogReporterExtension])
log.info("Starting the Kamon(LogReporter) extension")
+ val logReporterConfig = system.settings.config.getConfig("kamon.log-reporter")
+
val subscriber = system.actorOf(Props[LogReporterSubscriber], "kamon-log-reporter")
Kamon(Metrics)(system).subscribe(TraceMetrics, "*", subscriber, permanently = true)
Kamon(Metrics)(system).subscribe(ActorMetrics, "*", subscriber, permanently = true)
@@ -55,9 +57,13 @@ class LogReporterExtension(system: ExtendedActorSystem) extends Kamon.Extension
Kamon(Metrics)(system).subscribe(UserMinMaxCounters, "*", subscriber, permanently = true)
Kamon(Metrics)(system).subscribe(UserGauges, "*", subscriber, permanently = true)
- //Subscribe to all system metrics
- Kamon(Metrics)(system).subscribe(CPUMetrics, "*", subscriber, permanently = true)
- Kamon(Metrics)(system).subscribe(NetworkMetrics, "*", subscriber, permanently = true)
+ // Subscribe to SystemMetrics
+ val includeSystemMetrics = logReporterConfig.getBoolean("report-system-metrics")
+
+ if (includeSystemMetrics) {
+ Kamon(Metrics)(system).subscribe(CPUMetrics, "*", subscriber, permanently = true)
+ Kamon(Metrics)(system).subscribe(NetworkMetrics, "*", subscriber, permanently = true)
+ }
}
@@ -82,8 +88,8 @@ class LogReporterSubscriber extends Actor with ActorLogging {
case (c: UserCounter, s: UserCounterSnapshot) ⇒ counters += (c -> s.counterSnapshot)
case (m: UserMinMaxCounter, s: UserMinMaxCounterSnapshot) ⇒ minMaxCounters += (m -> s.minMaxCounterSnapshot)
case (g: UserGauge, s: UserGaugeSnapshot) ⇒ gauges += (g -> s.gaugeSnapshot)
- case (_, cms:CPUMetricSnapshot) ⇒ logCpuMetrics(cms)
- case (_, nms:NetworkMetricSnapshot) ⇒ logNetworkMetrics(nms)
+ case (_, cms: CPUMetricSnapshot) ⇒ logCpuMetrics(cms)
+ case (_, nms: NetworkMetricSnapshot) ⇒ logNetworkMetrics(nms)
case ignoreEverythingElse ⇒
}
@@ -120,7 +126,7 @@ class LogReporterSubscriber extends Actor with ActorLogging {
ams.processingTime.max, ams.timeInMailbox.max))
}
- def logCpuMetrics(cms: CPUMetricSnapshot):Unit = {
+ def logCpuMetrics(cms: CPUMetricSnapshot): Unit = {
import cms._
log.info(
@@ -129,25 +135,17 @@ class LogReporterSubscriber extends Actor with ActorLogging {
|| |
|| CPU (ALL) |
|| |
- || User (percentage) System (percentage) Wait (percentage) Idle (percentage) |
- || Min: %-3s Min: %-3s Min: %-3s Min: %-3s |
- || 50th Perc: %-3s 50th Perc: %-3s 50th Perc: %-3s 50th Perc: %-3s |
- || 90th Perc: %-3s 90th Perc: %-3s 90th Perc: %-3s 90th Perc: %-3s |
- || 95th Perc: %-3s 95th Perc: %-3s 95th Perc: %-3s 95th Perc: %-3s |
- || 99th Perc: %-3s 9th Perc: %-3s 99th Perc: %-3s 99th Perc: %-3s |
- || 99.9th Perc: %-3s 9.9th Perc: %-3s 99.9th Perc: %-3s 99.9th Perc: %-3s |
- || Max: %-3s Max: %-3s Max: %-3s Max: %-3s |
+ || User (percentage) System (percentage) Wait (percentage) Idle (percentage) |
+ || Min: %-3s Min: %-3s Min: %-3s Min: %-3s |
+ || Avg: %-3s Avg: %-3s Avg: %-3s Avg: %-3s |
+ || Max: %-3s Max: %-3s Max: %-3s Max: %-3s |
|| |
|| |
|+--------------------------------------------------------------------------------------------------+"""
.stripMargin.format(
user.min, system.min, cpuWait.min, idle.min,
- user.percentile(0.50F), system.percentile(0.50F), cpuWait.percentile(0.50F), cpuWait.percentile(0.50F),
- user.percentile(0.90F), system.percentile(0.90F), cpuWait.percentile(0.90F), cpuWait.percentile(0.90F),
- user.percentile(0.95F), system.percentile(0.95F), cpuWait.percentile(0.95F), cpuWait.percentile(0.95F),
- user.percentile(0.99F), system.percentile(0.99F), cpuWait.percentile(0.99F), cpuWait.percentile(0.99F),
- user.percentile(0.999F), system.percentile(0.999F), cpuWait.percentile(0.999F), cpuWait.percentile(0.999F),
- user.max, system.max, cpuWait.max, cpuWait.max))
+ user.average, system.average, cpuWait.average, idle.average,
+ user.max, system.max, cpuWait.max, idle.max))
}
@@ -160,27 +158,18 @@ class LogReporterSubscriber extends Actor with ActorLogging {
|| |
|| Network (ALL) |
|| |
- || Rx-Bytes (KB) Tx-Bytes (KB) Rx-Errors Tx-Errors |
- || Min: %-4s Min: %-4s Total: %-8s Total: %-8s|
- || 50th Perc: %-4s 50th Perc: %-4s |
- || 90th Perc: %-4s 90th Perc: %-4s |
- || 95th Perc: %-4s 95th Perc: %-4s |
- || 99th Perc: %-4s 9th Perc: %-4s |
- || 99.9th Perc: %-4s 99.9th Perc: %-4s |
- || Max: %-4s Max: %-4s |
+ || Rx-Bytes (KB) Tx-Bytes (KB) Rx-Errors Tx-Errors |
+ || Min: %-4s Min: %-4s Total: %-8s Total: %-8s|
+ || Avg: %-4s Avg: %-4s |
+ || Max: %-4s Max: %-4s |
|| |
|+--------------------------------------------------------------------------------------------------+"""
.stripMargin.format(
- rxBytes.min, txBytes.min , rxErrors.total, txErrors.total,
- rxBytes.percentile(0.50F), txBytes.percentile(0.50F),
- rxBytes.percentile(0.90F), txBytes.percentile(0.90F),
- rxBytes.percentile(0.95F), txBytes.percentile(0.95F),
- rxBytes.percentile(0.99F), txBytes.percentile(0.99F),
- rxBytes.percentile(0.999F), txBytes.percentile(0.999F),
+ rxBytes.min, txBytes.min, rxErrors.total, txErrors.total,
+ rxBytes.average, txBytes.average,
rxBytes.max, txBytes.max))
}
-
def logTraceMetrics(name: String, tms: TraceMetricsSnapshot): Unit = {
val traceMetricsData = StringBuilder.newBuilder
@@ -321,10 +310,11 @@ object LogReporterSubscriber {
}
def total: Long = {
- histogram.recordsIterator.foldLeft(0L) { (acc, record) => {
- acc + record.count * record.level
+ histogram.recordsIterator.foldLeft(0L) { (acc, record) ⇒
+ {
+ acc + (record.count * record.level)
+ }
}
}
- }
}
} \ No newline at end of file
diff --git a/kamon-playground/src/main/resources/application.conf b/kamon-playground/src/main/resources/application.conf
index bac3c97e..5d96c7f6 100644
--- a/kamon-playground/src/main/resources/application.conf
+++ b/kamon-playground/src/main/resources/application.conf
@@ -1,7 +1,7 @@
akka {
loglevel = INFO
- extensions = ["kamon.logreporter.LogReporter"]
+ extensions = ["kamon.logreporter.LogReporter", "kamon.system.SystemMetrics"]
actor {
debug {
@@ -86,7 +86,7 @@ kamon {
}
weaver {
- showWeaveInfo = on
+ showWeaveInfo = off
verbose = off
debug = off
showWarn = off
diff --git a/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala b/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala
index a5a2f411..31963487 100644
--- a/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala
+++ b/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala
@@ -42,8 +42,7 @@ class SystemMetricsCollector(collectInterval: FiniteDuration) extends Actor with
val networkRecorder = systemMetricsExtension.register(NetworkMetrics(Network), NetworkMetrics.Factory)
def receive: Receive = {
- case Collect ⇒ collectMetrics()
- case anything ⇒
+ case Collect ⇒ collectMetrics()
}
override def postStop() = collectSchedule.cancel()
@@ -56,18 +55,24 @@ class SystemMetricsCollector(collectInterval: FiniteDuration) extends Actor with
}
private def recordCpu(cpur: CPUMetricRecorder) = {
- cpur.user.record(toLong(cpu.getUser))
- cpur.system.record(toLong(cpu.getSys))
- cpur.cpuWait.record(toLong(cpu.getWait()))
- cpur.idle.record(toLong(cpu.getIdle))
+ val cpuPerc = sigar.getCpuPerc
+ cpur.user.record(toLong(cpuPerc.getUser))
+ cpur.system.record(toLong(cpuPerc.getSys))
+ cpur.cpuWait.record(toLong(cpuPerc.getWait))
+ cpur.idle.record(toLong(cpuPerc.getIdle))
}
private def recordProcessCpu(pcpur: ProcessCPUMetricsRecorder) = {
+ val procCpu = sigar.getProcCpu(pid)
+
pcpur.user.record(procCpu.getUser)
pcpur.system.record(procCpu.getSys)
}
private def recordMemory(mr: MemoryMetricRecorder) = {
+ val mem = sigar.getMem
+ val swap = sigar.getSwap
+
mr.used.record(toMB(mem.getUsed))
mr.free.record(toMB(mem.getFree))
mr.swapUsed.record(toMB(swap.getUsed))
@@ -106,10 +111,6 @@ trait SigarExtensionProvider {
lazy val sigar = SigarHolder.instance()
def pid = sigar.getPid
- def procCpu = sigar.getProcCpu(pid)
- def cpu = sigar.getCpuPerc
- def mem = sigar.getMem
- def swap = sigar.getSwap
val interfaces: Set[String] = sigar.getNetInterfaceList.toSet
}