at 24.11-pre 2.0 kB view raw
1{ config, lib, pkgs, ... }: 2 3let 4 inherit (lib) mkEnableOption mkPackageOption mkIf mkOption types getExe; 5 6 cfg = config.services.opentelemetry-collector; 7 opentelemetry-collector = cfg.package; 8 9 settingsFormat = pkgs.formats.yaml {}; 10in { 11 options.services.opentelemetry-collector = { 12 enable = mkEnableOption "Opentelemetry Collector"; 13 14 package = mkPackageOption pkgs "opentelemetry-collector" { }; 15 16 settings = mkOption { 17 type = settingsFormat.type; 18 default = {}; 19 description = '' 20 Specify the configuration for Opentelemetry Collector in Nix. 21 22 See https://opentelemetry.io/docs/collector/configuration/ for available options. 23 ''; 24 }; 25 26 configFile = mkOption { 27 type = types.nullOr types.path; 28 default = null; 29 description = '' 30 Specify a path to a configuration file that Opentelemetry Collector should use. 31 ''; 32 }; 33 }; 34 35 config = mkIf cfg.enable { 36 assertions = [{ 37 assertion = ( 38 (cfg.settings == {}) != (cfg.configFile == null) 39 ); 40 message = '' 41 Please specify a configuration for Opentelemetry Collector with either 42 'services.opentelemetry-collector.settings' or 43 'services.opentelemetry-collector.configFile'. 44 ''; 45 }]; 46 47 systemd.services.opentelemetry-collector = { 48 description = "Opentelemetry Collector Service Daemon"; 49 wantedBy = [ "multi-user.target" ]; 50 51 serviceConfig = let 52 conf = if cfg.configFile == null 53 then settingsFormat.generate "config.yaml" cfg.settings 54 else cfg.configFile; 55 in 56 { 57 ExecStart = "${getExe opentelemetry-collector} --config=file:${conf}"; 58 DynamicUser = true; 59 Restart = "always"; 60 ProtectSystem = "full"; 61 DevicePolicy = "closed"; 62 NoNewPrivileges = true; 63 WorkingDirectory = "/var/lib/opentelemetry-collector"; 64 StateDirectory = "opentelemetry-collector"; 65 }; 66 }; 67 }; 68}