This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit 7bc6d7f84eee1c56732b5498c20dd6f38bbc38fb Author: liubao <[email protected]> AuthorDate: Sat Nov 25 10:02:13 2023 +0800 [SCB-2838]using micrometer to replace spectator part1: MetricsInitializer --- foundations/foundation-metrics/pom.xml | 4 +- .../com/netflix/spectator/api/SpectatorUtils.java | 16 ++-- .../foundation/metrics/MetricsBootstrap.java | 18 +++-- .../foundation/metrics/MetricsInitializer.java | 9 +-- .../foundation/metrics/PolledEvent.java | 17 +--- .../metrics/meter/AbstractPeriodMeter.java | 4 +- .../metrics/meter/LatencyScopeMeter.java | 12 +-- .../foundation/metrics/meter/PeriodMeter.java | 5 +- .../foundation/metrics/meter/SimpleTimer.java | 6 +- .../publish/spectator/DefaultTagFinder.java | 5 +- .../metrics/publish/spectator/MeasurementNode.java | 4 +- .../metrics/publish/spectator/MeasurementTree.java | 21 +++-- .../metrics/publish/spectator/TagFinder.java | 2 +- .../metrics/registry/GlobalRegistry.java | 92 ++-------------------- .../foundation/metrics/TestMetricsBootstrap.java | 12 ++- .../foundation/metrics/meter/TestSimpleTimer.java | 9 ++- .../metrics/core/DefaultRegistryInitializer.java | 63 --------------- .../metrics/core/InvocationMetersInitializer.java | 14 ++-- .../metrics/core/MetricsCoreConfiguration.java | 5 -- .../metrics/core/OsMetersInitializer.java | 11 +-- .../metrics/core/ThreadPoolMetersInitializer.java | 36 ++++----- .../metrics/core/VertxMetersInitializer.java | 20 ++--- .../metrics/core/meter/ConsumerMeters.java | 6 +- .../servicecomb/metrics/core/meter/EdgeMeters.java | 6 +- .../metrics/core/meter/ProducerMeters.java | 6 +- .../meter/invocation/AbstractInvocationMeter.java | 4 +- .../meter/invocation/AbstractInvocationMeters.java | 28 +++---- .../meter/invocation/ConsumerInvocationMeters.java | 8 +- .../meter/invocation/EdgeInvocationMeters.java | 8 +- .../meter/invocation/ProducerInvocationMeters.java | 8 +- .../metrics/core/meter/os/CpuMeter.java | 15 ++-- .../metrics/core/meter/os/NetMeter.java | 16 ++-- .../servicecomb/metrics/core/meter/os/OsMeter.java | 12 +-- .../core/meter/os/cpu/AbstractCpuUsage.java | 3 +- .../metrics/core/meter/os/cpu/OsCpuUsage.java | 2 +- .../metrics/core/meter/os/cpu/ProcessCpuUsage.java | 2 +- .../metrics/core/meter/os/net/InterfaceUsage.java | 10 ++- .../metrics/core/meter/os/net/NetStat.java | 3 +- .../metrics/core/meter/vertx/EndpointMeter.java | 22 +++--- .../core/meter/vertx/HttpClientEndpointsMeter.java | 7 +- .../core/meter/vertx/VertxEndpointsMeter.java | 10 ++- .../metrics/core/publish/DefaultLogPublisher.java | 14 ++-- .../metrics/core/publish/PublishModelFactory.java | 3 +- .../core/TestDefaultRegistryInitializer.java | 73 ----------------- .../metrics/core/meter/os/TestOsMeter.java | 25 +++--- .../metrics/prometheus/PrometheusPublisher.java | 43 +++++----- .../basic/integration/MetricsEndpointImpl.java | 35 ++++---- 47 files changed, 256 insertions(+), 498 deletions(-) diff --git a/foundations/foundation-metrics/pom.xml b/foundations/foundation-metrics/pom.xml index ba0193e70..aca8ad61d 100644 --- a/foundations/foundation-metrics/pom.xml +++ b/foundations/foundation-metrics/pom.xml @@ -32,8 +32,8 @@ <artifactId>foundation-common</artifactId> </dependency> <dependency> - <groupId>com.netflix.spectator</groupId> - <artifactId>spectator-reg-servo</artifactId> + <groupId>io.micrometer</groupId> + <artifactId>micrometer-core</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> diff --git a/foundations/foundation-metrics/src/main/java/com/netflix/spectator/api/SpectatorUtils.java b/foundations/foundation-metrics/src/main/java/com/netflix/spectator/api/SpectatorUtils.java index cccc7107f..400b8cb4b 100644 --- a/foundations/foundation-metrics/src/main/java/com/netflix/spectator/api/SpectatorUtils.java +++ b/foundations/foundation-metrics/src/main/java/com/netflix/spectator/api/SpectatorUtils.java @@ -16,21 +16,15 @@ */ package com.netflix.spectator.api; +import io.micrometer.core.instrument.Meter; +import io.micrometer.core.instrument.MeterRegistry; + public final class SpectatorUtils { private SpectatorUtils() { } - public static Id createDefaultId(String name) { - return new DefaultId(name); - } - - public static void removeExpiredMeters(Registry registry) { - if (registry instanceof AbstractRegistry) { - ((AbstractRegistry) registry).removeExpiredMeters(); - } - } - - public static void registerMeter(Registry registry, Meter meter) { + public static void registerMeter(MeterRegistry registry, Meter meter) { + registry.counter() if (!(registry instanceof AbstractRegistry)) { throw new IllegalStateException("registry must be a AbstractRegistry, class=" + registry.getClass().getName()); } diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java index 5b014afe8..2521650f6 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java @@ -22,7 +22,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -31,10 +30,12 @@ import org.springframework.core.env.Environment; import com.google.common.eventbus.EventBus; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import io.micrometer.core.instrument.MeterRegistry; + public class MetricsBootstrap { private static final Logger LOGGER = LoggerFactory.getLogger(MetricsBootstrap.class); - private GlobalRegistry globalRegistry; + private MeterRegistry meterRegistry; private EventBus eventBus; @@ -57,15 +58,19 @@ public class MetricsBootstrap { this.metricsInitializers = metricsInitializers; } - public void start(GlobalRegistry globalRegistry, EventBus eventBus) { - this.globalRegistry = globalRegistry; + @Autowired + public void setMeterRegistry(MeterRegistry meterRegistry) { + this.meterRegistry = meterRegistry; + } + + public void start(EventBus eventBus) { this.eventBus = eventBus; this.executorService = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder() .setNameFormat("spectator-poller-%d") .build()); - metricsInitializers.forEach(initializer -> initializer.init(globalRegistry, eventBus, config)); + metricsInitializers.forEach(initializer -> initializer.init(this.meterRegistry, eventBus, config)); startPoll(); } @@ -87,8 +92,7 @@ public class MetricsBootstrap { public synchronized void pollMeters() { try { - long secondInterval = TimeUnit.MILLISECONDS.toSeconds(config.getMsPollInterval()); - PolledEvent polledEvent = globalRegistry.poll(secondInterval); + PolledEvent polledEvent = new PolledEvent(meterRegistry.getMeters()); eventBus.post(polledEvent); } catch (Throwable e) { LOGGER.error("poll meters error. ", e); diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsInitializer.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsInitializer.java index 88201dcb2..3cb0b8f95 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsInitializer.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsInitializer.java @@ -16,19 +16,16 @@ */ package org.apache.servicecomb.foundation.metrics; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; - import com.google.common.eventbus.EventBus; +import io.micrometer.core.instrument.MeterRegistry; + public interface MetricsInitializer { default int getOrder() { return 0; } - /** - * if create new registry, must add to globalRegistry - */ - void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config); + void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config); default void destroy() { diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/PolledEvent.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/PolledEvent.java index 6b7c3018c..0814f9614 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/PolledEvent.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/PolledEvent.java @@ -18,17 +18,14 @@ package org.apache.servicecomb.foundation.metrics; import java.util.List; -import com.netflix.spectator.api.Measurement; -import com.netflix.spectator.api.Meter; +import io.micrometer.core.instrument.Meter; + public class PolledEvent { private List<Meter> meters; - private List<Measurement> measurements; - - public PolledEvent(List<Meter> meters, List<Measurement> measurements) { + public PolledEvent(List<Meter> meters) { this.meters = meters; - this.measurements = measurements; } public List<Meter> getMeters() { @@ -38,12 +35,4 @@ public class PolledEvent { public void setMeters(List<Meter> meters) { this.meters = meters; } - - public List<Measurement> getMeasurements() { - return measurements; - } - - public void setMeasurements(List<Measurement> measurements) { - this.measurements = measurements; - } } diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/AbstractPeriodMeter.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/AbstractPeriodMeter.java index d9e2f46d5..bd8672e5a 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/AbstractPeriodMeter.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/AbstractPeriodMeter.java @@ -19,8 +19,8 @@ package org.apache.servicecomb.foundation.metrics.meter; import java.util.Collections; import java.util.List; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Measurement; +import io.micrometer.core.instrument.Measurement; + public abstract class AbstractPeriodMeter implements PeriodMeter { protected Id id; diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/LatencyScopeMeter.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/LatencyScopeMeter.java index 114f930f0..506375d09 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/LatencyScopeMeter.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/LatencyScopeMeter.java @@ -19,8 +19,10 @@ package org.apache.servicecomb.foundation.metrics.meter; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.LongAdder; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Measurement; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.Statistic; +import io.micrometer.core.instrument.Tag; public class LatencyScopeMeter { private final Id scopeId; @@ -36,8 +38,8 @@ public class LatencyScopeMeter { public LatencyScopeMeter(Id latencyDistributionId, LatencyScopeConfig config) { nanoMin = TimeUnit.MILLISECONDS.toNanos(config.getMsMin()); nanoMax = TimeUnit.MILLISECONDS.toNanos(config.getMsMax()); - scopeId = latencyDistributionId.withTag("scope", - String.format("[%d,%s)", config.getMsMin(), config.getMsMax() == Long.MAX_VALUE ? "" : config.getMsMax())); + scopeId = latencyDistributionId.withTag(Tag.of("scope", + String.format("[%d,%s)", config.getMsMin(), config.getMsMax() == Long.MAX_VALUE ? "" : config.getMsMax()))); } public boolean update(long nanoLatency) { @@ -54,6 +56,6 @@ public class LatencyScopeMeter { long deltaTimes = currentTimes - lastTimes; this.lastTimes = currentTimes; - return new Measurement(scopeId, msNow, deltaTimes); + return new Measurement(() -> deltaTimes, Statistic.VALUE); } } diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/PeriodMeter.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/PeriodMeter.java index f91d781e1..4fa57f13e 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/PeriodMeter.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/PeriodMeter.java @@ -18,8 +18,9 @@ package org.apache.servicecomb.foundation.metrics.meter; import java.util.List; -import com.netflix.spectator.api.Measurement; -import com.netflix.spectator.api.Meter; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.Meter; + public interface PeriodMeter extends Meter { void calcMeasurements(long msNow, long secondInterval); diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/SimpleTimer.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/SimpleTimer.java index 09803a471..f1860a783 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/SimpleTimer.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/meter/SimpleTimer.java @@ -21,10 +21,8 @@ import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.LongAdder; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Measurement; -import com.netflix.spectator.api.Statistic; -import com.netflix.spectator.impl.AtomicDouble; + +import io.micrometer.core.instrument.Measurement; /** * ServoTimer is too slow diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/DefaultTagFinder.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/DefaultTagFinder.java index 17d3d9a73..31af35c7a 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/DefaultTagFinder.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/DefaultTagFinder.java @@ -16,7 +16,8 @@ */ package org.apache.servicecomb.foundation.metrics.publish.spectator; -import com.netflix.spectator.api.Tag; + +import io.micrometer.core.instrument.Tag; public class DefaultTagFinder implements TagFinder { private final String tagKey; @@ -45,7 +46,7 @@ public class DefaultTagFinder implements TagFinder { @Override public Tag find(Iterable<Tag> tags) { for (Tag tag : tags) { - if (tag.key().equals(tagKey)) { + if (tag.getKey().equals(tagKey)) { return tag; } } diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementNode.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementNode.java index c138bea15..272f6b87e 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementNode.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementNode.java @@ -21,7 +21,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import com.netflix.spectator.api.Measurement; +import io.micrometer.core.instrument.Measurement; public class MeasurementNode implements Comparable<MeasurementNode> { private final String name; @@ -84,7 +84,7 @@ public class MeasurementNode implements Comparable<MeasurementNode> { public double summary() { double result = 0; for (Measurement measurement : measurements) { - result += measurement.value(); + result += measurement.getValue(); } return result; diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementTree.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementTree.java index 79101fa16..e2dbd268b 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementTree.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementTree.java @@ -19,10 +19,10 @@ package org.apache.servicecomb.foundation.metrics.publish.spectator; import java.util.Iterator; import java.util.List; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Measurement; -import com.netflix.spectator.api.Meter; -import com.netflix.spectator.api.Tag; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.Meter; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.Tag; // like select * from meters group by ...... // but output a tree not a table @@ -38,22 +38,21 @@ public class MeasurementTree extends MeasurementNode { public void from(Iterator<Meter> meters, MeasurementGroupConfig groupConfig) { meters.forEachRemaining(meter -> { Iterable<Measurement> measurements = meter.measure(); - from(measurements, groupConfig); + from(meter.getId(), measurements, groupConfig); }); } - public void from(Iterable<Measurement> measurements, MeasurementGroupConfig groupConfig) { + public void from(Id id, Iterable<Measurement> measurements, MeasurementGroupConfig groupConfig) { for (Measurement measurement : measurements) { - Id id = measurement.id(); - MeasurementNode node = addChild(id.name(), measurement); + MeasurementNode node = addChild(id.getName(), measurement); - List<TagFinder> tagFinders = groupConfig.findTagFinders(id.name()); + List<TagFinder> tagFinders = groupConfig.findTagFinders(id.getName()); if (tagFinders == null) { continue; } for (TagFinder tagFinder : tagFinders) { - Tag tag = tagFinder.find(id.tags()); + Tag tag = tagFinder.find(id.getTags()); if (tag == null) { if (tagFinder.skipOnNull()) { break; @@ -64,7 +63,7 @@ public class MeasurementTree extends MeasurementNode { measurement)); } - node = node.addChild(tag.value(), measurement); + node = node.addChild(tag.getValue(), measurement); } } } diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/TagFinder.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/TagFinder.java index 0762afb8d..a3c893b4b 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/TagFinder.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/TagFinder.java @@ -16,7 +16,7 @@ */ package org.apache.servicecomb.foundation.metrics.publish.spectator; -import com.netflix.spectator.api.Tag; +import io.micrometer.core.instrument.Tag; public interface TagFinder { static TagFinder build(Object obj) { diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/registry/GlobalRegistry.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/registry/GlobalRegistry.java index 25e85b134..453c86495 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/registry/GlobalRegistry.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/registry/GlobalRegistry.java @@ -16,99 +16,19 @@ */ package org.apache.servicecomb.foundation.metrics.registry; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; - import org.apache.servicecomb.foundation.metrics.PolledEvent; -import org.apache.servicecomb.foundation.metrics.meter.PeriodMeter; - -import com.netflix.spectator.api.Clock; -import com.netflix.spectator.api.Measurement; -import com.netflix.spectator.api.Meter; -import com.netflix.spectator.api.Registry; -import com.netflix.spectator.api.SpectatorUtils; - -public class GlobalRegistry { - private final Clock clock; - private final List<Registry> registries = new CopyOnWriteArrayList<>(); +import io.micrometer.core.instrument.MeterRegistry; - private Registry defaultRegistry; - public GlobalRegistry() { - this(Clock.SYSTEM); - } - - public GlobalRegistry(Clock clock) { - this.clock = clock; - } - - public Clock getClock() { - return clock; - } - - public List<Registry> getRegistries() { - return registries; - } - - public Registry getDefaultRegistry() { - return defaultRegistry; - } - - public synchronized void add(Registry registry) { - if (registries.isEmpty()) { - defaultRegistry = registry; - } - registries.add(registry); - } - - public synchronized void remove(Registry registry) { - registries.remove(registry); - if (registry != defaultRegistry) { - return; - } - - if (registries.isEmpty()) { - defaultRegistry = null; - return; - } - - defaultRegistry = registries.get(0); - } - - public synchronized void removeAll() { - registries.clear(); - defaultRegistry = null; - } +public class GlobalRegistry { + private final MeterRegistry meterRegistry; - @SuppressWarnings("unchecked") - public <T extends Registry> T find(Class<T> cls) { - for (Registry registry : registries) { - if (cls.isAssignableFrom(registry.getClass())) { - return (T) registry; - } - } - return null; + public GlobalRegistry(MeterRegistry meterRegistry) { + this.meterRegistry = meterRegistry; } public PolledEvent poll(long secondInterval) { - long msNow = clock.wallTime(); - List<Meter> meters = new ArrayList<>(); - List<Measurement> measurements = new ArrayList<>(); - for (Registry registry : registries) { - SpectatorUtils.removeExpiredMeters(registry); - - for (Meter meter : registry) { - if (meter instanceof PeriodMeter) { - ((PeriodMeter) meter).calcMeasurements(msNow, secondInterval); - } - - meters.add(meter); - meter.measure().forEach(measurements::add); - } - } - - return new PolledEvent(meters, measurements); + return new PolledEvent(this.meterRegistry.getMeters()); } } diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsBootstrap.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsBootstrap.java index 466a0c5f1..02deb078b 100644 --- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsBootstrap.java +++ b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsBootstrap.java @@ -25,7 +25,6 @@ import java.util.Arrays; import java.util.List; import java.util.concurrent.ScheduledExecutorService; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; import org.junit.jupiter.api.Assertions; @@ -36,13 +35,12 @@ import org.springframework.core.env.Environment; import com.google.common.eventbus.EventBus; +import io.micrometer.core.instrument.MeterRegistry; import mockit.Deencapsulation; public class TestMetricsBootstrap { MetricsBootstrap bootstrap = new MetricsBootstrap(); - GlobalRegistry globalRegistry = new GlobalRegistry(); - EventBus eventBus = new EventBus(); Environment environment = Mockito.mock(Environment.class); @@ -63,14 +61,14 @@ public class TestMetricsBootstrap { List<MetricsInitializer> initList = new ArrayList<>(); MetricsInitializer metricsInitializer = new MetricsInitializer() { @Override - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + public void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config) { initList.add(this); } }; bootstrap.setMetricsInitializers(Arrays.asList(metricsInitializer, metricsInitializer)); - bootstrap.start(globalRegistry, eventBus); + bootstrap.start(eventBus); bootstrap.shutdown(); MatcherAssert.assertThat(initList, Matchers.contains(metricsInitializer, metricsInitializer)); @@ -87,7 +85,7 @@ public class TestMetricsBootstrap { } @Override - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + public void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config) { } @Override @@ -103,7 +101,7 @@ public class TestMetricsBootstrap { } @Override - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + public void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config) { } @Override diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/meter/TestSimpleTimer.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/meter/TestSimpleTimer.java index 47b60ec47..adc08f1bb 100644 --- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/meter/TestSimpleTimer.java +++ b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/meter/TestSimpleTimer.java @@ -16,12 +16,15 @@ */ package org.apache.servicecomb.foundation.metrics.meter; -import com.netflix.spectator.api.SpectatorUtils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.Meter.Type; +import io.micrometer.core.instrument.Tags; + public class TestSimpleTimer { - SimpleTimer timer = new SimpleTimer(SpectatorUtils.createDefaultId("name")); + SimpleTimer timer = new SimpleTimer(new Id("test", Tags.empty(), null, null, Type.TIMER)); @Test public void measure() { @@ -35,6 +38,6 @@ public class TestSimpleTimer { "[Measurement(name:statistic=count,1,1.0), Measurement(name:statistic=totalTime,1,3.0000000000000004E-9), Measurement(name:statistic=max,1,4.0E-9)]", timer.measure().toString()); Assertions.assertFalse(timer.hasExpired()); - Assertions.assertEquals("name", timer.id().name()); + Assertions.assertEquals("name", timer.id().getName()); } } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultRegistryInitializer.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultRegistryInitializer.java deleted file mode 100644 index d48898c6b..000000000 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultRegistryInitializer.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.servicecomb.metrics.core; - -import java.time.Duration; - -import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; -import org.apache.servicecomb.foundation.metrics.MetricsInitializer; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; - -import com.google.common.eventbus.EventBus; -import com.netflix.servo.DefaultMonitorRegistry; - -public class DefaultRegistryInitializer implements MetricsInitializer { - public static final String SERVO_POLLERS = "servo.pollers"; - - private GlobalRegistry globalRegistry; - - @SuppressWarnings("deprecation") - private com.netflix.spectator.servo.ServoRegistry registry; - - // create registry before init meters - @Override - public int getOrder() { - return -10; - } - - @Override - @SuppressWarnings("deprecation") - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { - this.globalRegistry = globalRegistry; - - // spectator move poll gauges from inline to background executor - // we need to set the interval to unify value - System.setProperty("spectator.api.gaugePollingFrequency", Duration.ofMillis(config.getMsPollInterval()).toString()); - - System.setProperty(SERVO_POLLERS, String.valueOf(config.getMsPollInterval())); - registry = new com.netflix.spectator.servo.ServoRegistry(); - globalRegistry.add(registry); - } - - @Override - public void destroy() { - if (registry != null) { - DefaultMonitorRegistry.getInstance().unregister(registry); - globalRegistry.remove(registry); - } - } -} diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java index 33912e987..4777fa347 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java @@ -21,7 +21,6 @@ import org.apache.servicecomb.core.event.InvocationFinishEvent; import org.apache.servicecomb.core.event.InvocationStartEvent; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.foundation.metrics.MetricsInitializer; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.apache.servicecomb.metrics.core.meter.ConsumerMeters; import org.apache.servicecomb.metrics.core.meter.EdgeMeters; import org.apache.servicecomb.metrics.core.meter.ProducerMeters; @@ -30,7 +29,8 @@ import org.apache.servicecomb.metrics.core.meter.invocation.AbstractInvocationMe import com.google.common.eventbus.AllowConcurrentEvents; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; -import com.netflix.spectator.api.Registry; + +import io.micrometer.core.instrument.MeterRegistry; public class InvocationMetersInitializer implements MetricsInitializer { private ConsumerMeters consumerMeters; @@ -40,12 +40,10 @@ public class InvocationMetersInitializer implements MetricsInitializer { private EdgeMeters edgeMeters; @Override - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { - Registry registry = globalRegistry.getDefaultRegistry(); - - consumerMeters = new ConsumerMeters(registry, config); - producerMeters = new ProducerMeters(registry, config); - edgeMeters = new EdgeMeters(registry, config); + public void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + consumerMeters = new ConsumerMeters(meterRegistry, config); + producerMeters = new ProducerMeters(meterRegistry, config); + edgeMeters = new EdgeMeters(meterRegistry, config); eventBus.register(this); } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsCoreConfiguration.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsCoreConfiguration.java index 91d6ea2a5..5d1dc7f60 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsCoreConfiguration.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsCoreConfiguration.java @@ -42,11 +42,6 @@ public class MetricsCoreConfiguration { return new DefaultLogPublisher(); } - @Bean - public DefaultRegistryInitializer defaultRegistryInitializer() { - return new DefaultRegistryInitializer(); - } - @Bean public InvocationMetersInitializer invocationMetersInitializer() { return new InvocationMetersInitializer(); diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/OsMetersInitializer.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/OsMetersInitializer.java index 88f01393f..03b6660ff 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/OsMetersInitializer.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/OsMetersInitializer.java @@ -19,15 +19,14 @@ package org.apache.servicecomb.metrics.core; import org.apache.commons.lang3.SystemUtils; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.foundation.metrics.MetricsInitializer; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.apache.servicecomb.metrics.core.meter.os.OsMeter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.annotations.VisibleForTesting; import com.google.common.eventbus.EventBus; -import com.netflix.spectator.api.Registry; -import com.netflix.spectator.api.SpectatorUtils; + +import io.micrometer.core.instrument.MeterRegistry; public class OsMetersInitializer implements MetricsInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(OsMetersInitializer.class); @@ -43,15 +42,13 @@ public class OsMetersInitializer implements MetricsInitializer { } @Override - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + public void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config) { if (!isOsLinux) { LOGGER.info("only support linux os to collect cpu and net info"); return; } - Registry registry = globalRegistry.getDefaultRegistry(); - osMeter = new OsMeter(registry); - SpectatorUtils.registerMeter(registry, osMeter); + osMeter = new OsMeter(meterRegistry); } public OsMeter getOsMeter() { diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java index ad0123391..1c30f3951 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java @@ -26,27 +26,22 @@ import org.apache.servicecomb.core.SCBEngine; import org.apache.servicecomb.core.definition.MicroserviceMeta; import org.apache.servicecomb.core.definition.OperationMeta; import org.apache.servicecomb.core.executor.GroupExecutor; -import org.apache.servicecomb.core.executor.ThreadPoolExecutorEx; import org.apache.servicecomb.foundation.common.utils.BeanUtils; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.foundation.metrics.MetricsInitializer; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import com.google.common.eventbus.EventBus; -import com.netflix.spectator.api.BasicTag; -import com.netflix.spectator.api.Registry; -import com.netflix.spectator.api.Tag; -import com.netflix.spectator.api.patterns.PolledMeter; -import com.netflix.spectator.api.patterns.ThreadPoolMonitor; + +import io.micrometer.core.instrument.MeterRegistry; public class ThreadPoolMetersInitializer implements MetricsInitializer { public static String REJECTED_COUNT = "threadpool.rejectedCount"; - private Registry registry; + private MeterRegistry meterRegistry; @Override - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { - registry = globalRegistry.getDefaultRegistry(); + public void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + this.meterRegistry = meterRegistry; createThreadPoolMeters(); } @@ -93,15 +88,16 @@ public class ThreadPoolMetersInitializer implements MetricsInitializer { return; } - ThreadPoolMonitor.attach(registry, (ThreadPoolExecutor) executor, threadPoolName); - - if (executor instanceof ThreadPoolExecutorEx) { - Tag idTag = new BasicTag("id", threadPoolName); - - PolledMeter.using(registry) - .withName(REJECTED_COUNT) - .withTag(idTag) - .monitorMonotonicCounter((ThreadPoolExecutorEx) executor, ThreadPoolExecutorEx::getRejectedCount); - } + // TODO: add thread pool meter +// ThreadPoolMonitor.attach(registry, (ThreadPoolExecutor) executor, threadPoolName); +// +// if (executor instanceof ThreadPoolExecutorEx) { +// Tag idTag = new BasicTag("id", threadPoolName); +// +// PolledMeter.using(registry) +// .withName(REJECTED_COUNT) +// .withTag(idTag) +// .monitorMonotonicCounter((ThreadPoolExecutorEx) executor, ThreadPoolExecutorEx::getRejectedCount); +// } } } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/VertxMetersInitializer.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/VertxMetersInitializer.java index dd70b3873..51cee1400 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/VertxMetersInitializer.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/VertxMetersInitializer.java @@ -18,16 +18,16 @@ package org.apache.servicecomb.metrics.core; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.foundation.metrics.MetricsInitializer; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.apache.servicecomb.foundation.vertx.SharedVertxFactory; import org.apache.servicecomb.metrics.core.meter.vertx.HttpClientEndpointsMeter; import org.apache.servicecomb.metrics.core.meter.vertx.ServerEndpointsMeter; import org.apache.servicecomb.metrics.core.meter.vertx.VertxEndpointsMeter; import com.google.common.eventbus.EventBus; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Registry; -import com.netflix.spectator.api.SpectatorUtils; + +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Tag; public class VertxMetersInitializer implements MetricsInitializer { public static final String VERTX_ENDPOINTS = "servicecomb.vertx.endpoints"; @@ -39,23 +39,19 @@ public class VertxMetersInitializer implements MetricsInitializer { public static final String ENDPOINTS_SERVER = "server"; @Override - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { - Registry registry = globalRegistry.getDefaultRegistry(); - - Id endpointsId = registry.createId(VERTX_ENDPOINTS); + public void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + Id endpointsId = new Id(VERTX_ENDPOINTS, null, null, null, null); VertxEndpointsMeter clientMeter = new HttpClientEndpointsMeter( - endpointsId.withTag(ENDPOINTS_TYPE, ENDPOINTS_CLINET), + endpointsId.withTag(Tag.of(ENDPOINTS_TYPE, ENDPOINTS_CLINET)), SharedVertxFactory.getMetricsFactory(config.getEnvironment()) .getVertxMetrics() .getClientEndpointMetricManager() .getClientEndpointMetricMap()); - SpectatorUtils.registerMeter(registry, clientMeter); VertxEndpointsMeter serverMeter = new ServerEndpointsMeter( - endpointsId.withTag(ENDPOINTS_TYPE, ENDPOINTS_SERVER), + endpointsId.withTag(Tag.of(ENDPOINTS_TYPE, ENDPOINTS_SERVER)), SharedVertxFactory.getMetricsFactory(config.getEnvironment()) .getVertxMetrics() .getServerEndpointMetricMap()); - SpectatorUtils.registerMeter(registry, serverMeter); } } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/ConsumerMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/ConsumerMeters.java index bea132203..ccd7f49f6 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/ConsumerMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/ConsumerMeters.java @@ -20,13 +20,13 @@ import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.metrics.core.meter.invocation.AbstractInvocationMeters; import org.apache.servicecomb.metrics.core.meter.invocation.ConsumerInvocationMeters; -import com.netflix.spectator.api.Registry; +import io.micrometer.core.instrument.MeterRegistry; public class ConsumerMeters { private final AbstractInvocationMeters invocationMeters; - public ConsumerMeters(Registry registry, MetricsBootstrapConfig metricsBootstrapConfig) { - invocationMeters = new ConsumerInvocationMeters(registry, metricsBootstrapConfig); + public ConsumerMeters(MeterRegistry meterRegistry, MetricsBootstrapConfig metricsBootstrapConfig) { + invocationMeters = new ConsumerInvocationMeters(meterRegistry, metricsBootstrapConfig); } public AbstractInvocationMeters getInvocationMeters() { diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/EdgeMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/EdgeMeters.java index 6da929165..b81403e89 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/EdgeMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/EdgeMeters.java @@ -21,14 +21,14 @@ import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.metrics.core.meter.invocation.AbstractInvocationMeters; import org.apache.servicecomb.metrics.core.meter.invocation.EdgeInvocationMeters; -import com.netflix.spectator.api.Registry; +import io.micrometer.core.instrument.MeterRegistry; public class EdgeMeters { private final AbstractInvocationMeters invocationMeters; - public EdgeMeters(Registry registry, MetricsBootstrapConfig metricsBootstrapConfig) { - this.invocationMeters = new EdgeInvocationMeters(registry, metricsBootstrapConfig); + public EdgeMeters(MeterRegistry meterRegistry, MetricsBootstrapConfig metricsBootstrapConfig) { + this.invocationMeters = new EdgeInvocationMeters(meterRegistry, metricsBootstrapConfig); } public AbstractInvocationMeters getInvocationMeters() { diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/ProducerMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/ProducerMeters.java index abe415864..1822b940f 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/ProducerMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/ProducerMeters.java @@ -20,13 +20,13 @@ import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.metrics.core.meter.invocation.AbstractInvocationMeters; import org.apache.servicecomb.metrics.core.meter.invocation.ProducerInvocationMeters; -import com.netflix.spectator.api.Registry; +import io.micrometer.core.instrument.MeterRegistry; public class ProducerMeters { private final AbstractInvocationMeters invocationMeters; - public ProducerMeters(Registry registry, MetricsBootstrapConfig metricsBootstrapConfig) { - invocationMeters = new ProducerInvocationMeters(registry, metricsBootstrapConfig); + public ProducerMeters(MeterRegistry meterRegistry, MetricsBootstrapConfig metricsBootstrapConfig) { + invocationMeters = new ProducerInvocationMeters(meterRegistry, metricsBootstrapConfig); } public AbstractInvocationMeters getInvocationMeters() { diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java index 362ae1dfb..1ffbe068a 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java @@ -26,8 +26,8 @@ import org.apache.servicecomb.foundation.metrics.meter.AbstractPeriodMeter; import org.apache.servicecomb.foundation.metrics.meter.LatencyDistributionMeter; import org.apache.servicecomb.foundation.metrics.meter.SimpleTimer; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Measurement; +import io.micrometer.core.instrument.Measurement; + public abstract class AbstractInvocationMeter extends AbstractPeriodMeter { diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java index bca004e65..ce9283e3d 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java @@ -25,12 +25,15 @@ import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.swagger.invocation.Response; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Registry; import com.netflix.spectator.api.SpectatorUtils; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.Meter.Type; +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Tags; + public abstract class AbstractInvocationMeters { - protected Registry registry; + protected MeterRegistry registry; private final Map<String, AbstractInvocationMeter> metersMap = new ConcurrentHashMapEx<>(); @@ -39,13 +42,13 @@ public abstract class AbstractInvocationMeters { protected MetricsBootstrapConfig metricsBootstrapConfig; - public AbstractInvocationMeters(Registry registry, MetricsBootstrapConfig metricsBootstrapConfig) { + public AbstractInvocationMeters(MeterRegistry registry, MetricsBootstrapConfig metricsBootstrapConfig) { this.registry = registry; this.metricsBootstrapConfig = metricsBootstrapConfig; } protected AbstractInvocationMeter getOrCreateMeters(Invocation invocation, Response response) { - // build string key is faster then use Id to locate timer directly + // build string key is faster than use Id to locate timer directly StringBuilder keyBuilder = new StringBuilder(maxKeyLen); String invocationName; //check edge @@ -65,15 +68,12 @@ public abstract class AbstractInvocationMeters { } return metersMap.computeIfAbsent(keyBuilder.toString(), k -> { - Id id = registry.createId(MeterInvocationConst.INVOCATION_NAME, - MeterInvocationConst.TAG_ROLE, - invocationName, - MeterInvocationConst.TAG_TRANSPORT, - invocation.getRealTransportName(), - MeterInvocationConst.TAG_OPERATION, - invocation.getMicroserviceQualifiedName(), - MeterInvocationConst.TAG_STATUS, - String.valueOf(response.getStatusCode())); + Id id = new Id(MeterInvocationConst.INVOCATION_NAME, Tags.empty() + .and(MeterInvocationConst.TAG_ROLE, invocationName) + .and(MeterInvocationConst.TAG_TRANSPORT, invocation.getRealTransportName()) + .and(MeterInvocationConst.TAG_OPERATION, invocation.getMicroserviceQualifiedName()) + .and(MeterInvocationConst.TAG_STATUS, String.valueOf(response.getStatusCode())), + null, null, Type.OTHER); AbstractInvocationMeter meter = createMeter(id); SpectatorUtils.registerMeter(registry, meter); diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java index fd0729ca7..d46faa803 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java @@ -18,12 +18,12 @@ package org.apache.servicecomb.metrics.core.meter.invocation; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Registry; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.MeterRegistry; public class ConsumerInvocationMeters extends AbstractInvocationMeters { - public ConsumerInvocationMeters(Registry registry, MetricsBootstrapConfig metricsBootstrapConfig) { - super(registry, metricsBootstrapConfig); + public ConsumerInvocationMeters(MeterRegistry meterRegistry, MetricsBootstrapConfig metricsBootstrapConfig) { + super(meterRegistry, metricsBootstrapConfig); } @Override diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java index 2a5b0bddd..872a811b7 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java @@ -19,12 +19,12 @@ package org.apache.servicecomb.metrics.core.meter.invocation; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Registry; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.MeterRegistry; public class EdgeInvocationMeters extends ConsumerInvocationMeters { - public EdgeInvocationMeters(Registry registry, MetricsBootstrapConfig metricsBootstrapConfig) { - super(registry, metricsBootstrapConfig); + public EdgeInvocationMeters(MeterRegistry meterRegistry, MetricsBootstrapConfig metricsBootstrapConfig) { + super(meterRegistry, metricsBootstrapConfig); } @Override diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java index fefe50708..60e86493c 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java @@ -18,12 +18,12 @@ package org.apache.servicecomb.metrics.core.meter.invocation; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Registry; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.MeterRegistry; public class ProducerInvocationMeters extends AbstractInvocationMeters { - public ProducerInvocationMeters(Registry registry, MetricsBootstrapConfig metricsBootstrapConfig) { - super(registry, metricsBootstrapConfig); + public ProducerInvocationMeters(MeterRegistry meterRegistry, MetricsBootstrapConfig metricsBootstrapConfig) { + super(meterRegistry, metricsBootstrapConfig); } @Override diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/CpuMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/CpuMeter.java index 587c11419..fdc7e8022 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/CpuMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/CpuMeter.java @@ -23,8 +23,11 @@ import org.apache.servicecomb.metrics.core.meter.os.cpu.ProcessCpuUsage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Measurement; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.Statistic; +import io.micrometer.core.instrument.Tag; + public class CpuMeter { private static final Logger LOGGER = LoggerFactory.getLogger(CpuMeter.class); @@ -36,8 +39,8 @@ public class CpuMeter { private final ProcessCpuUsage processCpuUsage; public CpuMeter(Id id) { - allCpuUsage = new OsCpuUsage(id.withTag(OsMeter.OS_TYPE, OsMeter.OS_TYPE_ALL_CPU)); - processCpuUsage = new ProcessCpuUsage(id.withTag(OsMeter.OS_TYPE, OsMeter.OS_TYPE_PROCESS_CPU)); + allCpuUsage = new OsCpuUsage(id.withTag(Tag.of(OsMeter.OS_TYPE, OsMeter.OS_TYPE_ALL_CPU))); + processCpuUsage = new ProcessCpuUsage(id.withTag(Tag.of(OsMeter.OS_TYPE, OsMeter.OS_TYPE_PROCESS_CPU))); //must refresh all first update(); @@ -47,8 +50,8 @@ public class CpuMeter { public void calcMeasurements(List<Measurement> measurements, long msNow) { update(); - measurements.add(new Measurement(allCpuUsage.getId(), msNow, allCpuUsage.getUsage())); - measurements.add(new Measurement(processCpuUsage.getId(), msNow, processCpuUsage.getUsage())); + measurements.add(new Measurement(() -> allCpuUsage.getUsage(), Statistic.VALUE)); + measurements.add(new Measurement(() -> processCpuUsage.getUsage(), Statistic.VALUE)); } public void update() { diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/NetMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/NetMeter.java index 5c9bc69cc..d7893095b 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/NetMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/NetMeter.java @@ -31,10 +31,10 @@ import org.apache.servicecomb.metrics.core.meter.os.net.NetStat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.netflix.spectator.api.BasicTag; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Measurement; -import com.netflix.spectator.api.Tag; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.Tag; + public class NetMeter { private static final Logger LOGGER = LoggerFactory.getLogger(NetMeter.class); @@ -43,13 +43,13 @@ public class NetMeter { public static final String INTERFACE = "interface"; - public static final Tag TAG_RECEIVE = new BasicTag(STATISTIC, "receive"); + public static final Tag TAG_RECEIVE = Tag.of(STATISTIC, "receive"); - public static final Tag TAG_PACKETS_RECEIVE = new BasicTag(STATISTIC, "receivePackets"); + public static final Tag TAG_PACKETS_RECEIVE = Tag.of(STATISTIC, "receivePackets"); - public static final Tag TAG_SEND = new BasicTag(STATISTIC, "send"); + public static final Tag TAG_SEND = Tag.of(STATISTIC, "send"); - public static final Tag TAG_PACKETS_SEND = new BasicTag(STATISTIC, "sendPackets"); + public static final Tag TAG_PACKETS_SEND = Tag.of(STATISTIC, "sendPackets"); private final Id id; diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/OsMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/OsMeter.java index 8bc157c17..7425e28fc 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/OsMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/OsMeter.java @@ -22,8 +22,10 @@ import java.util.List; import org.apache.servicecomb.foundation.metrics.meter.AbstractPeriodMeter; import com.google.common.annotations.VisibleForTesting; -import com.netflix.spectator.api.Measurement; -import com.netflix.spectator.api.Registry; + +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Tag; /** * name=os type=cpu value = 0 @@ -48,10 +50,10 @@ public class OsMeter extends AbstractPeriodMeter { private final NetMeter netMeter; - public OsMeter(Registry registry) { - this.id = registry.createId(OS_NAME); + public OsMeter(MeterRegistry meterRegistry) { + this.id = Id. cpuMeter = new CpuMeter(id); - netMeter = new NetMeter(id.withTag(OS_TYPE, OS_TYPE_NET)); + netMeter = new NetMeter(id.withTag(Tag.of(OS_TYPE, OS_TYPE_NET))); } @Override diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/AbstractCpuUsage.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/AbstractCpuUsage.java index 375a64875..8605edeb5 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/AbstractCpuUsage.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/AbstractCpuUsage.java @@ -16,7 +16,8 @@ */ package org.apache.servicecomb.metrics.core.meter.os.cpu; -import com.netflix.spectator.api.Id; + +import io.micrometer.core.instrument.Meter.Id; public abstract class AbstractCpuUsage { diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/OsCpuUsage.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/OsCpuUsage.java index 364ca10b4..8b40f212c 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/OsCpuUsage.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/OsCpuUsage.java @@ -18,7 +18,7 @@ package org.apache.servicecomb.metrics.core.meter.os.cpu; import java.io.IOException; -import com.netflix.spectator.api.Id; +import io.micrometer.core.instrument.Meter.Id; /* * unit : 1 jiffies diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/ProcessCpuUsage.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/ProcessCpuUsage.java index 00ec8cb5e..6ab7ad828 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/ProcessCpuUsage.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/cpu/ProcessCpuUsage.java @@ -18,7 +18,7 @@ package org.apache.servicecomb.metrics.core.meter.os.cpu; import java.io.IOException; -import com.netflix.spectator.api.Id; +import io.micrometer.core.instrument.Meter.Id; /* * unit : 1 jiffies diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/net/InterfaceUsage.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/net/InterfaceUsage.java index c29d9598f..a72217894 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/net/InterfaceUsage.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/net/InterfaceUsage.java @@ -25,8 +25,10 @@ import static org.apache.servicecomb.metrics.core.meter.os.NetMeter.TAG_SEND; import java.util.ArrayList; import java.util.List; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Measurement; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.Statistic; +import io.micrometer.core.instrument.Tag; public class InterfaceUsage { private final String name; @@ -35,7 +37,7 @@ public class InterfaceUsage { public InterfaceUsage(Id id, String name) { this.name = name; - id = id.withTag(INTERFACE, name); + id = id.withTag(Tag.of(INTERFACE, name)); init(id); } @@ -52,7 +54,7 @@ public class InterfaceUsage { } public void calcMeasurements(List<Measurement> measurements, long msNow) { - netStats.forEach(netStat -> measurements.add(new Measurement(netStat.getId(), msNow, netStat.getRate()))); + netStats.forEach(netStat -> measurements.add(new Measurement(() -> netStat.getRate(), Statistic.VALUE))); } public void update(String interfaceData, long secondInterval) { diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/net/NetStat.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/net/NetStat.java index 3d3f08b70..48b3d9d7d 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/net/NetStat.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/os/net/NetStat.java @@ -16,7 +16,8 @@ */ package org.apache.servicecomb.metrics.core.meter.os.net; -import com.netflix.spectator.api.Id; + +import io.micrometer.core.instrument.Meter.Id; public class NetStat { private final int index; diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/EndpointMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/EndpointMeter.java index d0ce37bc6..2217c8204 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/EndpointMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/EndpointMeter.java @@ -21,8 +21,10 @@ import java.util.concurrent.TimeUnit; import org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultEndpointMetric; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Measurement; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.Tag; + public class EndpointMeter { private static final double SNV_MILLI_SECONDS = 1.0 / TimeUnit.MILLISECONDS.toNanos(1L); @@ -76,15 +78,15 @@ public class EndpointMeter { private long lastLatency; public EndpointMeter(Id id, DefaultEndpointMetric metric) { - id = id.withTag(ADDRESS, metric.getAddress()); + id = id.withTag(Tag.of(ADDRESS, metric.getAddress())); this.id = id; - idConnect = id.withTag(STATISTIC, CONNECT_COUNT); - idDisconnect = id.withTag(STATISTIC, DISCONNECT_COUNT); - idConnections = id.withTag(STATISTIC, CONNECTIONS); - idBytesRead = id.withTag(STATISTIC, BYTES_READ); - idBytesWritten = id.withTag(STATISTIC, BYTES_WRITTEN); - idRequests = id.withTag(STATISTIC, REQUESTS); - idLatency = id.withTag(STATISTIC, LATENCY); + idConnect = id.withTag(Tag.of(STATISTIC, CONNECT_COUNT); + idDisconnect = id.withTag(Tag.of(STATISTIC, DISCONNECT_COUNT)); + idConnections = id.withTag(Tag.of(STATISTIC, CONNECTIONS)); + idBytesRead = id.withTag(Tag.of(STATISTIC, BYTES_READ)); + idBytesWritten = id.withTag(Tag.of(STATISTIC, BYTES_WRITTEN)); + idRequests = id.withTag(Tag.of(STATISTIC, REQUESTS)); + idLatency = id.withTag(Tag.of(STATISTIC, LATENCY)); this.metric = metric; } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/HttpClientEndpointsMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/HttpClientEndpointsMeter.java index 57430bae4..a8c3c4db9 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/HttpClientEndpointsMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/HttpClientEndpointsMeter.java @@ -20,11 +20,12 @@ import java.util.Map; import org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultEndpointMetric; -import com.netflix.spectator.api.Id; +import io.micrometer.core.instrument.MeterRegistry; public class HttpClientEndpointsMeter extends VertxEndpointsMeter { - public <T extends DefaultEndpointMetric> HttpClientEndpointsMeter(Id id, Map<String, T> endpointMetricMap) { - super(id, endpointMetricMap); + public <T extends DefaultEndpointMetric> HttpClientEndpointsMeter(MeterRegistry meterRegistry, Id id, + Map<String, T> endpointMetricMap) { + super(meterRegistry, id, endpointMetricMap); } @Override diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/VertxEndpointsMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/VertxEndpointsMeter.java index ab7f4d95d..7bed21427 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/VertxEndpointsMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/VertxEndpointsMeter.java @@ -24,17 +24,21 @@ import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx; import org.apache.servicecomb.foundation.metrics.meter.AbstractPeriodMeter; import org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultEndpointMetric; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Measurement; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.MeterRegistry; public class VertxEndpointsMeter extends AbstractPeriodMeter { private final Map<String, DefaultEndpointMetric> endpointMetricMap; + private final MeterRegistry meterRegistry; + private final Map<String, EndpointMeter> endpointMeterMap = new ConcurrentHashMapEx<>(); @SuppressWarnings("unchecked") - public <T extends DefaultEndpointMetric> VertxEndpointsMeter(Id id, Map<String, T> endpointMetricMap) { + public <T extends DefaultEndpointMetric> VertxEndpointsMeter(MeterRegistry meterRegistry, Id id, + Map<String, T> endpointMetricMap) { this.id = id; + this.meterRegistry = meterRegistry; this.endpointMetricMap = (Map<String, DefaultEndpointMetric>) endpointMetricMap; } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultLogPublisher.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultLogPublisher.java index b9d20995b..2f45238d9 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultLogPublisher.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultLogPublisher.java @@ -31,7 +31,6 @@ import org.apache.servicecomb.foundation.metrics.meter.LatencyDistributionConfig import org.apache.servicecomb.foundation.metrics.meter.LatencyScopeConfig; import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementNode; import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementTree; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.apache.servicecomb.foundation.vertx.VertxUtils; import org.apache.servicecomb.metrics.core.VertxMetersInitializer; import org.apache.servicecomb.metrics.core.meter.os.NetMeter; @@ -50,8 +49,9 @@ import org.springframework.core.env.Environment; import com.google.common.base.Strings; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; -import com.netflix.spectator.api.Meter; +import io.micrometer.core.instrument.Meter; +import io.micrometer.core.instrument.MeterRegistry; import io.vertx.core.Vertx; public class DefaultLogPublisher implements MetricsInitializer { @@ -102,7 +102,7 @@ public class DefaultLogPublisher implements MetricsInitializer { } @Override - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + public void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config) { if (!environment.getProperty(ENABLED, boolean.class, false)) { return; } @@ -181,10 +181,10 @@ public class DefaultLogPublisher implements MetricsInitializer { StringBuilder tmpSb = new StringBuilder(); for (MeasurementNode interfaceNode : netNode.getChildren().values()) { - double sendRate = interfaceNode.findChild(NetMeter.TAG_SEND.value()).summary(); - double sendPacketsRate = interfaceNode.findChild(NetMeter.TAG_PACKETS_SEND.value()).summary(); - double receiveRate = interfaceNode.findChild(NetMeter.TAG_RECEIVE.value()).summary(); - double receivePacketsRate = interfaceNode.findChild(NetMeter.TAG_PACKETS_RECEIVE.value()).summary(); + double sendRate = interfaceNode.findChild(NetMeter.TAG_SEND.getValue()).summary(); + double sendPacketsRate = interfaceNode.findChild(NetMeter.TAG_PACKETS_SEND.getValue()).summary(); + double receiveRate = interfaceNode.findChild(NetMeter.TAG_RECEIVE.getValue()).summary(); + double receivePacketsRate = interfaceNode.findChild(NetMeter.TAG_PACKETS_RECEIVE.getValue()).summary(); if (sendRate == 0 && receiveRate == 0 && receivePacketsRate == 0 && sendPacketsRate == 0) { continue; } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishModelFactory.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishModelFactory.java index 69e1d7b3f..68aaad35c 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishModelFactory.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishModelFactory.java @@ -31,9 +31,10 @@ import org.apache.servicecomb.metrics.core.publish.model.DefaultPublishModel; import org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroups; import org.apache.servicecomb.swagger.invocation.InvocationType; -import com.netflix.spectator.api.Meter; import com.netflix.spectator.api.patterns.ThreadPoolMonitorPublishModelFactory; +import io.micrometer.core.instrument.Meter; + public class PublishModelFactory { private final MeasurementTree tree; diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultRegistryInitializer.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultRegistryInitializer.java deleted file mode 100644 index 35fcd4ede..000000000 --- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultRegistryInitializer.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.servicecomb.metrics.core; - -import static org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig.CONFIG_LATENCY_DISTRIBUTION_MIN_SCOPE_LEN; -import static org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig.DEFAULT_METRICS_WINDOW_TIME; -import static org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig.METRICS_WINDOW_TIME; - -import java.util.List; - -import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; -import org.junit.Test; -import org.junit.jupiter.api.Assertions; -import org.mockito.Mockito; -import org.springframework.core.env.Environment; - -import com.google.common.eventbus.EventBus; -import com.netflix.servo.DefaultMonitorRegistry; -import com.netflix.spectator.api.Registry; - -import mockit.Deencapsulation; - -public class TestDefaultRegistryInitializer { - GlobalRegistry globalRegistry = new GlobalRegistry(); - - List<Registry> registries = Deencapsulation.getField(globalRegistry, "registries"); - - DefaultRegistryInitializer registryInitializer = new DefaultRegistryInitializer(); - - Environment environment = Mockito.mock(Environment.class); - - @Test - @SuppressWarnings("deprecation") - public void init() { - Mockito.when(environment.getProperty(METRICS_WINDOW_TIME, int.class, DEFAULT_METRICS_WINDOW_TIME)) - .thenReturn(DEFAULT_METRICS_WINDOW_TIME); - Mockito.when(environment.getProperty( - CONFIG_LATENCY_DISTRIBUTION_MIN_SCOPE_LEN, int.class, 7)) - .thenReturn(7); - registryInitializer.init(globalRegistry, new EventBus(), new MetricsBootstrapConfig(environment)); - - Assertions.assertEquals(-10, registryInitializer.getOrder()); - Assertions.assertTrue(globalRegistry.getDefaultRegistry() instanceof com.netflix.spectator.servo.ServoRegistry); - Assertions.assertEquals(1, registries.size()); - Assertions.assertEquals(0, DefaultMonitorRegistry.getInstance().getRegisteredMonitors().size()); - - registryInitializer.destroy(); - - Assertions.assertEquals(0, registries.size()); - Assertions.assertEquals(0, DefaultMonitorRegistry.getInstance().getRegisteredMonitors().size()); - } - - @Test - public void destroy_notInit() { - // should not throw exception - registryInitializer.destroy(); - } -} diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/meter/os/TestOsMeter.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/meter/os/TestOsMeter.java index 375627d9b..6f71a126d 100644 --- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/meter/os/TestOsMeter.java +++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/meter/os/TestOsMeter.java @@ -28,23 +28,22 @@ import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.servicecomb.metrics.core.meter.os.cpu.CpuUtils; import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.mockito.Mockito; import com.google.common.collect.Lists; import com.google.common.io.CharSource; import com.google.common.io.Files; -import com.netflix.spectator.api.DefaultRegistry; -import com.netflix.spectator.api.ManualClock; -import com.netflix.spectator.api.Measurement; -import com.netflix.spectator.api.Registry; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.MeterRegistry; import mockit.Expectations; import mockit.Mock; import mockit.MockUp; import mockit.Mocked; -import org.junit.jupiter.api.Assertions; public class TestOsMeter { - Registry registry = new DefaultRegistry(new ManualClock()); + MeterRegistry meterRegistry = Mockito.mock(MeterRegistry.class); @Test public void testCalcMeasurement(@Mocked Runtime runtime, @Mocked RuntimeMXBean mxBean, @@ -91,7 +90,7 @@ public class TestOsMeter { result = "1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1"; } }; - OsMeter osMeter = new OsMeter(registry); + OsMeter osMeter = new OsMeter(meterRegistry); list.clear(); list.add("useless"); list.add("useless"); @@ -105,11 +104,11 @@ public class TestOsMeter { osMeter.calcMeasurements(1, 1); ArrayList<Measurement> measurements = Lists.newArrayList(osMeter.measure()); Assertions.assertEquals(6, measurements.size()); - Assertions.assertEquals(0.875, measurements.get(0).value(), 0.0); - Assertions.assertEquals(0.5, measurements.get(1).value(), 0.0); - Assertions.assertEquals(1.0, measurements.get(2).value(), 0.0); - Assertions.assertEquals(1.0, measurements.get(3).value(), 0.0); - Assertions.assertEquals(1.0, measurements.get(4).value(), 0.0); - Assertions.assertEquals(1.0, measurements.get(5).value(), 0.0); + Assertions.assertEquals(0.875, measurements.get(0).getValue(), 0.0); + Assertions.assertEquals(0.5, measurements.get(1).getValue(), 0.0); + Assertions.assertEquals(1.0, measurements.get(2).getValue(), 0.0); + Assertions.assertEquals(1.0, measurements.get(3).getValue(), 0.0); + Assertions.assertEquals(1.0, measurements.get(4).getValue(), 0.0); + Assertions.assertEquals(1.0, measurements.get(5).getValue(), 0.0); } } diff --git a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java index 12ae5041d..19cd28d51 100644 --- a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java +++ b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java @@ -25,18 +25,17 @@ import org.apache.servicecomb.config.BootStrapProperties; import org.apache.servicecomb.foundation.common.exceptions.ServiceCombException; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.foundation.metrics.MetricsInitializer; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import com.google.common.eventbus.EventBus; -import com.netflix.spectator.api.Measurement; -import com.netflix.spectator.api.Meter; -import com.netflix.spectator.api.Registry; -import com.netflix.spectator.api.Tag; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.Meter; +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Tag; import io.prometheus.client.Collector; import io.prometheus.client.Collector.MetricFamilySamples.Sample; import io.prometheus.client.CollectorRegistry; @@ -49,7 +48,7 @@ public class PrometheusPublisher extends Collector implements Collector.Describa private HTTPServer httpServer; - private GlobalRegistry globalRegistry; + private MeterRegistry meterRegistry; private Environment environment; @@ -59,8 +58,8 @@ public class PrometheusPublisher extends Collector implements Collector.Describa } @Override - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { - this.globalRegistry = globalRegistry; + public void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + this.meterRegistry = meterRegistry; //prometheus default port allocation is here : https://github.com/prometheus/prometheus/wiki/Default-port-allocations String address = environment.getProperty(METRICS_PROMETHEUS_ADDRESS, String.class, "0.0.0.0:9696"); @@ -87,18 +86,14 @@ public class PrometheusPublisher extends Collector implements Collector.Describa @Override public List<MetricFamilySamples> describe() { List<MetricFamilySamples> familySamples = new ArrayList<>(); - if (globalRegistry == null) { - return familySamples; - } List<Sample> samples = new ArrayList<>(); - for (Registry registry : globalRegistry.getRegistries()) { - for (Meter meter : registry) { - meter.measure().forEach(measurement -> { - Sample sample = convertMeasurementToSample(measurement); - samples.add(sample); - }); - } + + for (Meter meter : this.meterRegistry.getMeters()) { + meter.measure().forEach(measurement -> { + Sample sample = convertMeasurementToSample(meter, measurement); + samples.add(sample); + }); } familySamples.add(new MetricFamilySamples("ServiceComb_Metrics", Type.UNKNOWN, "ServiceComb Metrics", samples)); @@ -106,20 +101,20 @@ public class PrometheusPublisher extends Collector implements Collector.Describa return familySamples; } - protected Sample convertMeasurementToSample(Measurement measurement) { - String prometheusName = measurement.id().name().replace(".", "_"); + protected Sample convertMeasurementToSample(Meter meter, Measurement measurement) { + String prometheusName = meter.getId().getName().replace(".", "_"); List<String> labelNames = new ArrayList<>(); List<String> labelValues = new ArrayList<>(); labelNames.add("appId"); labelValues.add(BootStrapProperties.readApplication(environment)); - for (Tag tag : measurement.id().tags()) { - labelNames.add(tag.key()); - labelValues.add(tag.value()); + for (Tag tag : meter.getId().getTags()) { + labelNames.add(tag.getKey()); + labelValues.add(tag.getValue()); } - return new Sample(prometheusName, labelNames, labelValues, measurement.value()); + return new Sample(prometheusName, labelNames, labelValues, measurement.getValue()); } @Override diff --git a/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/MetricsEndpointImpl.java b/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/MetricsEndpointImpl.java index 6cb73136d..65103dbb2 100644 --- a/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/MetricsEndpointImpl.java +++ b/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/MetricsEndpointImpl.java @@ -24,38 +24,33 @@ import java.util.stream.StreamSupport; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.foundation.metrics.MetricsInitializer; -import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.apache.servicecomb.provider.rest.common.RestSchema; import com.google.common.eventbus.EventBus; -import com.netflix.spectator.api.Id; -import com.netflix.spectator.api.Meter; -import com.netflix.spectator.api.Registry; + +import io.micrometer.core.instrument.Meter; +import io.micrometer.core.instrument.Meter.Id; +import io.micrometer.core.instrument.MeterRegistry; @RestSchema(schemaId = MetricsEndpoint.NAME, schemaInterface = MetricsEndpoint.class) public class MetricsEndpointImpl implements MetricsInitializer, MetricsEndpoint { - private GlobalRegistry globalRegistry; + private MeterRegistry meterRegistry; @Override - public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { - this.globalRegistry = globalRegistry; + public void init(MeterRegistry meterRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + this.meterRegistry = meterRegistry; } @Override public Map<String, Double> measure() { Map<String, Double> measurements = new LinkedHashMap<>(); - if (globalRegistry == null) { - return measurements; - } - StringBuilder sb = new StringBuilder(); - for (Registry registry : globalRegistry.getRegistries()) { - for (Meter meter : registry) { - meter.measure().forEach(measurement -> { - String key = idToString(measurement.id(), sb); - measurements.put(key, measurement.value()); - }); - } + + for (Meter meter : this.meterRegistry.getMeters()) { + meter.measure().forEach(measurement -> { + String key = idToString(meter.getId(), sb); + measurements.put(key, measurement.getValue()); + }); } return measurements; @@ -65,10 +60,10 @@ public class MetricsEndpointImpl implements MetricsInitializer, MetricsEndpoint // idName(tag1=value1,tag2=value2) protected String idToString(Id id, StringBuilder sb) { sb.setLength(0); - sb.append(id.name()).append('('); + sb.append(id.getName()).append('('); sb.append(StreamSupport .stream(id - .tags() + .getTags() .spliterator(), false) .map(Object::toString) .collect(
