summaryrefslogtreecommitdiffstats
path: root/nixos/modules/services/monitoring/telegraf.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/modules/services/monitoring/telegraf.nix')
-rw-r--r--nixos/modules/services/monitoring/telegraf.nix42
1 files changed, 31 insertions, 11 deletions
diff --git a/nixos/modules/services/monitoring/telegraf.nix b/nixos/modules/services/monitoring/telegraf.nix
index 5d131557e8be..1fc17ec72daf 100644
--- a/nixos/modules/services/monitoring/telegraf.nix
+++ b/nixos/modules/services/monitoring/telegraf.nix
@@ -5,14 +5,8 @@ with lib;
let
cfg = config.services.telegraf;
- configFile = pkgs.runCommand "config.toml" {
- buildInputs = [ pkgs.remarshal ];
- preferLocalBuild = true;
- } ''
- remarshal -if json -of toml \
- < ${pkgs.writeText "config.json" (builtins.toJSON cfg.extraConfig)} \
- > $out
- '';
+ settingsFormat = pkgs.formats.toml {};
+ configFile = settingsFormat.generate "config.toml" cfg.extraConfig;
in {
###### interface
options = {
@@ -26,10 +20,23 @@ in {
type = types.package;
};
+ environmentFiles = mkOption {
+ type = types.nullOr (types.listOf types.path);
+ default = [];
+ example = "/run/keys/telegraf.env";
+ description = ''
+ File to load as environment file. Environment variables
+ from this file will be interpolated into the config file
+ using envsubst with this syntax:
+ <literal>$ENVIRONMENT ''${VARIABLE}</literal>
+ This is useful to avoid putting secrets into the nix store.
+ '';
+ };
+
extraConfig = mkOption {
default = {};
description = "Extra configuration options for telegraf";
- type = types.attrs;
+ type = settingsFormat.type;
example = {
outputs = {
influxdb = {
@@ -51,15 +58,28 @@ in {
###### implementation
config = mkIf config.services.telegraf.enable {
- systemd.services.telegraf = {
+ systemd.services.telegraf = let
+ finalConfigFile = if config.services.telegraf.environmentFiles == []
+ then configFile
+ else "/var/run/telegraf/config.toml";
+ in {
description = "Telegraf Agent";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
serviceConfig = {
- ExecStart=''${cfg.package}/bin/telegraf -config "${configFile}"'';
+ EnvironmentFile = config.services.telegraf.environmentFiles;
+ ExecStartPre = lib.optional (config.services.telegraf.environmentFiles != [])
+ (pkgs.writeShellScript "pre-start" ''
+ umask 077
+ ${pkgs.envsubst}/bin/envsubst -i "${configFile}" > /var/run/telegraf/config.toml
+ '');
+ ExecStart=''${cfg.package}/bin/telegraf -config ${finalConfigFile}'';
ExecReload="${pkgs.coreutils}/bin/kill -HUP $MAINPID";
+ RuntimeDirectory = "telegraf";
User = "telegraf";
Restart = "on-failure";
+ # for ping probes
+ AmbientCapabilities = [ "CAP_NET_RAW" ];
};
};