summary refs log tree commit diff
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-12-22 22:41:25 +0100
committerMel <einebeere@gmail.com>2024-12-22 22:41:25 +0100
commit778e23735053e935c3af00490561fe65b8c7d02c (patch)
tree582e6a0a5c3a7d8490828db201e8aa98607db185
parent6163fa5b5926dd4a456b9fd07e05f9ec1f49d613 (diff)
downloadnetwork-778e23735053e935c3af00490561fe65b8c7d02c.tar.zst
network-778e23735053e935c3af00490561fe65b8c7d02c.zip
Break up monitoring module
Signed-off-by: Mel <einebeere@gmail.com>
-rw-r--r--modules/foundation/default.nix2
-rw-r--r--modules/foundation/monitoring.nix94
-rw-r--r--modules/foundation/monitoring/client.nix33
-rw-r--r--modules/foundation/monitoring/default.nix52
-rw-r--r--modules/foundation/monitoring/server.nix47
5 files changed, 133 insertions, 95 deletions
diff --git a/modules/foundation/default.nix b/modules/foundation/default.nix
index 253bff3..62c6f85 100644
--- a/modules/foundation/default.nix
+++ b/modules/foundation/default.nix
@@ -3,6 +3,6 @@
 {
   imports = [
     ./services.nix
-    ./monitoring.nix
+    ./monitoring
   ];
 }
