diff --git a/cfg/cfg.go b/cfg/cfg.go
index 9628632..56ab3d5 100644
--- a/cfg/cfg.go
+++ b/cfg/cfg.go
@@ -11,6 +11,7 @@ import (
 
 var cliStruct struct {
 	VersionMode          bool   `name:"version" short:"v" help:"Show version info and exit"`
+	DryRunMode           bool   `name:"dry-run" help:"Attempt to connect to the fail2ban socket then exit before starting the server"`
 	ServerAddress        string `name:"web.listen-address" env:"F2B_WEB_LISTEN_ADDRESS" help:"Address to use for the metrics server" default:"${default_address}"`
 	F2bSocketPath        string `name:"collector.f2b.socket" env:"F2B_COLLECTOR_SOCKET" help:"Path to the fail2ban server socket" default:"${default_socket}"`
 	ExitOnSocketError    bool   `name:"collector.f2b.exit-on-socket-connection-error" env:"F2B_EXIT_ON_SOCKET_CONN_ERROR" help:"When set to true the exporter will immediately exit on a fail2ban socket connection error"`
@@ -34,6 +35,7 @@ func Parse() *AppSettings {
 	validateFlags(ctx)
 	settings := &AppSettings{
 		VersionMode:           cliStruct.VersionMode,
+		DryRunMode:            cliStruct.DryRunMode,
 		MetricsAddress:        cliStruct.ServerAddress,
 		Fail2BanSocketPath:    cliStruct.F2bSocketPath,
 		FileCollectorPath:     cliStruct.TextFileExporterPath,
diff --git a/cfg/settings.go b/cfg/settings.go
index 519f8e0..8ecf998 100644
--- a/cfg/settings.go
+++ b/cfg/settings.go
@@ -4,6 +4,7 @@ import "gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/auth"
 
 type AppSettings struct {
 	VersionMode           bool
+	DryRunMode            bool
 	MetricsAddress        string
 	Fail2BanSocketPath    string
 	FileCollectorPath     string
diff --git a/exporter.go b/exporter.go
index e3947c9..6e7ae25 100644
--- a/exporter.go
+++ b/exporter.go
@@ -30,20 +30,25 @@ func main() {
 	appSettings := cfg.Parse()
 	if appSettings.VersionMode {
 		printAppVersion()
-	} else {
-		handleGracefulShutdown()
-		log.Printf("fail2ban exporter version %s", version)
-		log.Printf("starting server at %s", appSettings.MetricsAddress)
+		return
+	}
 
-		f2bCollector := f2b.NewExporter(appSettings, version)
-		prometheus.MustRegister(f2bCollector)
+	handleGracefulShutdown()
+	log.Printf("fail2ban exporter version %s", version)
+	log.Printf("starting server at %s", appSettings.MetricsAddress)
 
-		textFileCollector := textfile.NewCollector(appSettings)
-		prometheus.MustRegister(textFileCollector)
+	f2bCollector := f2b.NewExporter(appSettings, version)
+	prometheus.MustRegister(f2bCollector)
 
+	textFileCollector := textfile.NewCollector(appSettings)
+	prometheus.MustRegister(textFileCollector)
+
+	if !appSettings.DryRunMode {
 		svrErr := server.StartServer(appSettings, textFileCollector)
 		err := <-svrErr
 		log.Fatal(err)
+	} else {
+		log.Print("running in dry-run mode - exiting")
 	}
 }