grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / logging / journalbeat.nix
blob5c35e84f88e09263ac5504ab9d2e33b34b9ee914
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.journalbeat;
5   journalbeatYml = pkgs.writeText "journalbeat.yml" ''
6     name: ${cfg.name}
7     tags: ${builtins.toJSON cfg.tags}
9     ${cfg.extraConfig}
10   '';
14   options = {
16     services.journalbeat = {
18       enable = lib.mkEnableOption "journalbeat";
20       package = lib.mkPackageOption pkgs "journalbeat" { };
22       name = lib.mkOption {
23         type = lib.types.str;
24         default = "journalbeat";
25         description = "Name of the beat";
26       };
28       tags = lib.mkOption {
29         type = lib.types.listOf lib.types.str;
30         default = [];
31         description = "Tags to place on the shipped log messages";
32       };
34       stateDir = lib.mkOption {
35         type = lib.types.str;
36         default = "journalbeat";
37         description = ''
38           Directory below `/var/lib/` to store journalbeat's
39           own logs and other data. This directory will be created automatically
40           using systemd's StateDirectory mechanism.
41         '';
42       };
44       extraConfig = lib.mkOption {
45         type = lib.types.lines;
46         default = "";
47         description = "Any other configuration options you want to add";
48       };
50     };
51   };
53   config = lib.mkIf cfg.enable {
55     assertions = [
56       {
57         assertion = !lib.hasPrefix "/" cfg.stateDir;
58         message =
59           "The option services.journalbeat.stateDir shouldn't be an absolute directory." +
60           " It should be a directory relative to /var/lib/.";
61       }
62     ];
64     systemd.services.journalbeat = {
65       description = "Journalbeat log shipper";
66       wantedBy = [ "multi-user.target" ];
67       wants = [ "elasticsearch.service" ];
68       after = [ "elasticsearch.service" ];
69       preStart = ''
70         mkdir -p ${cfg.stateDir}/data
71         mkdir -p ${cfg.stateDir}/logs
72       '';
73       serviceConfig = {
74         StateDirectory = cfg.stateDir;
75         ExecStart = ''
76           ${cfg.package}/bin/journalbeat \
77             -c ${journalbeatYml} \
78             -path.data /var/lib/${cfg.stateDir}/data \
79             -path.logs /var/lib/${cfg.stateDir}/logs'';
80         Restart = "always";
81       };
82     };
83   };