diff --git a/modules/foundation/monitoring.nix b/modules/foundation/monitoring.nix
deleted file mode 100644
index 16a729d..0000000
--- a/modules/foundation/monitoring.nix
+++ /dev/null
@@ -1,94 +0,0 @@
-{ me, config, lib, ... }:
-
-let
-  inherit (lib) mkOption mkEnableOption types;
-
-  cfg = config.foundation.monitoring;
-
-  victoriaDefaultPort = 8428;
-  nodeExporterPort = 9001;
-  cadvisorExporterPort = 9002;
-  nginxExporterPort = 9113;
-  dockerExporterPort = 9323;
-in
-{
-  imports = [ ../../services/monitoring/wrapper.nix ];
-
-  options.foundation.monitoring = {
-    server = {
-      enable = mkEnableOption "monitoring server";
-
-      hosts = mkOption {
-        type = with types; listOf (submodule {
-          options = {
-            name = mkOption { type = str; };
-            ip = mkOption { type = str; };
-          };
-        });
-        default = [ ];
-      };
-    };
-
-    client = {
-      enable = mkEnableOption "monitoring client";
-    };
-  };
-
-  config = lib.mkMerge [
-    (lib.mkIf cfg.server.enable {
-      foundation.internal.monitoringService = true;
-
-      services.vmagent = {
-        enable = true;
-        remoteWrite.url = "http://${me.tailscale.ip}:${toString victoriaDefaultPort}/api/v1/write";
-
-        prometheusConfig = {
-          global = {
-            scrape_interval = "15s";
-          };
-
-          scrape_configs = let
-            exporter = job: port: {
-              job_name = job;
-              static_configs = map ({ name, ip }: {
-                targets = [ "${ip}:${toString port}" ];
-                labels = { instance = name; };
-              }) cfg.server.hosts;
-            };
-          in [
-            (exporter "node" nodeExporterPort)
-            (exporter "docker" dockerExporterPort)
-            (exporter "cadvisor" cadvisorExporterPort)
-            (exporter "nginx" nginxExporterPort)
-          ];
-        };
-      };
-    })
-
-    (lib.mkIf (cfg.client.enable || cfg.server.enable) {
-      services = {
-        prometheus.exporters = {
-          node = {
-            enable = true;
-            openFirewall = false;
-            listenAddress = me.tailscale.ip;
-            port = nodeExporterPort;
-          };
-
-          nginx = {
-            enable = true;
-            openFirewall = false;
-            listenAddress = me.tailscale.ip;
-            port = nginxExporterPort;
-          };
-        };
-
-        cadvisor = {
-          enable = true;
-          port = cadvisorExporterPort;
-          listenAddress = me.tailscale.ip;
-        };
-      };
-    })
-  ];
-}
diff --git a/modules/foundation/monitoring/client.nix b/modules/foundation/monitoring/client.nix
new file mode 100644
index 0000000..f3f6873
--- /dev/null
+++ b/modules/foundation/monitoring/client.nix
@@ -0,0 +1,33 @@
+{
+  listenAddress,
+  nodeExporterPort,
+  nginxExporterPort,
+  cadvisorExporterPort,
+  ...
+}:
+
+{
+  services = {
+    prometheus.exporters = {
+      node = {
+        enable = true;
+        openFirewall = false;
+        port = nodeExporterPort;
+        inherit listenAddress;
+      };
+
+      nginx = {
+        enable = true;
+        openFirewall = false;
+        port = nginxExporterPort;
+        inherit listenAddress;
+      };
+    };
+
+    cadvisor = {
+      enable = true;
+      port = cadvisorExporterPort;
+      inherit listenAddress;
+    };
+  };
+}
diff --git a/modules/foundation/monitoring/default.nix b/modules/foundation/monitoring/default.nix
new file mode 100644
index 0000000..a7bc185
--- /dev/null
+++ b/modules/foundation/monitoring/default.nix
@@ -0,0 +1,52 @@
+{ me, config, lib, ... }:
+
+let
+  inherit (lib) mkOption mkEnableOption types;
+
+  cfg = config.foundation.monitoring;
+
+  ports = {
+    victoriaDefaultPort = 8428;
+    nodeExporterPort = 9001;
+    cadvisorExporterPort = 9002;
+    nginxExporterPort = 9113;
+    dockerExporterPort = 9323;
+  };
+
+  serverConfiguration = import ./server.nix ({
+    hosts = cfg.server.hosts;
+    victoriaAddress = me.tailscale.ip;
+  } // ports);
+
+  clientConfiguration = import ./client.nix ({
+    listenAddress = me.tailscale.ip;
+  } // ports);
+in
+{
+  imports = [ ../../../services/monitoring/wrapper.nix ];
+
+  options.foundation.monitoring = {
+    server = {
+      enable = mkEnableOption "monitoring server";
+
+      hosts = mkOption {
+        type = with types; listOf (submodule {
+          options = {
+            name = mkOption { type = str; };
+            ip = mkOption { type = str; };
+          };
+        });
+        default = [ ];
+      };
+    };
+
+    client = {
+      enable = mkEnableOption "monitoring client";
+    };
+  };
+
+  config = lib.mkMerge [
+    (lib.mkIf cfg.server.enable serverConfiguration)
+    (lib.mkIf (cfg.client.enable || cfg.server.enable) clientConfiguration)
+  ];
+}
diff --git a/modules/foundation/monitoring/server.nix b/modules/foundation/monitoring/server.nix
new file mode 100644
index 0000000..4c922b9
--- /dev/null
+++ b/modules/foundation/monitoring/server.nix
@@ -0,0 +1,47 @@
+{
+  hosts,
+  victoriaAddress,
+  victoriaDefaultPort,
+  nodeExporterPort,
+  dockerExporterPort,
+  cadvisorExporterPort,
+  nginxExporterPort,
+  ...
+}:
+
+{
+  foundation.internal.monitoringService = true;
+
+  services.vmagent = {
+    enable = true;
+    remoteWrite.url = "http://${victoriaAddress}:${toString victoriaDefaultPort}/api/v1/write";
+
+    prometheusConfig = {
+      global = {
+        scrape_interval = "15s";
+      };
+
+      scrape_configs =
+        let
+          exporter = job: port: {
+            job_name = job;
+            static_configs = map (
+              { name, ip }:
+              {
+                targets = [ "${ip}:${toString port}" ];
+                labels = {
+                  instance = name;
+                };
+              }
+            ) hosts;
+          };
+        in
+        [
+          (exporter "node" nodeExporterPort)
+          (exporter "docker" dockerExporterPort)
+          (exporter "cadvisor" cadvisorExporterPort)
+          (exporter "nginx" nginxExporterPort)
+        ];
+    };
+  };
+}