From b7b7ddfc583dc9dded15082e12f11d0e3139d4b5 Mon Sep 17 00:00:00 2001 From: songxiaosheng <81170548+songxiaosheng@users.noreply.github.com> Date: Tue, 10 Jan 2023 11:35:39 +0800 Subject: [PATCH] jvm meter add application name label (#11255) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix MetericsService resource location bug * :art:为jvm指标增加dubbo应用名称 * :art: jvm meter add application name label * fix unit test failure --- .../dubbo/metrics/AbstractMetricsReporter.java | 17 ++++++++++++----- .../PrometheusMetricsReporterTest.java | 10 +++++++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/AbstractMetricsReporter.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/AbstractMetricsReporter.java index 74c0407675..571fcc5e25 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/AbstractMetricsReporter.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/AbstractMetricsReporter.java @@ -20,13 +20,16 @@ package org.apache.dubbo.metrics; import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; +import io.micrometer.core.instrument.Tags; 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.binder.system.UptimeMetrics; import io.micrometer.core.instrument.composite.CompositeMeterRegistry; import org.apache.dubbo.common.URL; +import org.apache.dubbo.common.constants.MetricsConstants; import org.apache.dubbo.common.lang.ShutdownHookCallbacks; import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; import org.apache.dubbo.common.logger.LoggerFactory; @@ -41,6 +44,7 @@ import org.apache.dubbo.rpc.model.ApplicationModel; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -105,11 +109,14 @@ public abstract class AbstractMetricsReporter implements MetricsReporter { private void addJvmMetrics() { boolean enableJvmMetrics = url.getParameter(ENABLE_JVM_METRICS_KEY, false); if (enableJvmMetrics) { - new ClassLoaderMetrics().bindTo(compositeRegistry); - new JvmMemoryMetrics().bindTo(compositeRegistry); - new JvmGcMetrics().bindTo(compositeRegistry); - new ProcessorMetrics().bindTo(compositeRegistry); - new JvmThreadMetrics().bindTo(compositeRegistry); + Tags extraTags = Tags.of(MetricsConstants.TAG_APPLICATION_NAME, + Optional.ofNullable(applicationModel.getApplicationName()).orElse("")); + new ClassLoaderMetrics(extraTags).bindTo(compositeRegistry); + new JvmMemoryMetrics(extraTags).bindTo(compositeRegistry); + new JvmGcMetrics(extraTags).bindTo(compositeRegistry); + new ProcessorMetrics(extraTags).bindTo(compositeRegistry); + new JvmThreadMetrics(extraTags).bindTo(compositeRegistry); + new UptimeMetrics(extraTags).bindTo(compositeRegistry); } } diff --git a/dubbo-metrics/dubbo-metrics-prometheus/src/test/java/org/apache/dubbo/metrics/prometheus/PrometheusMetricsReporterTest.java b/dubbo-metrics/dubbo-metrics-prometheus/src/test/java/org/apache/dubbo/metrics/prometheus/PrometheusMetricsReporterTest.java index 5ea7d9ffe3..333286f67e 100644 --- a/dubbo-metrics/dubbo-metrics-prometheus/src/test/java/org/apache/dubbo/metrics/prometheus/PrometheusMetricsReporterTest.java +++ b/dubbo-metrics/dubbo-metrics-prometheus/src/test/java/org/apache/dubbo/metrics/prometheus/PrometheusMetricsReporterTest.java @@ -18,6 +18,7 @@ package org.apache.dubbo.metrics.prometheus; import org.apache.dubbo.common.utils.NetUtils; +import org.apache.dubbo.config.ApplicationConfig; import org.apache.dubbo.config.MetricsConfig; import org.apache.dubbo.config.nested.PrometheusConfig; import org.apache.dubbo.rpc.model.ApplicationModel; @@ -61,13 +62,16 @@ class PrometheusMetricsReporterTest { @Test void testJvmMetrics() { metricsConfig.setEnableJvmMetrics(true); + String name = "metrics-test"; + ApplicationModel.defaultModel().getApplicationConfigManager().setApplication(new ApplicationConfig(name)); + PrometheusMetricsReporter reporter = new PrometheusMetricsReporter(metricsConfig.toUrl(), applicationModel); reporter.init(); PrometheusMeterRegistry prometheusRegistry = reporter.getPrometheusRegistry(); Double d1 = prometheusRegistry.getPrometheusRegistry().getSampleValue("none_exist_metric"); - Double d2 = prometheusRegistry.getPrometheusRegistry().getSampleValue("jvm_gc_memory_promoted_bytes_total"); - + Double d2 = prometheusRegistry.getPrometheusRegistry().getSampleValue("jvm_gc_memory_promoted_bytes_total", + new String[]{"application_name"},new String[]{name}); Assertions.assertNull(d1); Assertions.assertNotNull(d2); } @@ -84,7 +88,7 @@ class PrometheusMetricsReporterTest { prometheusConfig.setExporter(exporter); metricsConfig.setPrometheus(prometheusConfig); metricsConfig.setEnableJvmMetrics(true); - + ApplicationModel.defaultModel().getApplicationConfigManager().setApplication(new ApplicationConfig("metrics-test")); PrometheusMetricsReporter reporter = new PrometheusMetricsReporter(metricsConfig.toUrl(), applicationModel); reporter.init();