diff --git a/main.go b/main.go
index e02213e772c398407658619db48ed6341244de81..6efd689f828c505c7df7851c6abe1c503727ef91 100644
--- a/main.go
+++ b/main.go
@@ -70,6 +70,13 @@ func main() {
 		}
 	}()
 
+	go func() {
+		err := server.StartPrometheusServer()
+		if err != nil {
+			log.Printf("failed to start prometheus server: %v", err)
+		}
+	}()
+
 	// infinite loop
 	log.Printf("Entering infinite loop")
 	select {}
diff --git a/server/server.go b/server/server.go
index 5b5e8407c18faa2cec8a807bfee5ce32d75b1bf4..f24dba110d18f0d06ec4f360397d5050f2b94cf6 100644
--- a/server/server.go
+++ b/server/server.go
@@ -27,6 +27,7 @@ import (
 	"sync"
 
 	"github.com/prometheus/client_golang/prometheus"
+	"github.com/prometheus/client_golang/prometheus/promhttp"
 
 	"code.vereign.com/code/viam-apis/errors"
 
@@ -258,3 +259,19 @@ func StartRESTServer(address, grpcAddress string, certPEM []byte) error {
 
 	return nil
 }
+
+func StartPrometheusServer() error {
+	if config.PrometeusListenAddress != "" {
+		// start prometheus
+		promHandler := http.NewServeMux()
+		promHandler.Handle("/metrics", promhttp.Handler())
+		log.Println("Starting prometheus...")
+		err := http.ListenAndServe(config.PrometeusListenAddress, promHandler)
+
+		if err != nil {
+			return err
+		}
+	}
+
+	return nil
+}