diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCache.java b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCache.java
index f1d46b2..ced3ab2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCache.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCache.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.gitrepometrics;
 
+import com.codahale.metrics.MetricRegistry;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Supplier;
 import com.google.common.collect.Maps;
@@ -33,6 +34,7 @@
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private Map<String, Long> metrics;
   private final MetricMaker metricMaker;
+  private final MetricRegistry metricRegistry;
   private final List<String> projects;
   private Map<String, Long> collectedAt;
   private final long gracePeriodMs;
@@ -42,8 +44,13 @@
   public static List<GitRepoMetric> metricsNames = new ArrayList<>(GitStats.availableMetrics());
 
   @VisibleForTesting
-  GitRepoMetricsCache(MetricMaker metricMaker, GitRepoMetricsConfig config, Clock clock) {
+  GitRepoMetricsCache(
+      MetricMaker metricMaker,
+      MetricRegistry metricRegistry,
+      GitRepoMetricsConfig config,
+      Clock clock) {
     this.metricMaker = metricMaker;
+    this.metricRegistry = metricRegistry;
     this.projects = config.getRepositoryNames();
     this.metrics = Maps.newHashMap();
     this.collectedAt = Maps.newHashMap();
@@ -52,8 +59,9 @@
   }
 
   @Inject
-  GitRepoMetricsCache(MetricMaker metricMaker, GitRepoMetricsConfig config) {
-    this(metricMaker, config, Clock.systemDefaultZone());
+  GitRepoMetricsCache(
+      MetricMaker metricMaker, MetricRegistry metricRegistry, GitRepoMetricsConfig config) {
+    this(metricMaker, metricRegistry, config, Clock.systemDefaultZone());
   }
 
   public Map<String, Long> getMetrics() {
@@ -88,13 +96,19 @@
                       }
                     };
 
-                metricMaker.newCallbackMetric(
-                    name,
-                    Long.class,
-                    new Description(gitRepoMetric.getDescription())
-                        .setRate()
-                        .setUnit(gitRepoMetric.getUnit()),
-                    supplier);
+                if (!metricRegistry
+                    .getMetrics()
+                    .containsKey(
+                        GitRepoMetricsCache.getFullyQualifiedMetricName(
+                            gitRepoMetric.getName(), projectName))) {
+                  metricMaker.newCallbackMetric(
+                      name,
+                      Long.class,
+                      new Description(gitRepoMetric.getDescription())
+                          .setRate()
+                          .setUnit(gitRepoMetric.getUnit()),
+                      supplier);
+                }
               });
         });
   }
@@ -103,6 +117,12 @@
     return String.format("%s_%s", metricName, projectName).toLowerCase(Locale.ROOT);
   }
 
