solution: jvm monitoring
This commit is contained in:
@@ -29,6 +29,7 @@ class MonitoringConfig(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var enableJvm: Boolean = true
|
||||||
|
|
||||||
data class PrometheusConfig(
|
data class PrometheusConfig(
|
||||||
val enabled: Boolean,
|
val enabled: Boolean,
|
||||||
|
|||||||
@@ -43,7 +43,9 @@ class MonitoringConfigReader: YamlConfigReader(), ConfigReader<MonitoringConfig>
|
|||||||
return MonitoringConfig.disabled()
|
return MonitoringConfig.disabled()
|
||||||
}
|
}
|
||||||
val prometheus = readPrometheus(getMapping(input, "prometheus"))
|
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 {
|
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.emeraldpay.dshackle.config.MonitoringConfig
|
||||||
import io.micrometer.core.instrument.Meter
|
import io.micrometer.core.instrument.Meter
|
||||||
import io.micrometer.core.instrument.Metrics
|
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 io.micrometer.core.instrument.config.MeterFilter
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
@@ -49,10 +54,22 @@ class MonitoringSetup(
|
|||||||
Metrics.globalRegistry.add(prometheusRegistry)
|
Metrics.globalRegistry.add(prometheusRegistry)
|
||||||
Metrics.globalRegistry.config().meterFilter(object: MeterFilter {
|
Metrics.globalRegistry.config().meterFilter(object: MeterFilter {
|
||||||
override fun map(id: Meter.Id): Meter.Id {
|
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) {
|
if (monitoringConfig.prometheus.enabled) {
|
||||||
// use standard JVM server with a single thread blocking processing
|
// use standard JVM server with a single thread blocking processing
|
||||||
// prometheus is a single thread periodic call, no reason to setup anything complex
|
// prometheus is a single thread periodic call, no reason to setup anything complex
|
||||||
|
|||||||
Reference in New Issue
Block a user