{ self, lib, ... }: let monLib = import ../../lib/monitoring.nix { inherit lib; }; externalTargets = import ./external-targets.nix; nodeExporterTargets = monLib.generateNodeExporterTargets self externalTargets; autoScrapeConfigs = monLib.generateScrapeConfigs self externalTargets; in { services.prometheus = { enable = true; alertmanager = { enable = true; configuration = { global = { }; route = { receiver = "webhook_natstonotify"; group_wait = "30s"; group_interval = "5m"; repeat_interval = "1h"; group_by = [ "alertname" ]; }; receivers = [ { name = "webhook_natstonotify"; webhook_configs = [ { url = "http://localhost:5001/alert"; } ]; } ]; }; }; alertmanagers = [ { static_configs = [ { targets = [ "localhost:9093" ]; } ]; } ]; retentionTime = "30d"; globalConfig = { scrape_interval = "15s"; }; rules = [ (builtins.readFile ./rules.yml) ]; scrapeConfigs = [ # Auto-generated node-exporter targets from flake hosts + external { job_name = "node-exporter"; static_configs = [ { targets = nodeExporterTargets; } ]; } # Local monitoring services (not auto-generated) { job_name = "prometheus"; static_configs = [ { targets = [ "localhost:9090" ]; } ]; } { job_name = "loki"; static_configs = [ { targets = [ "localhost:3100" ]; } ]; } { job_name = "grafana"; static_configs = [ { targets = [ "localhost:3000" ]; } ]; } { job_name = "alertmanager"; static_configs = [ { targets = [ "localhost:9093" ]; } ]; } { job_name = "pushgateway"; honor_labels = true; static_configs = [ { targets = [ "localhost:9091" ]; } ]; } { job_name = "labmon"; static_configs = [ { targets = [ "monitoring01.home.2rjus.net:9969" ]; } ]; } # pve-exporter with complex relabel config { job_name = "pve-exporter"; static_configs = [ { targets = [ "10.69.12.75" ]; } ]; metrics_path = "/pve"; params = { module = [ "default" ]; cluster = [ "1" ]; node = [ "1" ]; }; relabel_configs = [ { source_labels = [ "__address__" ]; target_label = "__param_target"; } { source_labels = [ "__param_target" ]; target_label = "instance"; } { target_label = "__address__"; replacement = "127.0.0.1:9221"; } ]; } ] ++ autoScrapeConfigs; pushgateway = { enable = true; web = { external-url = "https://pushgw.home.2rjus.net"; }; }; }; }