diff --git a/substrate/utils/prometheus/src/lib.rs b/substrate/utils/prometheus/src/lib.rs
index 581666635ab54698d0426bc80007e245ee8568fe..ed1f9137aec4efad97218b2340e49436a05fd577 100644
--- a/substrate/utils/prometheus/src/lib.rs
+++ b/substrate/utils/prometheus/src/lib.rs
@@ -111,10 +111,16 @@ async fn init_prometheus_with_listener(
 		}
 	});
 
-	let server = Server::builder(listener).serve(service);
+	let (signal, on_exit) = tokio::sync::oneshot::channel::<()>();
+	let server = Server::builder(listener).serve(service).with_graceful_shutdown(async {
+		let _ = on_exit.await;
+	});
 
 	let result = server.await.map_err(Into::into);
 
+	// Gracefully shutdown server, otherwise the server does not stop if it has open connections
+	let _ = signal.send(());
+
 	result
 }