mermet: dovecot: julm: increase mailQuota
[sourcephile-nix.git] / hosts / losurdo / prometheus.nix
index 377da8fb5bcac70148f24b4dfdca266f23de718b..07f413c7fef6a68b96da018183fbd0fee8d9488e 100644 (file)
@@ -1,6 +1,135 @@
-{ pkgs, lib, config, ... }:
+{ pkgs, lib, config, hostName, ... }:
+let
+  inherit (config.services) prometheus;
+  listenAddress = "127.0.0.1";
+in
 {
-services.prometheus = {
-  enable = true;
-};
+  services.prometheus = {
+    enable = true;
+    inherit listenAddress;
+    port = 9090;
+    extraFlags = [
+      "--storage.tsdb.retention.time 30d"
+    ];
+    exporters = {
+      apcupsd = {
+        enable = true;
+        inherit listenAddress;
+      };
+      node = {
+        enable = true;
+        inherit listenAddress;
+        #enabledCollectors = [ "wifi" ];
+      };
+      smokeping = {
+        #enable = true;
+        inherit listenAddress;
+        buckets = "0.0001,0.001,0.005,0.01,0.02,0.04,0.06,0.08,0.16,0.24,0.32,0.4,0.48,0.8,1.6,3.2,6.4";
+        hosts = [ "www.fdn.fr" "8.8.8.8" ];
+        pingInterval = "3s";
+      };
+      systemd = {
+        enable = true;
+        inherit listenAddress;
+      };
+      wireguard = {
+        #enable = true;
+        inherit listenAddress;
+        withRemoteIp = true;
+      };
+    };
+    scrapeConfigs = [
+      {
+        job_name = hostName;
+        static_configs = [
+          {
+            targets = [
+              "${listenAddress}:${toString prometheus.exporters.apcupsd.port}"
+              "${listenAddress}:${toString prometheus.exporters.node.port}"
+              #"[${listenAddress}:${toString prometheus.exporters.smokeping.port}"
+              "${listenAddress}:${toString prometheus.exporters.systemd.port}"
+              #"${listenAddress}:${toString prometheus.exporters.wireguard.port}"
+            ];
+          }
+        ];
+      }
+    ];
+    /*
+      alertmanagers = [
+      {
+      static_configs = [ { targets = [ "${listenAddress}:9093" ]; } ];
+      }
+      ];
+      alertmanager = {
+      enable = true;
+      inherit listenAddress;
+      configuration = {
+      global = {
+        "smtp_smarthost" = "localhost:25";
+        "smtp_require_tls" = false;
+        "smtp_from" = "alertmanager@${domain}";
+      };
+      route = {
+        "group_by" = [ "alertname" "alias" ];
+        "group_wait" = "30s";
+        "group_interval" = "2m";
+        "repeat_interval" = "12h";
+        "receiver" = "root";
+      };
+      receivers = [
+        {
+          "name" = "root";
+          "email_configs" = [
+            {
+              "to" = "root+alertmanager@${domain}";
+              "send_resolved" = true;
+            }
+          ];
+        }
+      ];
+      };
+      };
+      rules = [
+      ''
+      groups:
+        - name: custom_rules
+          rules:
+            - record: battery_percent
+              expr: 100 * battery_energy_now / battery_energy_full
+            - alert: battery_soon_out
+              expr: predict_linear(battery_percent[30m], 3600) <= 10
+              for: 5m
+              labels:
+                severity: warning
+              annotations:
+                summary: "Instance [{{ $labels.instance }}] battery about 1h left"
+                description: "[{{ $labels.instance }}] battery in 1h estimated to {{ $value }}%"
+      ''
+      ];
+    */
+  };
+  systemd.services.grafana = {
+    after = [ "wireguard-wg-intra.service" ];
+    requires = [ "wireguard-wg-intra.service" ];
+  };
+  services.grafana = {
+    enable = true;
+    settings = {
+      server.http_port = 3000;
+      setver.http_addr = "${hostName}.sp"; # listenAddress;
+      analytics.reporting_enabled = false;
+      analytics.check_for_updates = false;
+      analytics.check_for_plugin_updates = false;
+    };
+  };
+  # override systemd exporter execstart to enable option...
+  # FIXME: use extraFlags
+  systemd.services.prometheus-systemd-exporter.serviceConfig = {
+    ExecStart = lib.mkForce ''
+      ${pkgs.prometheus-systemd-exporter}/bin/systemd_exporter \
+        --web.listen-address=${listenAddress}:${toString prometheus.exporters.systemd.port} \
+        --systemd.collector.enable-ip-accounting \
+        --systemd.collector.enable-restart-count
+    '';
+  };
 }