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