+  @VisibleForTesting
+  static String getFullyQualifiedMetricName(String metricName, String projectName) {
+    return String.format(
+        "%s/%s/%s", "plugins", "git-repo-metrics", getMetricName(metricName, projectName));
+  }
+
   public boolean shouldCollectStats(String projectName) {
     long lastCollectionTime = collectedAt.getOrDefault(projectName, 0L);
     long currentTimeMs = System.currentTimeMillis();
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheTest.java b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheTest.java
index 70c2dd9..dcd9a88 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheTest.java
@@ -16,6 +16,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import com.codahale.metrics.Metric;
+import com.codahale.metrics.MetricRegistry;
 import com.google.common.collect.ImmutableMap;
 import com.google.gerrit.metrics.CallbackMetric0;
 import com.google.gerrit.metrics.Description;
@@ -45,7 +47,30 @@
   public void shouldRegisterMetrics() throws IOException {
     gitRepoMetricsConfig = configSetupUtils.getGitRepoMetricsConfig();
     fakeMetricMaker = new FakeMetricMaker();
-    gitRepoMetricsCache = new GitRepoMetricsCache(fakeMetricMaker, gitRepoMetricsConfig);
+    gitRepoMetricsCache =
+        new GitRepoMetricsCache(fakeMetricMaker, new MetricRegistry(), gitRepoMetricsConfig);
+    gitRepoMetricsCache.initCache();
+    assertThat(fakeMetricMaker.callsCounter).isEqualTo(GitStats.availableMetrics().size());
+  }
+
+  @Test
+  public void shouldRegisterMetricsOnlyOnce() throws IOException {
+    gitRepoMetricsConfig = configSetupUtils.getGitRepoMetricsConfig();
+    MetricRegistry metricRegistry = new MetricRegistry();
+    fakeMetricMaker = new FakeMetricMaker();
+    gitRepoMetricsCache =
+        new GitRepoMetricsCache(fakeMetricMaker, metricRegistry, gitRepoMetricsConfig);
+
+    gitRepoMetricsCache.initCache();
+    assertThat(fakeMetricMaker.callsCounter).isEqualTo(GitStats.availableMetrics().size());
+
+    GitRepoMetricsCache.metricsNames.forEach(
+        gitRepoMetric ->
+            metricRegistry.register(
+                GitRepoMetricsCache.getFullyQualifiedMetricName(
+                    gitRepoMetric.getName(), enabledRepo),
+                new FakeMetric()));
+
     gitRepoMetricsCache.initCache();
     assertThat(fakeMetricMaker.callsCounter).isEqualTo(GitStats.availableMetrics().size());
   }
@@ -53,7 +78,8 @@
   @Test
   public void shouldCollectStatsForEnabledRepo() throws IOException {
     gitRepoMetricsConfig = configSetupUtils.getGitRepoMetricsConfig();
-    gitRepoMetricsCache = new GitRepoMetricsCache(new FakeMetricMaker(), gitRepoMetricsConfig);
+    gitRepoMetricsCache =
+        new GitRepoMetricsCache(new FakeMetricMaker(), new MetricRegistry(), gitRepoMetricsConfig);
 
     assertThat(gitRepoMetricsCache.shouldCollectStats(enabledRepo)).isTrue();
   }
@@ -62,7 +88,8 @@
   public void shouldNotCollectStatsForDisabledRepo() throws IOException {
     String disabledRepo = "disabledRepo";
     gitRepoMetricsConfig = configSetupUtils.getGitRepoMetricsConfig();
-    gitRepoMetricsCache = new GitRepoMetricsCache(new FakeMetricMaker(), gitRepoMetricsConfig);
+    gitRepoMetricsCache =
+        new GitRepoMetricsCache(new FakeMetricMaker(), new MetricRegistry(), gitRepoMetricsConfig);
 
     assertThat(gitRepoMetricsCache.shouldCollectStats(disabledRepo)).isFalse();
   }
@@ -72,7 +99,8 @@
     ConfigSetupUtils configSetupUtils =
         new ConfigSetupUtils(Collections.singletonList(enabledRepo));
     gitRepoMetricsConfig = configSetupUtils.getGitRepoMetricsConfig();
-    gitRepoMetricsCache = new GitRepoMetricsCache(new FakeMetricMaker(), gitRepoMetricsConfig);
+    gitRepoMetricsCache =
+        new GitRepoMetricsCache(new FakeMetricMaker(), new MetricRegistry(), gitRepoMetricsConfig);
 
     gitRepoMetricsCache.setMetrics(ImmutableMap.of("anyMetric", 0L), enabledRepo);
 
@@ -84,7 +112,8 @@
     ConfigSetupUtils configSetupUtils =
         new ConfigSetupUtils(Collections.singletonList(enabledRepo), "5 m");
     gitRepoMetricsConfig = configSetupUtils.getGitRepoMetricsConfig();
-    gitRepoMetricsCache = new GitRepoMetricsCache(new FakeMetricMaker(), gitRepoMetricsConfig);
+    gitRepoMetricsCache =
+        new GitRepoMetricsCache(new FakeMetricMaker(), new MetricRegistry(), gitRepoMetricsConfig);
 
     gitRepoMetricsCache.setMetrics(ImmutableMap.of("anyMetric", 0L), enabledRepo);
 
@@ -99,6 +128,7 @@
     gitRepoMetricsCache =
         new GitRepoMetricsCache(
             new FakeMetricMaker(),
+            new MetricRegistry(),
             gitRepoMetricsConfig,
             Clock.fixed(
                 Instant.now().minus(2, ChronoUnit.SECONDS), Clock.systemDefaultZone().getZone()));
@@ -113,7 +143,8 @@
     ConfigSetupUtils configSetupUtils =
         new ConfigSetupUtils(Collections.singletonList(enabledRepo));
     gitRepoMetricsConfig = configSetupUtils.getGitRepoMetricsConfig();
-    gitRepoMetricsCache = new GitRepoMetricsCache(new FakeMetricMaker(), gitRepoMetricsConfig);
+    gitRepoMetricsCache =
+        new GitRepoMetricsCache(new FakeMetricMaker(), new MetricRegistry(), gitRepoMetricsConfig);
 
     long currentTimeStamp = System.currentTimeMillis();
 
@@ -144,4 +175,8 @@
       };
     }
   }
+
+  private class FakeMetric implements Metric {
+    FakeMetric() {}
+  }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java
index 0747b23..f6cdb11 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java
@@ -19,6 +19,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.reset;
 
+import com.codahale.metrics.MetricRegistry;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.api.changes.NotifyHandling;
@@ -64,7 +65,9 @@
         new ConfigSetupUtils(Collections.singletonList(testProject));
     gitRepoMetricsCache =
         new GitRepoMetricsCache(
-            new DisabledMetricMaker(), configSetupUtils.getGitRepoMetricsConfig());
+            new DisabledMetricMaker(),
+            new MetricRegistry(),
+            configSetupUtils.getGitRepoMetricsConfig());
 
     AbstractModule m =
         new AbstractModule() {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/UpdateGitMetricsTaskTest.java b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/UpdateGitMetricsTaskTest.java
index d27c22f..45fb988 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/UpdateGitMetricsTaskTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/UpdateGitMetricsTaskTest.java
@@ -17,6 +17,7 @@
 import static com.google.common.truth.Truth.assertThat;
 import static java.nio.file.Files.delete;
 
+import com.codahale.metrics.MetricRegistry;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.metrics.DisabledMetricMaker;
 import com.google.gerrit.server.config.GerritServerConfig;
@@ -49,7 +50,9 @@
     ConfigSetupUtils configSetupUtils = new ConfigSetupUtils(Collections.singletonList("repo1"));
     gitRepoMetricsCache =
         new GitRepoMetricsCache(
-            new DisabledMetricMaker(), configSetupUtils.getGitRepoMetricsConfig());
+            new DisabledMetricMaker(),
+            new MetricRegistry(),
+            configSetupUtils.getGitRepoMetricsConfig());
 
     AbstractModule m =
         new AbstractModule() {
