diff --git a/src/metrics.ts b/src/metrics.ts
index 82329d824e84f4633554f2f9f731a6dca289bb39..698c0daf645d88173f8bba3a21cf9cd61d05bfbd 100644
--- a/src/metrics.ts
+++ b/src/metrics.ts
@@ -4,6 +4,7 @@ import { Log } from "./log";
 
 const AgeCounters = PrometheusMetrics.AgeCounters;
 const log = new Log("BridgeMetrics");
+const REQUEST_EXPIRE_TIME_MS = 30000;
 
 interface IAgeCounter {
     setGauge(gauge: Gauge, morelabels: any);
@@ -100,6 +101,13 @@ export class PrometheusBridgeMetrics implements IBridgeMetrics {
             labels: ["outcome"],
         });
         this.requestsInFlight = new Map();
+        setInterval(() => {
+            this.requestsInFlight.forEach((time, id) => {
+                if (Date.now() - time) {
+                    this.requestsInFlight.delete(id);
+                }
+            });
+        }, REQUEST_EXPIRE_TIME_MS)
         return this;
     }
 
@@ -109,6 +117,7 @@ export class PrometheusBridgeMetrics implements IBridgeMetrics {
 
     public requestOutcome(id: string, isRemote: boolean, outcome: string) {
         const startTime = this.requestsInFlight.get(id);
+        this.requestsInFlight.delete(id);
         if (!startTime) {
             log.verbose(`Got "requestOutcome" for ${id}, but this request was never started`);
             return;