{ config, inputs, pkgs, ... }: { systemd.services.prometheus.after = pkgs.lib.mkForce [ config.systemd.targets.network-online.name ]; systemd.services.prometheus.wants = [ config.systemd.targets.network-online.name ]; systemd.services.alertmanager.after = [ config.systemd.services.prometheus.name ]; services.prometheus = { enable = true; checkConfig = true; webExternalUrl = "https://prometheus.nix-community.org/"; extraFlags = [ "--storage.tsdb.retention.time=30d" ]; scrapeConfigs = [ { job_name = "telegraf"; scrape_interval = "60s"; metrics_path = "/metrics"; static_configs = let hosts = (import "${inputs.self}/modules/shared/known-hosts.nix").programs.ssh.knownHosts; in [ { targets = builtins.concatMap (host: map (name: "${name}:9273") host.hostNames) ( builtins.attrValues hosts ); labels.org = "nix-community"; } ]; } ]; alertmanagers = [ { static_configs = [ { targets = [ "localhost:9093" ]; } ]; } ]; }; services.telegraf.extraConfig.inputs.prometheus.urls = [ "http://localhost:9090/metrics" # prometheus "http://localhost:9093/metrics" # alertmanager ]; services.prometheus.alertmanager = { enable = true; webExternalUrl = "https://alertmanager.nix-community.org/"; listenAddress = "[::1]"; extraFlags = [ "--cluster.listen-address=''" ]; configuration = { route = { receiver = "default"; routes = [ { group_by = [ "host" ]; group_wait = "5m"; group_interval = "5m"; repeat_interval = "12h"; receiver = "nix-community"; } ]; }; receivers = [ { name = "nix-community"; webhook_configs = [ { url = "http://localhost:9088/alert"; max_alerts = 5; } ]; } { name = "default"; } ]; }; }; }