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