diff --git a/hosts/plover/default.nix b/hosts/plover/default.nix
index 25d6ea28..eea959c6 100644
--- a/hosts/plover/default.nix
+++ b/hosts/plover/default.nix
@@ -33,6 +33,7 @@ in
     ./modules/services/vouch-proxy.nix
 
     # The monitoring stack.
+    ./modules/services/prometheus.nix
     ./modules/services/grafana.nix
 
     # The database of choice which is used by most self-managed services on
diff --git a/hosts/plover/modules/services/prometheus.nix b/hosts/plover/modules/services/prometheus.nix
new file mode 100644
index 00000000..fbae26c1
--- /dev/null
+++ b/hosts/plover/modules/services/prometheus.nix
@@ -0,0 +1,43 @@
+{ config, lib, pkgs, ... }:
+
+let
+  bindStatsPort = 8053;
+  prometheusExports = config.services.prometheus.exporters;
+in
+{
+  services.prometheus = {
+    enable = true;
+
+    exporters = {
+      bind = {
+        enable = true;
+        bindURI = "http://127.0.0.1/${builtins.toString bindStatsPort}";
+      };
+
+      nginx.enable = true;
+      nginxlog.enable = true;
+
+      node = {
+        enable = true;
+        enabledCollectors = [ "systemd" ];
+      };
+    };
+
+    scrapeConfigs = [
+      {
+        job_name = config.networking.hostName;
+        static_configs = [{
+          targets = [ "127.0.0.1:${builtins.toString prometheusExports.node.port}" ];
+        }];
+      }
+    ];
+  };
+
+  # Requiring this for Prometheus being able to monitor my services.
+  services.nginx.statusPage = true;
+  services.bind.extraConfig = ''
+    statistics-channels {
+      inet 127.0.0.1 port ${builtins.toString bindStatsPort} allow { 127.0.0.1; };
+    };
+  '';
+}