diff --git a/modules/module-list.nix b/modules/module-list.nix index 30a83b9b..2b4ee2ae 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -48,6 +48,7 @@ ./services/lorri.nix ./services/mail/offlineimap.nix ./services/mopidy.nix + ./services/monitoring/telegraf.nix ./services/nix-daemon.nix ./services/nix-gc ./services/ofborg diff --git a/modules/services/monitoring/telegraf.nix b/modules/services/monitoring/telegraf.nix new file mode 100644 index 00000000..f40e0130 --- /dev/null +++ b/modules/services/monitoring/telegraf.nix @@ -0,0 +1,71 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkEnableOption mkOption types mkIf; + + cfg = config.services.telegraf; + + settingsFormat = pkgs.formats.toml { }; + configFile = settingsFormat.generate "config.toml" cfg.extraConfig; +in { + options = { + services.telegraf = { + enable = mkEnableOption "telegraf agent"; + + package = mkOption { + default = pkgs.telegraf; + defaultText = lib.literalExpression "pkgs.telegraf"; + description = "Which telegraf derivation to use"; + type = types.package; + }; + + environmentFiles = mkOption { + type = types.listOf types.path; + default = [ ]; + example = [ "/run/keys/telegraf.env" ]; + description = '' + File to load as environment file. + This is useful to avoid putting secrets into the nix store. + ''; + }; + + extraConfig = mkOption { + default = { }; + description = "Extra configuration options for telegraf"; + type = settingsFormat.type; + example = { + outputs.influxdb = { + urls = [ "http://localhost:8086" ]; + database = "telegraf"; + }; + inputs.statsd = { + service_address = ":8125"; + delete_timings = true; + }; + }; + }; + + configUrl = mkOption { + default = null; + description = "Url to fetch config from"; + type = types.nullOr types.str; + }; + }; + }; + + config = mkIf cfg.enable { + launchd.daemons.telegraf = { + script = '' + ${lib.concatStringsSep "\n" + (map (file: "source ${file}") cfg.environmentFiles)} + ${cfg.package}/bin/telegraf --config ${ + if cfg.configUrl == null then configFile else cfg.configUrl + } + ''; + serviceConfig = { + KeepAlive = true; + RunAtLoad = true; + }; + }; + }; +}