This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new e7925ceac7 sync meter to spring boot management (#11630)
e7925ceac7 is described below

commit e7925ceac7b58b9a739652e5011dff57b772bf96
Author: songxiaosheng <[email protected]>
AuthorDate: Thu Feb 23 11:01:21 2023 +0800

    sync meter to spring boot management (#11630)
---
 .../org/apache/dubbo/metrics/DubboMetrics.java     |  8 +++++-
 .../metrics/report/AbstractMetricsReporter.java    | 33 ++++++++++++++--------
 .../prometheus/PrometheusMetricsReporter.java      |  8 ++++++
 3 files changed, 37 insertions(+), 12 deletions(-)

diff --git 
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/DubboMetrics.java
 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/DubboMetrics.java
similarity index 75%
rename from 
dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/DubboMetrics.java
rename to 
dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/DubboMetrics.java
index 704fdb217e..00351aedcc 100644
--- 
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/DubboMetrics.java
+++ 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/DubboMetrics.java
@@ -18,15 +18,21 @@ package org.apache.dubbo.metrics;
 
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.binder.MeterBinder;
+import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
+import org.apache.dubbo.metrics.report.AbstractMetricsReporter;
 
 
 public class DubboMetrics implements MeterBinder {
 
-    public static volatile MeterRegistry globalRegistry = null;
+    private MeterRegistry globalRegistry = null;
 
     @Override
     public void bindTo(MeterRegistry registry) {
         globalRegistry = registry;
+        CompositeMeterRegistry compositeRegistry = 
AbstractMetricsReporter.compositeRegistry;
+        if (compositeRegistry != null) {
+            compositeRegistry.add(registry);
+        }
     }
 
     public void destroy() {
diff --git 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsReporter.java
 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsReporter.java
index f62b8b0c0d..dccc46e2cc 100644
--- 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsReporter.java
+++ 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsReporter.java
@@ -34,7 +34,7 @@ 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;
-import org.apache.dubbo.metrics.DubboMetrics;
+import org.apache.dubbo.common.utils.NamedThreadFactory;
 import org.apache.dubbo.metrics.collector.AggregateMetricsCollector;
 import org.apache.dubbo.metrics.collector.MetricsCollector;
 import org.apache.dubbo.metrics.model.sample.GaugeMetricSample;
@@ -44,6 +44,9 @@ 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;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_METRICS_COLLECTOR_EXCEPTION;
@@ -57,14 +60,17 @@ public abstract class AbstractMetricsReporter implements 
MetricsReporter {
     private final ErrorTypeAwareLogger logger = 
LoggerFactory.getErrorTypeAwareLogger(AbstractMetricsReporter.class);
 
     private final AtomicBoolean initialized = new AtomicBoolean(false);
-    private final AtomicBoolean addGlobalRegistry = new AtomicBoolean(false);
 
     protected final URL url;
     protected final List<MetricsCollector> collectors = new ArrayList<>();
-    protected final CompositeMeterRegistry compositeRegistry = new 
CompositeMeterRegistry();
+    public static final CompositeMeterRegistry compositeRegistry = new 
CompositeMeterRegistry();
 
     private final ApplicationModel applicationModel;
 
+    private ScheduledExecutorService collectorSyncJobExecutor = null;
+
+    private static final int DEFAULT_SCHEDULE_INITIAL_DELAY = 5;
+    private static final int DEFAULT_SCHEDULE_PERIOD = 3;
 
     protected AbstractMetricsReporter(URL url, ApplicationModel 
applicationModel) {
         this.url = url;
@@ -76,6 +82,7 @@ public abstract class AbstractMetricsReporter implements 
MetricsReporter {
         if (initialized.compareAndSet(false, true)) {
             addJvmMetrics();
             initCollectors();
+            scheduleMetricsCollectorSyncJob();
 
             doInit();
 
@@ -86,13 +93,7 @@ public abstract class AbstractMetricsReporter implements 
MetricsReporter {
     protected void addMeterRegistry(MeterRegistry registry) {
         compositeRegistry.add(registry);
     }
-    private void addDubboMeterRegistry(){
-        MeterRegistry globalRegistry = DubboMetrics.globalRegistry;
-        if(globalRegistry != null && !addGlobalRegistry.get()){
-            compositeRegistry.add(globalRegistry);
-            addGlobalRegistry.set(true);
-        }
-    }
+
 
     protected ApplicationModel getApplicationModel() {
         return applicationModel;
@@ -126,8 +127,15 @@ public abstract class AbstractMetricsReporter implements 
MetricsReporter {
         collectors.addAll(otherCollectors);
     }
 
+    private void scheduleMetricsCollectorSyncJob() {
+        NamedThreadFactory threadFactory = new 
NamedThreadFactory("metrics-collector-sync-job", true);
+        collectorSyncJobExecutor = Executors.newScheduledThreadPool(1, 
threadFactory);
+        collectorSyncJobExecutor.scheduleWithFixedDelay(() -> {
+            refreshData();
+        }, DEFAULT_SCHEDULE_INITIAL_DELAY, DEFAULT_SCHEDULE_PERIOD, 
TimeUnit.SECONDS);
+    }
+
     public void refreshData() {
-        addDubboMeterRegistry();
         collectors.forEach(collector -> {
             List<MetricSample> samples = collector.collect();
             for (MetricSample sample : samples) {
@@ -168,6 +176,9 @@ public abstract class AbstractMetricsReporter implements 
MetricsReporter {
     }
 
     public void destroy() {
+        if (collectorSyncJobExecutor != null) {
+            collectorSyncJobExecutor.shutdownNow();
+        }
         doDestroy();
     }
 
diff --git 
a/dubbo-metrics/dubbo-metrics-prometheus/src/main/java/org/apache/dubbo/metrics/prometheus/PrometheusMetricsReporter.java
 
b/dubbo-metrics/dubbo-metrics-prometheus/src/main/java/org/apache/dubbo/metrics/prometheus/PrometheusMetricsReporter.java
index d110751fb2..8227d4d4f1 100644
--- 
a/dubbo-metrics/dubbo-metrics-prometheus/src/main/java/org/apache/dubbo/metrics/prometheus/PrometheusMetricsReporter.java
+++ 
b/dubbo-metrics/dubbo-metrics-prometheus/src/main/java/org/apache/dubbo/metrics/prometheus/PrometheusMetricsReporter.java
@@ -85,14 +85,22 @@ public class PrometheusMetricsReporter extends 
AbstractMetricsReporter {
             }
 
             try {
+
                 prometheusExporterHttpServer = HttpServer.create(new 
InetSocketAddress(port), 0);
                 prometheusExporterHttpServer.createContext(path, httpExchange 
-> {
+                    long begin = System.currentTimeMillis();
+                    if (logger.isDebugEnabled()) {
+                        logger.debug("scrape begin");
+                    }
                     refreshData();
                     String response = prometheusRegistry.scrape();
                     httpExchange.sendResponseHeaders(200, 
response.getBytes().length);
                     try (OutputStream os = httpExchange.getResponseBody()) {
                         os.write(response.getBytes());
                     }
+                    if (logger.isDebugEnabled()) {
+                        logger.debug(String.format("scrape end,Elapsed 
Time:%s",System.currentTimeMillis() - begin));
+                    }
                 });
 
                 httpServerThread = new 
Thread(prometheusExporterHttpServer::start);

Reply via email to