grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / logging / vector.nix
blobc68d546bb96cde150eb660fd27890784ea1e3d79
1 { config, lib, pkgs, ... }:
2 let cfg = config.services.vector;
4 in
6   options.services.vector = {
7     enable = lib.mkEnableOption "Vector, a high-performance observability data pipeline";
9     package = lib.mkPackageOption pkgs "vector" { };
11     journaldAccess = lib.mkOption {
12       type = lib.types.bool;
13       default = false;
14       description = ''
15         Enable Vector to access journald.
16       '';
17     };
19     settings = lib.mkOption {
20       type = (pkgs.formats.json { }).type;
21       default = { };
22       description = ''
23         Specify the configuration for Vector in Nix.
24       '';
25     };
26   };
28   config = lib.mkIf cfg.enable {
29     # for cli usage
30     environment.systemPackages = [ pkgs.vector ];
32     systemd.services.vector = {
33       description = "Vector event and log aggregator";
34       wantedBy = [ "multi-user.target" ];
35       after = [ "network-online.target" ];
36       requires = [ "network-online.target" ];
37       serviceConfig =
38         let
39           format = pkgs.formats.toml { };
40           conf = format.generate "vector.toml" cfg.settings;
41           validateConfig = file:
42           pkgs.runCommand "validate-vector-conf" {
43             nativeBuildInputs = [ pkgs.vector ];
44           } ''
45               vector validate --no-environment "${file}"
46               ln -s "${file}" "$out"
47             '';
48         in
49         {
50           ExecStart = "${lib.getExe cfg.package} --config ${validateConfig conf}";
51           DynamicUser = true;
52           Restart = "always";
53           StateDirectory = "vector";
54           ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
55           AmbientCapabilities = "CAP_NET_BIND_SERVICE";
56           # This group is required for accessing journald.
57           SupplementaryGroups = lib.mkIf cfg.journaldAccess "systemd-journal";
58         };
59       unitConfig = {
60         StartLimitIntervalSec = 10;
61         StartLimitBurst = 5;
62       };
63     };
64   };