sandbox: Report JVM metrics. (#5217)

CHANGELOG_BEGIN
CHANGELOG_END
This commit is contained in:
Samir Talwar 2020-03-26 19:31:59 +01:00 committed by GitHub
parent 17d82bf076
commit 5c913106fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 5 deletions

View File

@ -57,6 +57,7 @@ compile_deps = [
"@maven//:io_dropwizard_metrics_metrics_core",
"@maven//:io_dropwizard_metrics_metrics_graphite",
"@maven//:io_dropwizard_metrics_metrics_jmx",
"@maven//:io_dropwizard_metrics_metrics_jvm",
"@maven//:io_grpc_grpc_netty",
"@maven//:io_grpc_grpc_services",
"@maven//:io_netty_netty_common",

View File

@ -9,6 +9,13 @@ import java.util.concurrent.TimeUnit
import com.codahale.metrics.Slf4jReporter.LoggingLevel
import com.codahale.metrics.graphite.{Graphite, GraphiteReporter}
import com.codahale.metrics.jmx.JmxReporter
import com.codahale.metrics.jvm.{
ClassLoadingGaugeSet,
GarbageCollectorMetricSet,
JvmAttributeGaugeSet,
MemoryUsageGaugeSet,
ThreadStatesGaugeSet
}
import com.codahale.metrics.{
ConsoleReporter,
CsvReporter,
@ -22,11 +29,15 @@ import com.digitalasset.resources.{Resource, ResourceOwner}
import scala.concurrent.{ExecutionContext, Future}
/** Manages metrics and reporters.
*
* Creates the [[MetricRegistry]].
*
* All out-of-the-box JVM metrics are added to the registry.
*
* Creates at least two reporters:
*
* - A JmxReporter, which exposes metrics over JMX
* - An Slf4jReporter, which logs metrics on shutdown at DEBUG level
* - a [[JmxReporter]], which exposes metrics over JMX, and
* - an [[Slf4jReporter]], which logs metrics on shutdown at DEBUG level.
*
* Also optionally creates the reporter specified in the constructor.
*
@ -40,6 +51,11 @@ final class MetricsReporting(
) extends ResourceOwner[MetricRegistry] {
def acquire()(implicit executionContext: ExecutionContext): Resource[MetricRegistry] = {
val registry = new MetricRegistry
registry.registerAll("jvm.class_loader", new ClassLoadingGaugeSet)
registry.registerAll("jvm.garbage_collector", new GarbageCollectorMetricSet)
registry.registerAll("jvm.attributes", new JvmAttributeGaugeSet)
registry.registerAll("jvm.memory_usage", new MemoryUsageGaugeSet)
registry.registerAll("jvm.thread_states", new ThreadStatesGaugeSet)
for {
slf4JReporter <- acquire(newSlf4jReporter(registry))
_ <- acquire(newJmxReporter(registry))
@ -51,9 +67,7 @@ final class MetricsReporting(
// Trigger a report to the SLF4J logger on shutdown.
_ <- Resource(Future.successful(slf4JReporter))(reporter =>
Future.successful(reporter.report()))
} yield {
registry
}
} yield registry
}
private def newReporter(reporter: MetricsReporter, registry: MetricRegistry)(