aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/nixos/modules/services/monitoring/telegraf.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/nixos/modules/services/monitoring/telegraf.nix')
-rw-r--r--infra/libkookie/nixpkgs/nixos/modules/services/monitoring/telegraf.nix58
1 files changed, 37 insertions, 21 deletions
diff --git a/infra/libkookie/nixpkgs/nixos/modules/services/monitoring/telegraf.nix b/infra/libkookie/nixpkgs/nixos/modules/services/monitoring/telegraf.nix
index 5d131557e8be..b341a9005c2a 100644
--- a/infra/libkookie/nixpkgs/nixos/modules/services/monitoring/telegraf.nix
+++ b/infra/libkookie/nixpkgs/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,22 +20,31 @@ in {
type = types.package;
};
+ environmentFiles = mkOption {
+ type = 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 = {
- urls = ["http://localhost:8086"];
- database = "telegraf";
- };
+ outputs.influxdb = {
+ urls = ["http://localhost:8086"];
+ database = "telegraf";
};
- inputs = {
- statsd = {
- service_address = ":8125";
- delete_timings = true;
- };
+ inputs.statsd = {
+ service_address = ":8125";
+ delete_timings = true;
};
};
};
@@ -51,15 +54,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" ];
};
};