diff --git a/governance/pom.xml b/governance/pom.xml
index 90f7eef..60eb64d 100644
--- a/governance/pom.xml
+++ b/governance/pom.xml
@@ -31,6 +31,10 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>foundation-common</artifactId>
+    </dependency>
+    <dependency>
       <groupId>io.github.resilience4j</groupId>
       <artifactId>resilience4j-all</artifactId>
     </dependency>
@@ -40,7 +44,7 @@
     </dependency>
     <dependency>
       <groupId>io.micrometer</groupId>
-      <artifactId>micrometer-registry-prometheus</artifactId>
+      <artifactId>micrometer-core</artifactId>
     </dependency>
     <dependency>
       <groupId>org.aspectj</groupId>
@@ -86,8 +90,9 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>foundation-common</artifactId>
+      <groupId>io.micrometer</groupId>
+      <artifactId>micrometer-registry-prometheus</artifactId>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 </project>
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java b/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
index 5048618..65f2711 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
@@ -78,6 +78,7 @@
           .ofCircuitBreakerRegistry(circuitBreakerRegistry)
           .bindTo(meterRegistry);
     }
-    return circuitBreakerRegistry.circuitBreaker(policy.getName(), circuitBreakerConfig);
+    return circuitBreakerRegistry.circuitBreaker(
+        CircuitBreakerProperties.MATCH_CIRCUITBREAKER_KEY + "." + policy.getName(), circuitBreakerConfig);
   }
 }
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
index 8ab3333..ade1987 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
@@ -106,6 +106,8 @@
           .ofCircuitBreakerRegistry(circuitBreakerRegistry)
           .bindTo(meterRegistry);
     }
-    return circuitBreakerRegistry.circuitBreaker(governanceRequest.getInstanceId(), circuitBreakerConfig);
+    return circuitBreakerRegistry.circuitBreaker(InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY
+        + "." + governanceRequest.getServiceName()
+        + "." + governanceRequest.getInstanceId(), circuitBreakerConfig);
   }
 }
diff --git a/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java b/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
index 86b19bf..a97c3c6 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
@@ -111,24 +111,24 @@
   private void assertMetricsNotFinish() {
     String result = ((PrometheusMeterRegistry) meterRegistry).scrape();
     Assertions.assertTrue(result.contains(
-        "resilience4j_circuitbreaker_state{name=\"instance01\",state=\"open\",} 1.0"));
+        "resilience4j_circuitbreaker_state{name=\"servicecomb.instanceIsolation.service01.instance01\",state=\"open\",} 1.0"));
     Assertions.assertTrue(result.contains(
-        "resilience4j_circuitbreaker_state{name=\"instance02\",state=\"closed\",} 1.0"));
+        "resilience4j_circuitbreaker_state{name=\"servicecomb.instanceIsolation.service01.instance02\",state=\"closed\",} 1.0"));
     Assertions.assertTrue(result.contains(
-        "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance01\",} 1.0"));
+        "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"servicecomb.instanceIsolation.service01.instance01\",} 1.0"));
     Assertions.assertTrue(result.contains(
-        "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance02\",} 4.0"));
+        "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"servicecomb.instanceIsolation.service01.instance02\",} 4.0"));
   }
 
   private void assertMetricsFinish() {
     String result = ((PrometheusMeterRegistry) meterRegistry).scrape();
     Assertions.assertTrue(result.contains(
-        "resilience4j_circuitbreaker_state{name=\"instance01\",state=\"closed\",} 1.0"));
+        "resilience4j_circuitbreaker_state{name=\"servicecomb.instanceIsolation.service01.instance01\",state=\"closed\",} 1.0"));
     Assertions.assertTrue(result.contains(
-        "resilience4j_circuitbreaker_state{name=\"instance02\",state=\"closed\",} 1.0"));
+        "resilience4j_circuitbreaker_state{name=\"servicecomb.instanceIsolation.service01.instance02\",state=\"closed\",} 1.0"));
     Assertions.assertTrue(result.contains(
-        "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance01\",} 3.0"));
+        "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"servicecomb.instanceIsolation.service01.instance01\",} 3.0"));
     Assertions.assertTrue(result.contains(
-        "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance02\",} 6.0"));
+        "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"servicecomb.instanceIsolation.service01.instance02\",} 6.0"));
   }
 }
diff --git a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DataFactory.java b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DataFactory.java
index 67f94c2..12ba905 100644
--- a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DataFactory.java
+++ b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DataFactory.java
@@ -26,7 +26,7 @@
 import javax.inject.Inject;
 
 import org.apache.servicecomb.huaweicloud.dashboard.monitor.data.MonitorConstant;
