Add more system metrics (#1609)

Add metrics about logging, file descriptors, process threads and process memory.
Rename scm.http.requests to http.server.requests to match micrometer defaults.
With this change the exposed metrics are now compatible (except for the tomcat metrics) to the official micrometer grafana dashboard (https://grafana.com/grafana/dashboards/4701).
This commit is contained in:
Sebastian Sdorra
2021-03-26 09:28:01 +01:00
committed by GitHub
parent 4cbe6b9873
commit f1fdee3d90
5 changed files with 21 additions and 3 deletions

View File

@@ -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))

View File

@@ -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"
]
}

View File

@@ -117,6 +117,9 @@ dependencies {
implementation libraries.legmanShiro
implementation libraries.legmanMicrometer
// metrics
implementation libraries.micrometerExtra
// lombok
compileOnly libraries.lombok
testCompileOnly libraries.lombok

View File

@@ -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();

View File

@@ -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<MeterRegistry> {
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);
}
}