diff --git a/src/cli/serve.rs b/src/cli/serve.rs
index 50911db28f826f4f380fe018d291c370965fb457..448b6432761ab00096d55c15adb3ddda3cdb8657 100644
--- a/src/cli/serve.rs
+++ b/src/cli/serve.rs
@@ -33,6 +33,8 @@ pub enum Error {
 type Result<T, E = Error> = std::result::Result<T, E>;
 
 pub async fn serve(config: Arc<Config>) -> Result<()> {
+  MONITOR.init().context(MonitorError)?;
+  
   console_subscriber::init();
 
   // Set up a channel for receiving thread notifications.
diff --git a/src/main.rs b/src/main.rs
index b430f5ad6ef055d141a07b3dbb52aa5b3321211b..9badbb7953bb95aea88574593a6ad691acb0cc32 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -12,19 +12,14 @@ use cli::{
 };
 use collective::{
   cli::ConfigurableAppOpts,
-  thread::monitor::{self, ThreadMonitor},
+  thread::monitor::{self},
 };
 use espresso::{bundle::packager, config, stats};
-use lazy_static::lazy_static;
 use snafu::{ResultExt, Snafu};
 use std::{net::SocketAddr, sync::Arc};
 
 pub mod cli;
 
-lazy_static! {
-  static ref MONITOR: ThreadMonitor = ThreadMonitor::new();
-}
-
 #[derive(Snafu, Debug)]
 pub enum Error {
   OpenConfig {
@@ -69,8 +64,6 @@ async fn main() -> Result<()> {
 }
 
 async fn inner_main() -> Result<()> {
-  MONITOR.init().context(MonitorError)?;
-
   let (opts, config) = Opts::try_init_with_config().context(CliError)?;
 
   let config = Arc::new(config);