diff --git a/gradle/changelog/system_metrics.yaml b/gradle/changelog/system_metrics.yaml new file mode 100644 index 0000000000..3f8dfdc278 --- /dev/null +++ b/gradle/changelog/system_metrics.yaml @@ -0,0 +1,2 @@ +- type: added + description: Metrics about logging, file descriptors, process threads and process memory ([#1609](https://github.com/scm-manager/scm-manager/pull/1609)) diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index f94d112bd0..c07a78fb50 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -173,6 +173,7 @@ ext { jerseyClientRuntime: "com.sun.jersey.contribs:jersey-apache-client:${jerseyClientVersion}", // metrics - micrometerCore: "io.micrometer:micrometer-core:${micrometerVersion}" + micrometerCore: "io.micrometer:micrometer-core:${micrometerVersion}", + micrometerExtra: "io.github.mweirauch:micrometer-jvm-extras:0.2.2" ] } diff --git a/scm-webapp/build.gradle b/scm-webapp/build.gradle index 39504b90a2..1e321c8122 100644 --- a/scm-webapp/build.gradle +++ b/scm-webapp/build.gradle @@ -117,6 +117,9 @@ dependencies { implementation libraries.legmanShiro implementation libraries.legmanMicrometer + // metrics + implementation libraries.micrometerExtra + // lombok compileOnly libraries.lombok testCompileOnly libraries.lombok diff --git a/scm-webapp/src/main/java/sonia/scm/metrics/HttpMetricsFilter.java b/scm-webapp/src/main/java/sonia/scm/metrics/HttpMetricsFilter.java index e2189e31f1..830c1936be 100644 --- a/scm-webapp/src/main/java/sonia/scm/metrics/HttpMetricsFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/metrics/HttpMetricsFilter.java @@ -47,7 +47,7 @@ import java.io.IOException; @Priority(Filters.PRIORITY_PRE_BASEURL) public class HttpMetricsFilter extends HttpFilter { - static final String METRIC_DURATION = "scm.http.requests"; + static final String METRIC_DURATION = "http.server.requests"; private final HttpServletRequestTagsProvider tagsProvider = new DefaultHttpServletRequestTagsProvider(); diff --git a/scm-webapp/src/main/java/sonia/scm/metrics/MeterRegistryProvider.java b/scm-webapp/src/main/java/sonia/scm/metrics/MeterRegistryProvider.java index 497ff2b289..144bc4f727 100644 --- a/scm-webapp/src/main/java/sonia/scm/metrics/MeterRegistryProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/metrics/MeterRegistryProvider.java @@ -26,13 +26,18 @@ package sonia.scm.metrics; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import io.github.mweirauch.micrometer.jvm.extras.ProcessMemoryMetrics; +import io.github.mweirauch.micrometer.jvm.extras.ProcessThreadMetrics; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; 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.logging.LogbackMetrics; +import io.micrometer.core.instrument.binder.system.FileDescriptorMetrics; import io.micrometer.core.instrument.binder.system.ProcessorMetrics; +import io.micrometer.core.instrument.binder.system.UptimeMetrics; import io.micrometer.core.instrument.composite.CompositeMeterRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -103,12 +108,19 @@ public class MeterRegistryProvider implements Provider { return staticRegistry; } - @SuppressWarnings("java:S2095") // we can't close JvmGcMetrics, but it should be ok + @SuppressWarnings("java:S2095") // we can't close, but it should be ok private void bindCommonMetrics(MeterRegistry registry) { + // bind all metrics for https://grafana.com/grafana/dashboards/4701 + // expect those for tomcat new ClassLoaderMetrics().bindTo(registry); new JvmMemoryMetrics().bindTo(registry); new JvmGcMetrics().bindTo(registry); new ProcessorMetrics().bindTo(registry); new JvmThreadMetrics().bindTo(registry); + new UptimeMetrics().bindTo(registry); + new FileDescriptorMetrics().bindTo(registry); + new ProcessMemoryMetrics().bindTo(registry); + new ProcessThreadMetrics().bindTo(registry); + new LogbackMetrics().bindTo(registry); } }