diff options
| -rw-r--r-- | modules/foundation/default.nix | 2 | ||||
| -rw-r--r-- | modules/foundation/monitoring.nix | 94 | ||||
| -rw-r--r-- | modules/foundation/monitoring/client.nix | 33 | ||||
| -rw-r--r-- | modules/foundation/monitoring/default.nix | 52 | ||||
| -rw-r--r-- | modules/foundation/monitoring/server.nix | 47 |
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) + ]; + }; + }; +} |
