summary refs log tree commit diff
path: root/modules/foundation/monitoring
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 /modules/foundation/monitoring
parent6163fa5b5926dd4a456b9fd07e05f9ec1f49d613 (diff)
downloadnetwork-778e23735053e935c3af00490561fe65b8c7d02c.tar.zst
network-778e23735053e935c3af00490561fe65b8c7d02c.zip
Break up monitoring module
Signed-off-by: Mel <einebeere@gmail.com>
Diffstat (limited to 'modules/foundation/monitoring')
-rw-r--r--modules/foundation/monitoring/client.nix33
-rw-r--r--modules/foundation/monitoring/default.nix52
-rw-r--r--modules/foundation/monitoring/server.nix47
3 files changed, 132 insertions, 0 deletions
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)
+        ];
+    };
+  };
+}