about summary refs log tree commit diff
path: root/modules/nixos/monitoring/default.nix
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2023-11-16 01:47:45 +0300
committerAzat Bahawi <azat@bahawi.net>2023-11-16 01:47:45 +0300
commit1b39cfb14b608f374208a9483db661ccd1a43230 (patch)
treebe2fefbe6c50f4598a1eb22f8b0a9260726b2c0a /modules/nixos/monitoring/default.nix
parent2023-11-13 (diff)
2023-11-16
Diffstat (limited to '')
-rw-r--r--modules/nixos/monitoring/default.nix402
1 files changed, 198 insertions, 204 deletions
diff --git a/modules/nixos/monitoring/default.nix b/modules/nixos/monitoring/default.nix
index a09b7e7..57adf1c 100644
--- a/modules/nixos/monitoring/default.nix
+++ b/modules/nixos/monitoring/default.nix
@@ -6,223 +6,217 @@
 }:
 with lib; let
   cfg = config.nixfiles.modules.monitoring;
-in
-  {
-    options.nixfiles.modules.monitoring.enable = mkEnableOption ''
-      a glue to provision a monitoring stack
-    '';
+in {
+  options.nixfiles.modules.monitoring.enable = mkEnableOption ''
+    a glue to provision a monitoring stack
+  '';
 
-    config = mkIf cfg.enable {
-      nixfiles.modules = {
-        alertmanager.enable = true;
-        grafana.enable = true;
-        loki.enable = true;
-        prometheus.enable = true;
-      };
+  config = mkIf cfg.enable {
+    nixfiles.modules = {
+      alertmanager.enable = true;
+      grafana.enable = true;
+      loki.enable = true;
+      prometheus.enable = true;
+    };
 
-      services = {
-        grafana = {
-          declarativePlugins = with pkgs.grafanaPlugins; [
-            redis-app
-            redis-datasource
-            redis-explorer-app
-          ];
+    services = {
+      grafana = {
+        declarativePlugins = with pkgs.grafanaPlugins; [
+          redis-app
+          redis-datasource
+          redis-explorer-app
+        ];
 
-          provision = {
-            enable = true;
+        provision = {
+          enable = true;
 
-            # https://grafana.com/docs/grafana/latest/administration/provisioning/#data-sources
-            datasources.settings.datasources = with config.nixfiles.modules; [
-              {
-                name = "Alertmanager";
-                type = "alertmanager";
-                access = "proxy";
-                jsonData.implementation = "prometheus";
-                url = "https://${alertmanager.domain}";
-              }
-              {
-                name = "Loki";
-                type = "loki";
-                access = "proxy";
-                url = "https://${loki.domain}";
-                isDefault = true;
-              }
-              {
-                name = "Prometheus";
-                type = "prometheus";
-                access = "proxy";
-                url = "https://${prometheus.domain}";
-              }
-              (mkIf config.nixfiles.modules.redis.enable {
-                name = "Redis";
-                type = "redis-datasource";
-                access = "proxy";
-                url = with config.services.redis.servers.default; "redis://${bind}:${toString port}";
-                jsonData.client = "standalone";
-              })
-            ];
-            datasources.settings.deleteDatasources = [
-              {
-                name = "PostgreSQL";
-                orgId = 1;
-              }
-            ];
+          # https://grafana.com/docs/grafana/latest/administration/provisioning/#data-sources
+          datasources.settings.datasources = with config.nixfiles.modules; [
+            {
+              name = "Alertmanager";
+              type = "alertmanager";
+              access = "proxy";
+              jsonData.implementation = "prometheus";
+              url = "https://${alertmanager.domain}";
+            }
+            {
+              name = "Loki";
+              type = "loki";
+              access = "proxy";
+              url = "https://${loki.domain}";
+              isDefault = true;
+            }
+            {
+              name = "Prometheus";
+              type = "prometheus";
+              access = "proxy";
+              url = "https://${prometheus.domain}";
+            }
+            (mkIf config.nixfiles.modules.redis.enable {
+              name = "Redis";
+              type = "redis-datasource";
+              access = "proxy";
+              url = with config.services.redis.servers.default; "redis://${bind}:${toString port}";
+              jsonData.client = "standalone";
+            })
+          ];
+          datasources.settings.deleteDatasources = [
+            {
+              name = "PostgreSQL";
+              orgId = 1;
+            }
+          ];
 
-            # https://grafana.com/docs/grafana/latest/administration/provisioning/#dashboards
-            dashboards.settings.providers = [
-              {
-                name = "node";
-                options.path = ./dashboards/node.json;
-              }
-              {
-                name = "ntfy";
-                options.path = ./dashboards/ntfy.json;
-              }
-              {
-                name = "endlessh";
-                options.path = ./dashboards/endlessh.json;
-              }
-              {
-                name = "unbound";
-                options.path = ./dashboards/unbound.json;
-              }
-              {
-                name = "nginx";
-                options.path = ./dashboards/nginx.json;
-              }
-              {
-                name = "postgersql";
-                options.path = ./dashboards/postgresql.json;
-              }
-              {
-                name = "redis";
-                options.path = ./dashboards/redis.json;
-              }
-              {
-                name = "redis-streaming";
-                options.path = ./dashboards/redis-streaming.json;
-              }
-            ];
+          # https://grafana.com/docs/grafana/latest/administration/provisioning/#dashboards
+          dashboards.settings.providers = [
+            {
+              name = "node";
+              options.path = ./dashboards/node.json;
+            }
+            {
+              name = "ntfy";
+              options.path = ./dashboards/ntfy.json;
+            }
+            {
+              name = "endlessh";
+              options.path = ./dashboards/endlessh.json;
+            }
+            {
+              name = "unbound";
+              options.path = ./dashboards/unbound.json;
+            }
+            {
+              name = "nginx";
+              options.path = ./dashboards/nginx.json;
+            }
+            {
+              name = "postgersql";
+              options.path = ./dashboards/postgresql.json;
+            }
+            {
+              name = "redis";
+              options.path = ./dashboards/redis.json;
+            }
+            {
+              name = "redis-streaming";
+              options.path = ./dashboards/redis-streaming.json;
+            }
+          ];
 
-            # https://grafana.com/docs/grafana/latest/administration/provisioning/#alerting
-            alerting.contactPoints.settings.contactPoints = [
-              {
-                name = "Alertmanager";
-                receivers = [
-                  {
-                    uid = 1;
-                    type = "prometheus-alertmanager";
-                    settings.url = "https://${config.nixfiles.modules.alertmanager.domain}";
-                  }
-                ];
-              }
-            ];
-          };
+          # https://grafana.com/docs/grafana/latest/administration/provisioning/#alerting
+          alerting.contactPoints.settings.contactPoints = [
+            {
+              name = "Alertmanager";
+              receivers = [
+                {
+                  uid = 1;
+                  type = "prometheus-alertmanager";
+                  settings.url = "https://${config.nixfiles.modules.alertmanager.domain}";
+                }
+              ];
+            }
+          ];
         };
+      };
 
-        loki.configuration.ruler.alertmanager_url = "https://${config.nixfiles.modules.alertmanager.domain}";
+      loki.configuration.ruler.alertmanager_url = "https://${config.nixfiles.modules.alertmanager.domain}";
 
-        prometheus = {
-          scrapeConfigs = with my.configurations;
-            mapAttrsToList
-            (
-              name: value: {
-                job_name = name;
-                static_configs = [
+      prometheus = {
+        scrapeConfigs = with my.configurations;
+          mapAttrsToList
+          (
+            name: value: {
+              job_name = name;
+              static_configs = [
+                {
+                  targets = with value;
+                    map (host:
+                      concatStringsSep ":" [
+                        (
+                          if isAttrs host
+                          then host.hostname
+                          else host
+                        )
+                        (toString port)
+                      ])
+                    hosts;
+                }
+              ];
+              relabel_configs =
+                [
                   {
-                    targets = with value;
-                      map (host:
-                        concatStringsSep ":" [
-                          (
-                            if isAttrs host
-                            then host.hostname
-                            else host
-                          )
-                          (toString port)
-                        ])
-                      hosts;
+                    source_labels = ["__address__"];
+                    regex = "([^:]+):\\d+";
+                    target_label = "instance";
                   }
-                ];
-                relabel_configs =
-                  [
-                    {
-                      source_labels = ["__address__"];
-                      regex = "([^:]+):\\d+";
-                      target_label = "instance";
-                    }
-                  ]
-                  ++ optionals (hasAttr "relabel" value) value.relabel;
-              }
-            )
-            {
-              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;
-              };
-              # TODO Wait for https://github.com/NixOS/nixpkgs/pull/265696
-              exportarr-lidarr = {
-                hosts = [yavanna];
-                port = 9708;
-              };
+                ]
+                ++ optionals (hasAttr "relabel" value) value.relabel;
+            }
+          )
+          {
+            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;
+            };
+            # TODO Wait for https://github.com/NixOS/nixpkgs/pull/265696
+            exportarr-lidarr = {
+              hosts = [yavanna];
+              port = 9708;
+            };
+          };
 
-          ruleFiles = [
-            ./rules/nginx.yaml
-            ./rules/node.yaml
-            ./rules/postgres.yaml
-            ./rules/redis.yaml
-          ];
+        ruleFiles = [
+          ./rules/nginx.yaml
+          ./rules/node.yaml
+          ./rules/postgres.yaml
+          ./rules/redis.yaml
+        ];
 
-          alertmanagers = [
-            {
-              scheme = "https";
-              static_configs = [
-                {targets = [config.nixfiles.modules.alertmanager.domain];}
-              ];
-            }
-          ];
-        };
+        alertmanagers = [
+          {
+            scheme = "https";
+            static_configs = [
+              {targets = [config.nixfiles.modules.alertmanager.domain];}
+            ];
+          }
+        ];
       };
     };
-  }
-  # FIXME https://nixpk.gs/pr-tracker.html?pr=265696
-  // lib.moduleFromRef
-  "services/monitoring/prometheus/exporters.nix"
-  "Stunkymonkey:nixos-exportarr"
-  "0c9n3dc8l64bshynpbzaplvxhi2f0ihh6wcslh42y9kilwjp2zjv"
+  };
+}

Consider giving Nix/NixOS a try! <3