nix

configuration files that power my machines
Log | Files | Refs | README | LICENSE

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 }