solution: jvm monitoring

This commit is contained in:
Igor Artamonov
2021-02-15 23:39:09 -05:00
parent a14a0e6585
commit a97b599908
3 changed files with 22 additions and 2 deletions

View File

@@ -29,6 +29,7 @@ class MonitoringConfig(
}
}
var enableJvm: Boolean = true
data class PrometheusConfig(
val enabled: Boolean,

View File

@@ -43,7 +43,9 @@ class MonitoringConfigReader: YamlConfigReader(), ConfigReader<MonitoringConfig>
return MonitoringConfig.disabled()
}
val prometheus = readPrometheus(getMapping(input, "prometheus"))
return MonitoringConfig(enabled, prometheus)
return MonitoringConfig(enabled, prometheus).also { conf ->
getValueAsBool(input, "enableJVM")?.let { conf.enableJvm = it }
}
}
private fun readPrometheus(input: MappingNode?): MonitoringConfig.PrometheusConfig {

View File

@@ -20,6 +20,11 @@ import io.emeraldpay.dshackle.config.MainConfig
import io.emeraldpay.dshackle.config.MonitoringConfig
import io.micrometer.core.instrument.Meter
import io.micrometer.core.instrument.Metrics
import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics
import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics
import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics
import io.micrometer.core.instrument.binder.system.ProcessorMetrics
import io.micrometer.core.instrument.config.MeterFilter
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
@@ -49,10 +54,22 @@ class MonitoringSetup(
Metrics.globalRegistry.add(prometheusRegistry)
Metrics.globalRegistry.config().meterFilter(object: MeterFilter {
override fun map(id: Meter.Id): Meter.Id {
return id.withName("dshackle." + id.name)
if (id.name.startsWith("jvm") || id.name.startsWith("process") || id.name.startsWith("system")) {
return id
} else {
return id.withName("dshackle." + id.name)
}
}
})
if (monitoringConfig.enableJvm) {
ClassLoaderMetrics().bindTo(Metrics.globalRegistry)
JvmMemoryMetrics().bindTo(Metrics.globalRegistry)
JvmGcMetrics().bindTo(Metrics.globalRegistry)
ProcessorMetrics().bindTo(Metrics.globalRegistry)
JvmThreadMetrics().bindTo(Metrics.globalRegistry)
}
if (monitoringConfig.prometheus.enabled) {
// use standard JVM server with a single thread blocking processing
// prometheus is a single thread periodic call, no reason to setup anything complex