vmalert.nix (1549B)
1 { 2 config, 3 lib, 4 pkgs, 5 ... 6 }: let 7 cfg = config.services.haravara.monitoring; 8 in { 9 options.services.haravara.monitoring.vmalert = { 10 enable = lib.mkEnableOption "vmalert for Prometheus-compatible alert rule evaluation"; 11 port = lib.mkOption { 12 type = lib.types.port; 13 default = 8880; 14 }; 15 rules = lib.mkOption { 16 type = lib.types.listOf lib.types.path; 17 default = []; 18 description = "Paths to YAML files containing alert/recording rules"; 19 }; 20 }; 21 22 config = lib.mkIf (cfg.enable && cfg.vmalert.enable) { 23 systemd.services.vmalert = { 24 description = "VictoriaMetrics alert rule evaluator"; 25 wantedBy = ["multi-user.target"]; 26 after = ["network.target" "victoriametrics.service"]; 27 serviceConfig = { 28 ExecStart = lib.concatStringsSep " " ( 29 let 30 baseArgs = [ 31 "${pkgs.victoriametrics}/bin/vmalert" 32 "-datasource.url=http://127.0.0.1:8428" 33 "-remoteWrite.url=http://127.0.0.1:8428" 34 "-httpListenAddr=127.0.0.1:${toString cfg.vmalert.port}" 35 "-evaluationInterval=30s" 36 ]; 37 alertArgs = lib.optionals cfg.alertmanager.enable [ 38 "-notifier.url=http://127.0.0.1:${toString cfg.alertmanager.port}" 39 ]; 40 ruleArgs = map (r: "-rule=${r}") cfg.vmalert.rules; 41 in 42 baseArgs ++ alertArgs ++ ruleArgs 43 ); 44 DynamicUser = true; 45 Restart = "on-failure"; 46 RestartSec = "5s"; 47 }; 48 }; 49 }; 50 }