summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-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)
+ ];
+ };
+ };
+}