about summary refs log tree commit diff
path: root/modules/nixos/monitoring/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/nixos/monitoring/default.nix')
-rw-r--r--modules/nixos/monitoring/default.nix195
1 files changed, 63 insertions, 132 deletions
diff --git a/modules/nixos/monitoring/default.nix b/modules/nixos/monitoring/default.nix
index a492a47..37e34d9 100644
--- a/modules/nixos/monitoring/default.nix
+++ b/modules/nixos/monitoring/default.nix
@@ -124,146 +124,77 @@ in {
       prometheus = {
         # It would be nice if these could be generated dynamically. That would
         # require a complete rework of how configurations are defined, though.
-        scrapeConfigs = let
-          mkTargets = hosts: port: map (host: "${host.hostname}:${toString port}") hosts;
-        in
-          with my.configurations;
-          with config.services.prometheus.exporters; [
-            {
-              job_name = "promtail";
-              static_configs = [
-                {
-                  targets =
-                    mkTargets
-                    [
-                      manwe
-                      varda
-                      yavanna
-                    ]
-                    config.nixfiles.modules.promtail.port;
-                }
-              ];
-            }
-            {
-              job_name = "ntfy";
-              static_configs = [
-                {
-                  targets =
-                    mkTargets
-                    [
-                      manwe
-                    ]
-                    config.nixfiles.modules.ntfy.prometheus.port;
-                }
-              ];
-            }
-            {
-              job_name = "soju";
-              static_configs = [
-                {
-                  targets = [
-                    "127.0.0.1:${toString config.nixfiles.modules.soju.prometheus.port}"
-                  ];
-                }
-              ];
-            }
-            {
-              job_name = "endlessh-go";
-              static_configs = [
-                {
-                  targets =
-                    mkTargets
-                    [
-                      manwe
-                      varda
-                      yavanna
-                    ]
-                    config.services.endlessh-go.prometheus.port;
-                }
-              ];
-            }
-            {
-              job_name = "nginx";
-              static_configs = [
-                {
-                  targets =
-                    mkTargets
-                    [
-                      manwe
-                      yavanna
-                    ]
-                    nginx.port;
-                }
-              ];
-            }
-            {
-              job_name = "node";
-              static_configs = [
-                {
-                  targets =
-                    mkTargets
-                    [
-                      manwe
-                      varda
-                      yavanna
-                    ]
-                    node.port;
-                }
-              ];
-            }
-            {
-              job_name = "postgres";
+        scrapeConfigs = with my.configurations;
+          mapAttrsToList
+          (
+            name: value: {
+              job_name = name;
               static_configs = [
                 {
-                  targets =
-                    mkTargets
-                    [
-                      manwe
-                    ]
-                    postgres.port;
+                  targets = with value;
+                    map (host:
+                      concatStringsSep ":" [
+                        (
+                          if isAttrs host
+                          then host.hostname
+                          else host
+                        )
+                        (toString port)
+                      ])
+                    hosts;
                 }
               ];
-            }
-            {
-              job_name = "redis";
-              static_configs = [
+              relabel_configs = [
                 {
-                  targets =
-                    mkTargets
-                    [
-                      manwe
-                    ]
-                    redis.port;
+                  source_labels = ["__address__"];
+                  regex = "([^:]+):\\d+";
+                  target_label = "instance";
                 }
               ];
             }
-            {
-              job_name = "unbound";
-              static_configs = [
-                {
-                  targets =
-                    mkTargets
-                    [
-                      manwe
-                    ]
-                    unbound.port;
-                }
-              ];
-            }
-            {
-              job_name = "wireguard";
-              static_configs = [
-                {
-                  targets =
-                    mkTargets
-                    [
-                      manwe
-                    ]
-                    wireguard.port;
-                }
-              ];
-            }
-          ];
+          )
+          {
+            promtail = {
+              hosts = [manwe varda yavanna];
+              inherit (config.nixfiles.modules.promtail) port;
+            };
+            ntfy = {
+              hosts = [manwe];
+              inherit (config.nixfiles.modules.ntfy.prometheus) port;
+            };
+            soju = {
+              hosts = ["127.0.0.1"];
+              inherit (config.nixfiles.modules.soju.prometheus) port;
+            };
+            endlessh-go = {
+              hosts = [manwe varda yavanna];
+              inherit (config.services.endlessh-go.prometheus) port;
+            };
+            nginx = {
+              hosts = [manwe yavanna];
+              inherit (config.services.prometheus.exporters.nginx) port;
+            };
+            node = {
+              hosts = [manwe varda yavanna];
+              inherit (config.services.prometheus.exporters.node) port;
+            };
+            postgres = {
+              hosts = [manwe];
+              inherit (config.services.prometheus.exporters.postgres) port;
+            };
+            redis = {
+              hosts = [manwe];
+              inherit (config.services.prometheus.exporters.redis) port;
+            };
+            unbound = {
+              hosts = [manwe];
+              inherit (config.services.prometheus.exporters.unbound) port;
+            };
+            wireguard = {
+              hosts = [manwe];
+              inherit (config.services.prometheus.exporters.wireguard) port;
+            };
+          };
 
         ruleFiles = [
           ./rules/nginx.yaml

Consider giving Nix/NixOS a try! <3