{ config, lib, pkgs, ... }: let hostCfg = config.hosts.plover; cfg = hostCfg.services.monitoring; bindStatsPort = 8053; prometheusExports = config.services.prometheus.exporters; in { options.hosts.plover.services.monitoring.enable = lib.mkEnableOption "preferred monitoring stack"; config = lib.mkIf cfg.enable (lib.mkMerge [ { services.prometheus = { enable = true; exporters = { bind = { enable = true; bindURI = "http://127.0.0.1/${builtins.toString bindStatsPort}"; }; nginx.enable = true; nginxlog.enable = true; node = { enable = true; enabledCollectors = [ "systemd" ]; }; }; scrapeConfigs = [ { job_name = config.networking.hostName; static_configs = [{ targets = [ "127.0.0.1:${builtins.toString prometheusExports.node.port}" ]; }]; } ]; }; # Requiring this for Prometheus being able to monitor my services. services.nginx.statusPage = true; services.bind.extraConfig = '' statistics-channels { inet 127.0.0.1 port ${builtins.toString bindStatsPort} allow { 127.0.0.1; }; }; ''; } ]); }