solution: jvm monitoring
This commit is contained in:
@@ -29,6 +29,7 @@ class MonitoringConfig(
|
||||
}
|
||||
}
|
||||
|
||||
var enableJvm: Boolean = true
|
||||
|
||||
data class PrometheusConfig(
|
||||
val enabled: Boolean,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user