-import org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDaraProvider;
+import org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataProvider;
 import org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataPublisher;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -41,7 +41,7 @@
   private boolean hasStart = false;
 
   @Inject
-  private List<MonitorDaraProvider> dataProviders;
+  private List<MonitorDataProvider> dataProviders;
 
   @Inject
   private MonitorDataPublisher publisher;
@@ -54,7 +54,7 @@
     executorService = Executors.newScheduledThreadPool(CORE_SIZE, threadFactory);
   }
 
-  public void setMonitorDataProviders(List<MonitorDaraProvider> dataProviders) {
+  public void setMonitorDataProviders(List<MonitorDataProvider> dataProviders) {
     this.dataProviders = dataProviders;
   }
 
@@ -68,7 +68,7 @@
 
       StringBuilder sb = new StringBuilder();
       sb.append("Monitor data sender started. Configured data providers is {");
-      for (MonitorDaraProvider provider : dataProviders) {
+      for (MonitorDataProvider provider : dataProviders) {
         sb.append(provider.getClass().getName());
         sb.append(",");
       }
@@ -87,7 +87,7 @@
   }
 
   void sendData() {
-    for (MonitorDaraProvider provider : this.dataProviders) {
+    for (MonitorDataProvider provider : this.dataProviders) {
       if (provider.enabled()) {
         this.publisher.publish(provider);
       }
diff --git a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DefaultMonitorDataPublisher.java b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DefaultMonitorDataPublisher.java
index 70b6e44..de350f7 100644
--- a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DefaultMonitorDataPublisher.java
+++ b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/DefaultMonitorDataPublisher.java
@@ -42,7 +42,7 @@
 import org.apache.servicecomb.http.client.common.HttpTransport;
 import org.apache.servicecomb.http.client.common.HttpTransportFactory;
 import org.apache.servicecomb.huaweicloud.dashboard.monitor.data.MonitorConstant;
-import org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDaraProvider;
+import org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataProvider;
 import org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataPublisher;
 
 public class DefaultMonitorDataPublisher implements MonitorDataPublisher {
@@ -118,7 +118,7 @@
   }
 
   @Override
-  public void publish(MonitorDaraProvider provider) {
+  public void publish(MonitorDataProvider provider) {
     dashboardClient.sendData(provider.getURL(), provider.getData());
   }
 }
diff --git a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/HealthMonitorDataProvider.java b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/HealthMonitorDataProvider.java
index 7f0c9dd..1a00cc5 100644
--- a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/HealthMonitorDataProvider.java
+++ b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/HealthMonitorDataProvider.java
@@ -23,7 +23,7 @@
 
 import org.apache.servicecomb.dashboard.client.model.InterfaceInfo;
 import org.apache.servicecomb.dashboard.client.model.MonitorData;
-import org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDaraProvider;
+import org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataProvider;
 
 import com.netflix.config.DynamicPropertyFactory;
 import com.netflix.hystrix.HystrixCircuitBreaker;
@@ -34,7 +34,7 @@
  * This provider depends on bizkeeper. Because Bizkeeper depends on Hystrix
  * and it is not in maintainence, will keep it here for compatible reason.
  */
-public class HealthMonitorDataProvider implements MonitorDaraProvider {
+public class HealthMonitorDataProvider implements MonitorDataProvider {
   @Override
   public boolean enabled() {
     return DynamicPropertyFactory.getInstance()
diff --git a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProvider.java b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProvider.java
index 6c0b4c7..ea8f2de 100644
--- a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProvider.java
+++ b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProvider.java
@@ -24,7 +24,7 @@
 import org.apache.servicecomb.dashboard.client.model.MonitorData;
 import org.apache.servicecomb.foundation.common.event.EventManager;
 import org.apache.servicecomb.foundation.metrics.PolledEvent;
-import org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDaraProvider;
+import org.apache.servicecomb.huaweicloud.dashboard.monitor.model.MonitorDataProvider;
 import org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst;
 import org.apache.servicecomb.metrics.core.publish.PublishModelFactory;
 import org.apache.servicecomb.metrics.core.publish.model.DefaultPublishModel;
@@ -40,7 +40,7 @@
 /**
  * Monitor data based on metrics-core module.
  */
-public class MetricsMonitorDataProvider implements MonitorDaraProvider {
+public class MetricsMonitorDataProvider implements MonitorDataProvider {
 
   public static final String CODE_SUCCESS = "2[0-9]{2}";
 
diff --git a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDaraProvider.java b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataProvider.java
similarity index 98%
rename from huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDaraProvider.java
rename to huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataProvider.java
index bfe2155..ced4598 100644
--- a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDaraProvider.java
+++ b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataProvider.java
@@ -33,7 +33,7 @@
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 
-public interface MonitorDaraProvider {
+public interface MonitorDataProvider {
   boolean enabled();
 
   default String getURL() {
diff --git a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataPublisher.java b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataPublisher.java
index a5b1012..7876c2e 100644
--- a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataPublisher.java
+++ b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/model/MonitorDataPublisher.java
@@ -18,7 +18,7 @@
 package org.apache.servicecomb.huaweicloud.dashboard.monitor.model;
 
 public interface MonitorDataPublisher {
-  void publish(MonitorDaraProvider provider);
+  void publish(MonitorDataProvider provider);
 
   default void init() {
 
diff --git a/huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDaraProviderTest.java b/huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProviderTest.java
similarity index 96%
rename from huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDaraProviderTest.java
rename to huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProviderTest.java
index c3a1a55..c5411fe 100644
--- a/huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDaraProviderTest.java
+++ b/huawei-cloud/dashboard/src/test/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/MetricsMonitorDataProviderTest.java
@@ -19,7 +19,7 @@
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-public class MetricsMonitorDaraProviderTest {
+public class MetricsMonitorDataProviderTest {
   @Test
   public void testCodeMatch() {
     Assertions.assertTrue("200".matches(MetricsMonitorDataProvider.CODE_SUCCESS));
diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java
index 64a191b..ef37c4f 100644
--- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java
@@ -17,8 +17,6 @@
 package org.apache.servicecomb.metrics.core.publish;
 
 import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.RunnableScheduledFuture;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.ThreadPoolExecutor;
 
 import org.apache.servicecomb.foundation.common.utils.JsonUtils;
@@ -28,9 +26,7 @@
 import org.junit.jupiter.api.Assertions;
 import org.junit.runners.MethodSorters;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.common.collect.Lists;
-import com.google.common.eventbus.EventBus;
 import com.netflix.spectator.api.DefaultRegistry;
 import com.netflix.spectator.api.ManualClock;
 import com.netflix.spectator.api.Registry;
@@ -38,24 +34,18 @@
 import com.netflix.spectator.api.patterns.ThreadPoolMonitor;
 
 import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
+import mockit.Injectable;
 import mockit.Mocked;
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class TestThreadPoolPublishModelFactory {
-  protected EventBus eventBus = new EventBus();
-
   protected Registry registry = new DefaultRegistry(new ManualClock());
 
   @Mocked
-  ThreadPoolExecutor threadPoolExecutor;
-
-  @Mocked
   BlockingQueue<Runnable> queue;
 
   @Test
-  public void createDefaultPublishModel() throws JsonProcessingException {
+  public void createDefaultPublishModel(@Injectable ThreadPoolExecutor threadPoolExecutor) throws Exception {
     new Expectations() {
       {
         threadPoolExecutor.getQueue();
@@ -64,25 +54,15 @@
         result = 10d;
       }
     };
-    new MockUp<ScheduledThreadPoolExecutor>() {
-      @Mock
-      void delayedExecute(RunnableScheduledFuture<?> task) {
 
-      }
-    };
-    try {
-      ThreadPoolMonitor.attach(registry, threadPoolExecutor, "test");
+    ThreadPoolMonitor.attach(registry, threadPoolExecutor, "test");
 
-      PolledMeter.update(registry);
-      PublishModelFactory factory = new PublishModelFactory(Lists.newArrayList(registry.iterator()));
-      DefaultPublishModel model = factory.createDefaultPublishModel();
+    PolledMeter.update(registry);
+    PublishModelFactory factory = new PublishModelFactory(Lists.newArrayList(registry.iterator()));
+    DefaultPublishModel model = factory.createDefaultPublishModel();
 
-      Assertions.assertEquals(
-          "{\"test\":{\"avgTaskCount\":0.0,\"avgCompletedTaskCount\":0.0,\"currentThreadsBusy\":0,\"maxThreads\":0,\"poolSize\":0,\"corePoolSize\":0,\"queueSize\":10,\"rejected\":\"NaN\"}}",
-          JsonUtils.writeValueAsString(model.getThreadPools()));
-    } catch (Throwable e) {
-      e.printStackTrace();
-      Assertions.fail("unexpected error happen. " + e.getMessage());
-    }
+    Assertions.assertEquals(
+        "{\"test\":{\"avgTaskCount\":0.0,\"avgCompletedTaskCount\":0.0,\"currentThreadsBusy\":0,\"maxThreads\":0,\"poolSize\":0,\"corePoolSize\":0,\"queueSize\":10,\"rejected\":\"NaN\"}}",
+        JsonUtils.writeValueAsString(model.getThreadPools()));
   }
 }
