grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / logging / heartbeat.nix
bloba9fa644d550df4006cfeb9a6822656f533284060
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.heartbeat;
5   heartbeatYml = pkgs.writeText "heartbeat.yml" ''
6     name: ${cfg.name}
7     tags: ${builtins.toJSON cfg.tags}
9     ${cfg.extraConfig}
10   '';
14   options = {
16     services.heartbeat = {
18       enable = lib.mkEnableOption "heartbeat, uptime monitoring";
20       package = lib.mkPackageOption pkgs "heartbeat" {
21         example = "heartbeat7";
22       };
24       name = lib.mkOption {
25         type = lib.types.str;
26         default = "heartbeat";
27         description = "Name of the beat";
28       };
30       tags = lib.mkOption {
31         type = lib.types.listOf lib.types.str;
32         default = [];
33         description = "Tags to place on the shipped log messages";
34       };
36       stateDir = lib.mkOption {
37         type = lib.types.str;
38         default = "/var/lib/heartbeat";
39         description = "The state directory. heartbeat's own logs and other data are stored here.";
40       };
42       extraConfig = lib.mkOption {
43         type = lib.types.lines;
44         default = ''
45           heartbeat.monitors:
46           - type: http
47             urls: ["http://localhost:9200"]
48             schedule: '@every 10s'
49         '';
50         description = "Any other configuration options you want to add";
51       };
53     };
54   };
56   config = lib.mkIf cfg.enable {
58     systemd.tmpfiles.rules = [
59       "d '${cfg.stateDir}' - nobody nogroup - -"
60     ];
62     systemd.services.heartbeat = with pkgs; {
63       description = "heartbeat log shipper";
64       wantedBy = [ "multi-user.target" ];
65       preStart = ''
66         mkdir -p "${cfg.stateDir}"/{data,logs}
67       '';
68       serviceConfig = {
69         User = "nobody";
70         AmbientCapabilities = "cap_net_raw";
71         ExecStart = "${cfg.package}/bin/heartbeat -c \"${heartbeatYml}\" -path.data \"${cfg.stateDir}/data\" -path.logs \"${cfg.stateDir}/logs\"";
72       };
73     };
74   };