diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/MetricsConstants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/MetricsConstants.java index e7805eaa32..4c4437d427 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/MetricsConstants.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/MetricsConstants.java @@ -40,15 +40,17 @@ public interface MetricsConstants { String TAG_VERSION_KEY = "version"; String TAG_APPLICATION_VERSION_KEY = "application.version"; - + String TAG_KEY_KEY = "key"; - + String TAG_CONFIG_CENTER = "config.center"; - + String TAG_CHANGE_TYPE = "change.type"; String ENABLE_JVM_METRICS_KEY = "enable.jvm"; + String ENABLE_COLLECTOR_SYNC_KEY = "enable.collector.sync"; + String AGGREGATION_COLLECTOR_KEY = "aggregation"; String AGGREGATION_ENABLED_KEY = "aggregation.enabled"; diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java index 067833b2b0..129391af72 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java @@ -61,6 +61,16 @@ public class MetricsConfig extends AbstractConfig { */ private Boolean exportMetricsService; + /** + * Enable metrics init. + */ + private Boolean enableMetricsInit; + + /** + * Enable collector sync. + */ + private Boolean enableCollectorSync; + /** * @deprecated After metrics config is refactored. * This parameter should no longer use and will be deleted in the future. @@ -208,6 +218,22 @@ public class MetricsConfig extends AbstractConfig { this.enableThreadpool = enableThreadpool; } + public Boolean getEnableMetricsInit() { + return enableMetricsInit; + } + + public void setEnableMetricsInit(Boolean enableMetricsInit) { + this.enableMetricsInit = enableMetricsInit; + } + + public Boolean getEnableCollectorSync() { + return enableCollectorSync; + } + + public void setEnableCollectorSync(Boolean enableCollectorSync) { + this.enableCollectorSync = enableCollectorSync; + } + public Boolean getUseGlobalRegistry() { return useGlobalRegistry; } diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java index b075acaa44..55662b24b0 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java @@ -385,6 +385,7 @@ public class DefaultApplicationDeployer extends AbstractDeployer private boolean collectEnabled = false; private volatile boolean threadpoolCollectEnabled = false; + + private volatile boolean metricsInitEnabled = true; + private final ThreadPoolMetricsSampler threadPoolSampler = new ThreadPoolMetricsSampler(this); private String applicationName; private final ApplicationModel applicationModel; @@ -123,6 +126,14 @@ public class DefaultMetricsCollector extends CombMetricsCollector this.threadpoolCollectEnabled = threadpoolCollectEnabled; } + public boolean isMetricsInitEnabled() { + return metricsInitEnabled; + } + + public void setMetricsInitEnabled(boolean metricsInitEnabled) { + this.metricsInitEnabled = metricsInitEnabled; + } + public void collectApplication() { this.setApplicationName(applicationModel.getApplicationName()); applicationSampler.inc(applicationName, MetricsEvent.Type.APPLICATION_INFO); @@ -155,6 +166,9 @@ public class DefaultMetricsCollector extends CombMetricsCollector @Override public void onEvent(TimeCounterEvent event) { if(event instanceof MetricsInitEvent){ + if (!metricsInitEnabled) { + return; + } if(initialized.compareAndSet(false,true)) { collectors.addAll(applicationModel.getBeanFactory().getBeansOfType(MetricsCollector.class)); } 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 c6eb309b36..13c8cecdc4 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 @@ -17,26 +17,26 @@ package org.apache.dubbo.metrics.report; -import io.micrometer.core.instrument.FunctionCounter; -import io.micrometer.core.instrument.binder.MeterBinder; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.beans.factory.ScopeBeanFactory; 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.MetricsGlobalRegistry; import org.apache.dubbo.common.utils.NamedThreadFactory; +import org.apache.dubbo.metrics.MetricsGlobalRegistry; import org.apache.dubbo.metrics.collector.AggregateMetricsCollector; -import org.apache.dubbo.metrics.collector.MetricsCollector; import org.apache.dubbo.metrics.collector.HistogramMetricsCollector; +import org.apache.dubbo.metrics.collector.MetricsCollector; import org.apache.dubbo.metrics.model.sample.CounterMetricSample; import org.apache.dubbo.metrics.model.sample.GaugeMetricSample; import org.apache.dubbo.metrics.model.sample.MetricSample; import org.apache.dubbo.rpc.model.ApplicationModel; +import io.micrometer.core.instrument.FunctionCounter; import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; +import io.micrometer.core.instrument.binder.MeterBinder; import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; @@ -53,6 +53,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import static org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_METRICS_COLLECTOR_EXCEPTION; +import static org.apache.dubbo.common.constants.MetricsConstants.ENABLE_COLLECTOR_SYNC_KEY; import static org.apache.dubbo.common.constants.MetricsConstants.ENABLE_JVM_METRICS_KEY; /** @@ -140,9 +141,12 @@ public abstract class AbstractMetricsReporter implements MetricsReporter { } private void scheduleMetricsCollectorSyncJob() { - NamedThreadFactory threadFactory = new NamedThreadFactory("metrics-collector-sync-job", true); - collectorSyncJobExecutor = Executors.newScheduledThreadPool(1, threadFactory); - collectorSyncJobExecutor.scheduleWithFixedDelay(this::refreshData, DEFAULT_SCHEDULE_INITIAL_DELAY, DEFAULT_SCHEDULE_PERIOD, TimeUnit.SECONDS); + boolean enableCollectorSync = url.getParameter(ENABLE_COLLECTOR_SYNC_KEY, true); + if (enableCollectorSync) { + NamedThreadFactory threadFactory = new NamedThreadFactory("metrics-collector-sync-job", true); + collectorSyncJobExecutor = Executors.newScheduledThreadPool(1, threadFactory); + collectorSyncJobExecutor.scheduleWithFixedDelay(this::refreshData, DEFAULT_SCHEDULE_INITIAL_DELAY, DEFAULT_SCHEDULE_PERIOD, TimeUnit.SECONDS); + } } @SuppressWarnings({"unchecked", "rawtypes"})