diff --git a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwners.java b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwners.java
index 843a054..e248570 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwners.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwners.java
@@ -18,6 +18,7 @@
 
 import com.google.common.base.Throwables;
 import com.google.gerrit.plugins.codeowners.backend.config.CodeOwnersPluginConfiguration;
+import com.google.gerrit.plugins.codeowners.metrics.CodeOwnerMetrics;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.nio.file.Path;
@@ -37,10 +38,14 @@
 @Singleton
 public class CodeOwners {
   private final CodeOwnersPluginConfiguration codeOwnersPluginConfiguration;
+  private final CodeOwnerMetrics codeOwnerMetrics;
 
   @Inject
-  CodeOwners(CodeOwnersPluginConfiguration codeOwnersPluginConfiguration) {
+  CodeOwners(
+      CodeOwnersPluginConfiguration codeOwnersPluginConfiguration,
+      CodeOwnerMetrics codeOwnerMetrics) {
     this.codeOwnersPluginConfiguration = codeOwnersPluginConfiguration;
+    this.codeOwnerMetrics = codeOwnerMetrics;
   }
 
   /**
@@ -54,6 +59,7 @@
   public Optional<CodeOwnerConfig> get(CodeOwnerConfig.Key codeOwnerConfigKey, ObjectId revision) {
     requireNonNull(codeOwnerConfigKey, "codeOwnerConfigKey");
     requireNonNull(revision, "revision");
+    codeOwnerMetrics.countCodeOwnerConfigReads.increment();
     CodeOwnerBackend codeOwnerBackend =
         codeOwnersPluginConfiguration.getBackend(codeOwnerConfigKey.branchNameKey());
     return codeOwnerBackend.getCodeOwnerConfig(codeOwnerConfigKey, revision);
@@ -68,6 +74,7 @@
    */
   public Optional<CodeOwnerConfig> getFromCurrentRevision(CodeOwnerConfig.Key codeOwnerConfigKey) {
     requireNonNull(codeOwnerConfigKey, "codeOwnerConfigKey");
+    codeOwnerMetrics.countCodeOwnerConfigReads.increment();
     CodeOwnerBackend codeOwnerBackend =
         codeOwnersPluginConfiguration.getBackend(codeOwnerConfigKey.branchNameKey());
     return codeOwnerBackend.getCodeOwnerConfig(codeOwnerConfigKey, /* revision= */ null);
diff --git a/java/com/google/gerrit/plugins/codeowners/metrics/CodeOwnerMetrics.java b/java/com/google/gerrit/plugins/codeowners/metrics/CodeOwnerMetrics.java
index be681e6..0b7661e 100644
--- a/java/com/google/gerrit/plugins/codeowners/metrics/CodeOwnerMetrics.java
+++ b/java/com/google/gerrit/plugins/codeowners/metrics/CodeOwnerMetrics.java
@@ -14,6 +14,7 @@
 
 package com.google.gerrit.plugins.codeowners.metrics;
 
+import com.google.gerrit.metrics.Counter0;
 import com.google.gerrit.metrics.Description;
 import com.google.gerrit.metrics.Description.Units;
 import com.google.gerrit.metrics.MetricMaker;
@@ -24,6 +25,7 @@
 /** Metrics of the code-owners plugin. */
 @Singleton
 public class CodeOwnerMetrics {
+  // latency metrics
   public final Timer0 computeChangedFiles;
   public final Timer0 computeFileStatus;
   public final Timer0 computeFileStatuses;
@@ -36,12 +38,16 @@
   public final Timer0 resolvePathCodeOwners;
   public final Timer0 runCodeOwnerSubmitRule;
 
+  // counter metrics
+  public final Counter0 countCodeOwnerConfigReads;
+
   private final MetricMaker metricMaker;
 
   @Inject
   CodeOwnerMetrics(MetricMaker metricMaker) {
     this.metricMaker = metricMaker;
 
+    // latency metrics
     this.computeChangedFiles =
         createLatencyTimer("compute_changed_files", "Latency for computing changed files");
     this.computeFileStatus =
@@ -79,6 +85,10 @@
     this.runCodeOwnerSubmitRule =
         createLatencyTimer(
             "run_code_owner_submit_rule", "Latency for running the code owner submit rule");
+
+    // counter metrics
+    this.countCodeOwnerConfigReads =
+        createCounter("count_code_owner_config_reads", "Total number of code owner config reads");
   }
 
   private Timer0 createLatencyTimer(String name, String description) {
@@ -86,4 +96,8 @@
         "code_owners/" + name,
         new Description(description).setCumulative().setUnit(Units.MILLISECONDS));
   }
+
+  private Counter0 createCounter(String name, String description) {
+    return metricMaker.newCounter("code_owners/" + name, new Description(description).setRate());
+  }
 }
diff --git a/resources/Documentation/metrics.md b/resources/Documentation/metrics.md
index 55bb736..eda1fbe 100644
--- a/resources/Documentation/metrics.md
+++ b/resources/Documentation/metrics.md
@@ -28,6 +28,11 @@
 * `run_code_owner_submit_rule`:
   Latency for running the code owner submit rule.
 
+## <a id="counterMetrics"> Counter Metrics
+
+* `count_code_owner_config_reads`:
+  Total number of code owner config reads.
+
 ---
 
 Back to [@PLUGIN@ documentation index](index.html)
