at 23.11-pre 2.6 kB view raw
1{ config, pkgs, lib, ... }: 2with lib; 3let 4 cfg = config.services.vmagent; 5 settingsFormat = pkgs.formats.json { }; 6in { 7 options.services.vmagent = { 8 enable = mkEnableOption (lib.mdDoc "vmagent"); 9 10 user = mkOption { 11 default = "vmagent"; 12 type = types.str; 13 description = lib.mdDoc '' 14 User account under which vmagent runs. 15 ''; 16 }; 17 18 group = mkOption { 19 type = types.str; 20 default = "vmagent"; 21 description = lib.mdDoc '' 22 Group under which vmagent runs. 23 ''; 24 }; 25 26 package = mkOption { 27 default = pkgs.vmagent; 28 defaultText = lib.literalMD "pkgs.vmagent"; 29 type = types.package; 30 description = lib.mdDoc '' 31 vmagent package to use. 32 ''; 33 }; 34 35 dataDir = mkOption { 36 type = types.str; 37 default = "/var/lib/vmagent"; 38 description = lib.mdDoc '' 39 The directory where vmagent stores its data files. 40 ''; 41 }; 42 43 remoteWriteUrl = mkOption { 44 default = "http://localhost:8428/api/v1/write"; 45 type = types.str; 46 description = lib.mdDoc '' 47 The storage endpoint such as VictoriaMetrics 48 ''; 49 }; 50 51 prometheusConfig = mkOption { 52 type = lib.types.submodule { freeformType = settingsFormat.type; }; 53 description = lib.mdDoc '' 54 Config for prometheus style metrics 55 ''; 56 }; 57 58 openFirewall = mkOption { 59 type = types.bool; 60 default = false; 61 description = lib.mdDoc '' 62 Whether to open the firewall for the default ports. 63 ''; 64 }; 65 }; 66 67 config = mkIf cfg.enable { 68 users.groups = mkIf (cfg.group == "vmagent") { vmagent = { }; }; 69 70 users.users = mkIf (cfg.user == "vmagent") { 71 vmagent = { 72 group = cfg.group; 73 description = "vmagent daemon user"; 74 home = cfg.dataDir; 75 isSystemUser = true; 76 }; 77 }; 78 79 networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ 8429 ]; 80 81 systemd.services.vmagent = let 82 prometheusConfig = settingsFormat.generate "prometheusConfig.yaml" cfg.prometheusConfig; 83 in { 84 wantedBy = [ "multi-user.target" ]; 85 after = [ "network.target" ]; 86 description = "vmagent system service"; 87 serviceConfig = { 88 User = cfg.user; 89 Group = cfg.group; 90 Type = "simple"; 91 Restart = "on-failure"; 92 WorkingDirectory = cfg.dataDir; 93 ExecStart = "${cfg.package}/bin/vmagent -remoteWrite.url=${cfg.remoteWriteUrl} -promscrape.config=${prometheusConfig}"; 94 }; 95 }; 96 97 systemd.tmpfiles.rules = 98 [ "d '${cfg.dataDir}' 0755 ${cfg.user} ${cfg.group} -" ]; 99 }; 100}