grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / monitoring / opentelemetry-collector.nix
blobd9b8c27ccdfe3b7bd7941ae8383153f4c9e95f71
1 { config, lib, pkgs, ... }:
3 let
4   inherit (lib) mkEnableOption mkPackageOption mkIf mkOption types getExe;
6   cfg = config.services.opentelemetry-collector;
7   opentelemetry-collector = cfg.package;
9   settingsFormat = pkgs.formats.yaml { };
12   options.services.opentelemetry-collector = {
13     enable = mkEnableOption "Opentelemetry Collector";
15     package = mkPackageOption pkgs "opentelemetry-collector" { };
17     settings = mkOption {
18       type = settingsFormat.type;
19       default = { };
20       description = ''
21         Specify the configuration for Opentelemetry Collector in Nix.
23         See https://opentelemetry.io/docs/collector/configuration/ for available options.
24       '';
25     };
27     configFile = mkOption {
28       type = types.nullOr types.path;
29       default = null;
30       description = ''
31         Specify a path to a configuration file that Opentelemetry Collector should use.
32       '';
33     };
34   };
36   config = mkIf cfg.enable {
37     assertions = [{
38       assertion = (
39         (cfg.settings == { }) != (cfg.configFile == null)
40       );
41       message = ''
42         Please specify a configuration for Opentelemetry Collector with either
43         'services.opentelemetry-collector.settings' or
44         'services.opentelemetry-collector.configFile'.
45       '';
46     }];
48     systemd.services.opentelemetry-collector = {
49       description = "Opentelemetry Collector Service Daemon";
50       wantedBy = [ "multi-user.target" ];
52       serviceConfig =
53         let
54           conf =
55             if cfg.configFile == null
56             then settingsFormat.generate "config.yaml" cfg.settings
57             else cfg.configFile;
58         in
59         {
60           ExecStart = "${getExe opentelemetry-collector} --config=file:${conf}";
61           DynamicUser = true;
62           Restart = "always";
63           ProtectSystem = "full";
64           DevicePolicy = "closed";
65           NoNewPrivileges = true;
66           WorkingDirectory = "%S/opentelemetry-collector";
67           StateDirectory = "opentelemetry-collector";
68           SupplementaryGroups = [
69             # allow to read the systemd journal for opentelemetry-collector
70             "systemd-journal"
71           ];
72         };
73     };
74   };