diff --git a/nixos/modules/services/monitoring/prometheus/alertmanager.nix b/nixos/modules/services/monitoring/prometheus/alertmanager.nix
index 2f3245e3286..7d790b6b590 100644
--- a/nixos/modules/services/monitoring/prometheus/alertmanager.nix
+++ b/nixos/modules/services/monitoring/prometheus/alertmanager.nix
@@ -4,33 +4,31 @@ with lib;
let
cfg = config.services.prometheus.alertmanager;
- cfg2 = config.services.prometheus2.alertmanager;
- mkConfigFile = amCfg:
- pkgs.writeText "alertmanager.yml" (builtins.toJSON amCfg.configuration);
+ mkConfigFile = pkgs.writeText "alertmanager.yml" (builtins.toJSON cfg.configuration);
- mkAlertmanagerYml = amCfg: let
- checkedConfig = file:
- pkgs.runCommand "checked-config" { buildInputs = [ amCfg.package ]; } ''
- ln -s ${file} $out
- amtool check-config $out
- '';
- yml = if amCfg.configText != null then
- pkgs.writeText "alertmanager.yml" amCfg.configText
- else mkConfigFile amCfg;
- in
- checkedConfig yml;
+ checkedConfig = file: pkgs.runCommand "checked-config" { buildInputs = [ cfg.package ]; } ''
+ ln -s ${file} $out
+ amtool check-config $out
+ '';
- mkCmdlineArgs = amCfg:
- amCfg.extraFlags ++ [
- "--config.file ${mkAlertmanagerYml amCfg}"
- "--web.listen-address ${amCfg.listenAddress}:${toString amCfg.port}"
- "--log.level ${amCfg.logLevel}"
- ] ++ (optional (amCfg.webExternalUrl != null)
- "--web.external-url ${amCfg.webExternalUrl}"
- ) ++ (optional (amCfg.logFormat != null)
- "--log.format ${amCfg.logFormat}"
- );
- amOptions = {
+ alertmanagerYml = let
+ yml = if cfg.configText != null then
+ pkgs.writeText "alertmanager.yml" cfg.configText
+ else mkConfigFile;
+ in checkedConfig yml;
+
+ cmdlineArgs = cfg.extraFlags ++ [
+ "--config.file ${alertmanagerYml}"
+ "--web.listen-address ${cfg.listenAddress}:${toString cfg.port}"
+ "--log.level ${cfg.logLevel}"
+ ] ++ (optional (cfg.webExternalUrl != null)
+ "--web.external-url ${cfg.webExternalUrl}"
+ ) ++ (optional (cfg.logFormat != null)
+ "--log.format ${cfg.logFormat}"
+ );
+in {
+ options = {
+ services.prometheus.alertmanager = {
enable = mkEnableOption "Prometheus Alertmanager";
package = mkOption {
@@ -137,40 +135,36 @@ let
'';
};
};
- mkAMConfig = amCfg: amVersion: [
- (mkIf amCfg.enable {
- assertions = singleton {
- assertion = amCfg.configuration != null || amCfg.configText != null;
- message = "Can not enable alertmanager without a configuration. "
- + "Set either the `configuration` or `configText` attribute.";
- };
- })
- (mkIf amCfg.enable {
- networking.firewall.allowedTCPPorts = optional amCfg.openFirewall amCfg.port;
-
- systemd.services."alertmanager${amVersion}" = {
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
- script = ''
- ${amCfg.package}/bin/alertmanager \
- ${concatStringsSep " \\\n " (mkCmdlineArgs amCfg)}
- '';
- serviceConfig = {
- User = amCfg.user;
- Group = amCfg.group;
- Restart = "always";
- PrivateTmp = true;
- WorkingDirectory = "/tmp";
- ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
- };
- };
- })
- ];
-in {
- options = {
- services.prometheus.alertmanager = amOptions;
- services.prometheus2.alertmanager = amOptions;
};
- config = mkMerge ((mkAMConfig cfg "") ++ (mkAMConfig cfg2 "2"));
+ config = mkMerge [
+ (mkIf cfg.enable {
+ assertions = singleton {
+ assertion = cfg.configuration != null || cfg.configText != null;
+ message = "Can not enable alertmanager without a configuration. "
+ + "Set either the `configuration` or `configText` attribute.";
+ };
+ })
+ (mkIf cfg.enable {
+ networking.firewall.allowedTCPPorts = optional cfg.openFirewall cfg.port;
+
+ systemd.services.alertmanager = {
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+ script = ''
+ ${cfg.package}/bin/alertmanager \
+ ${concatStringsSep " \\\n " cmdlineArgs}
+ '';
+
+ serviceConfig = {
+ User = cfg.user;
+ Group = cfg.group;
+ Restart = "always";
+ PrivateTmp = true;
+ WorkingDirectory = "/tmp";
+ ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
+ };
+ };
+ })
+ ];
}
diff --git a/nixos/modules/services/monitoring/prometheus/default.nix b/nixos/modules/services/monitoring/prometheus/default.nix
index 18391b2f00c..c2dcf1f3036 100644
--- a/nixos/modules/services/monitoring/prometheus/default.nix
+++ b/nixos/modules/services/monitoring/prometheus/default.nix
@@ -7,8 +7,6 @@ let
cfg2 = config.services.prometheus2;
promUser = "prometheus";
promGroup = "prometheus";
- prom2User = "prometheus2";
- prom2Group = "prometheus2";
# Get a submodule without any embedded metadata:
_filter = x: filterAttrs (k: v: k != "_module") x;
@@ -693,11 +691,11 @@ in {
};
})
(mkIf cfg2.enable {
- users.groups.${prom2Group}.gid = config.ids.gids.prometheus2;
- users.users.${prom2User} = {
+ users.groups.${promGroup}.gid = config.ids.gids.prometheus2;
+ users.users.${promUser} = {
description = "Prometheus2 daemon user";
uid = config.ids.uids.prometheus2;
- group = prom2Group;
+ group = promGroup;
home = cfg2.dataDir;
createHome = true;
};
@@ -710,7 +708,7 @@ in {
${concatStringsSep " \\\n " cmdlineArgs2}
'';
serviceConfig = {
- User = prom2User;
+ User = promUser;
Restart = "always";
WorkingDirectory = cfg2.dataDir;
};
diff --git a/nixos/modules/services/monitoring/prometheus/exporters.nix b/nixos/modules/services/monitoring/prometheus/exporters.nix
index 9a2eae6d285..fa53107ef24 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters.nix
@@ -4,10 +4,8 @@ with lib;
let
cfg = config.services.prometheus.exporters;
- cfg2 = config.services.prometheus2.exporters;
- # each attribute in `exporterOpts` is a function that when executed
- # with `cfg` or `cfg2` as parameter is expected to have specified:
+ # each attribute in `exporterOpts` is expected to have specified:
# - port (types.int): port on which the exporter listens
# - serviceOpts (types.attrs): config that is merged with the
# default definition of the exporter's
@@ -110,18 +108,13 @@ let
};
};
- mkSubModules = exCfg:
- (foldl' (a: b: a//b) {}
- (mapAttrsToList (name: confGen:
- let
- conf = (confGen exCfg);
- in
- mkSubModule {
- inherit name;
- inherit (conf) port serviceOpts;
- extraOpts = conf.extraOpts or {};
- }) exporterOpts)
- );
+ mkSubModules = (foldl' (a: b: a//b) {}
+ (mapAttrsToList (name: opts: mkSubModule {
+ inherit name;
+ inherit (opts) port serviceOpts;
+ extraOpts = opts.extraOpts or {};
+ }) exporterOpts)
+ );
mkExporterConf = { name, conf, serviceOpts }:
mkIf conf.enable {
@@ -140,36 +133,11 @@ let
serviceConfig.Group = conf.group;
});
};
- mkExportersConfig = exCfg: promVersion:
- ([{
- assertions = [{
- assertion = (exCfg.snmp.configurationPath == null) != (exCfg.snmp.configuration == null);
- message = ''
- Please ensure you have either `services.prometheus.exporters.snmp.configuration'
- or `services.prometheus${promVersion}.exporters.snmp.configurationPath' set!
- '';
- }];
- }] ++ [(mkIf config.services.minio.enable {
- services."prometheus${promVersion}".exporters.minio = {
- minioAddress = mkDefault "http://localhost:9000";
- minioAccessKey = mkDefault config.services.minio.accessKey;
- minioAccessSecret = mkDefault config.services.minio.secretKey;
- };
- })] ++ (mapAttrsToList (name: confGen:
- let
- conf = (confGen exCfg);
- in
- mkExporterConf {
- inherit name;
- inherit (conf) serviceOpts;
- conf = exCfg.${name};
- }) exporterOpts)
- );
in
{
options.services.prometheus.exporters = mkOption {
type = types.submodule {
- options = (mkSubModules cfg);
+ options = (mkSubModules);
};
description = "Prometheus exporter configuration";
default = {};
@@ -184,24 +152,25 @@ in
'';
};
- options.services.prometheus2.exporters = mkOption {
- type = types.submodule {
- options = (mkSubModules cfg2);
- };
- description = "Prometheus 2 exporter configuration";
- default = {};
- example = literalExample ''
- {
- node = {
- enable = true;
- enabledCollectors = [ "systemd" ];
- };
- varnish.enable = true;
- }
- '';
- };
-
- config = mkMerge ((mkExportersConfig cfg "") ++ (mkExportersConfig cfg2 "2"));
+ config = mkMerge ([{
+ assertions = [{
+ assertion = (cfg.snmp.configurationPath == null) != (cfg.snmp.configuration == null);
+ message = ''
+ Please ensure you have either `services.prometheus.exporters.snmp.configuration'
+ or `services.prometheus.exporters.snmp.configurationPath' set!
+ '';
+ }];
+ }] ++ [(mkIf config.services.minio.enable {
+ services.prometheus.exporters.minio.minioAddress = mkDefault "http://localhost:9000";
+ services.prometheus.exporters.minio.minioAccessKey = mkDefault config.services.minio.accessKey;
+ services.prometheus.exporters.minio.minioAccessSecret = mkDefault config.services.minio.secretKey;
+ })] ++ (mapAttrsToList (name: conf:
+ mkExporterConf {
+ inherit name;
+ inherit (conf) serviceOpts;
+ conf = cfg.${name};
+ }) exporterOpts)
+ );
meta = {
doc = ./exporters.xml;
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/bind.nix b/nixos/modules/services/monitoring/prometheus/exporters/bind.nix
index 9f2a60c60e1..a9746c4d65d 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/bind.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/bind.nix
@@ -2,55 +2,54 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.bind;
- in
- {
- port = 9119;
- extraOpts = {
- bindURI = mkOption {
- type = types.str;
- default = "http://localhost:8053/";
- description = ''
- HTTP XML API address of an Bind server.
- '';
- };
- bindTimeout = mkOption {
- type = types.str;
- default = "10s";
- description = ''
- Timeout for trying to get stats from Bind.
- '';
- };
- bindVersion = mkOption {
- type = types.enum [ "xml.v2" "xml.v3" "auto" ];
- default = "auto";
- description = ''
- BIND statistics version. Can be detected automatically.
- '';
- };
- bindGroups = mkOption {
- type = types.listOf (types.enum [ "server" "view" "tasks" ]);
- default = [ "server" "view" ];
- description = ''
- List of statistics to collect. Available: [server, view, tasks]
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.bind;
+in
+{
+ port = 9119;
+ extraOpts = {
+ bindURI = mkOption {
+ type = types.str;
+ default = "http://localhost:8053/";
+ description = ''
+ HTTP XML API address of an Bind server.
+ '';
};
- serviceOpts = {
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-bind-exporter}/bin/bind_exporter \
- -web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
- -bind.pid-file /var/run/named/named.pid \
- -bind.timeout ${toString cfg.bindTimeout} \
- -bind.stats-url ${cfg.bindURI} \
- -bind.stats-version ${cfg.bindVersion} \
- -bind.stats-groups ${concatStringsSep "," cfg.bindGroups} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+ bindTimeout = mkOption {
+ type = types.str;
+ default = "10s";
+ description = ''
+ Timeout for trying to get stats from Bind.
+ '';
};
- }
+ bindVersion = mkOption {
+ type = types.enum [ "xml.v2" "xml.v3" "auto" ];
+ default = "auto";
+ description = ''
+ BIND statistics version. Can be detected automatically.
+ '';
+ };
+ bindGroups = mkOption {
+ type = types.listOf (types.enum [ "server" "view" "tasks" ]);
+ default = [ "server" "view" ];
+ description = ''
+ List of statistics to collect. Available: [server, view, tasks]
+ '';
+ };
+ };
+ serviceOpts = {
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-bind-exporter}/bin/bind_exporter \
+ -web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+ -bind.pid-file /var/run/named/named.pid \
+ -bind.timeout ${toString cfg.bindTimeout} \
+ -bind.stats-url ${cfg.bindURI} \
+ -bind.stats-version ${cfg.bindVersion} \
+ -bind.stats-groups ${concatStringsSep "," cfg.bindGroups} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/blackbox.nix b/nixos/modules/services/monitoring/prometheus/exporters/blackbox.nix
index f93fae86cda..d09d1c4f366 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/blackbox.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/blackbox.nix
@@ -2,31 +2,30 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.blackbox;
- in
- {
- port = 9115;
- extraOpts = {
- configFile = mkOption {
- type = types.path;
- description = ''
- Path to configuration file.
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.blackbox;
+in
+{
+ port = 9115;
+ extraOpts = {
+ configFile = mkOption {
+ type = types.path;
+ description = ''
+ Path to configuration file.
+ '';
};
- serviceOpts = {
- serviceConfig = {
- AmbientCapabilities = [ "CAP_NET_RAW" ]; # for ping probes
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-blackbox-exporter}/bin/blackbox_exporter \
- --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
- --config.file ${cfg.configFile} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
- };
+ };
+ serviceOpts = {
+ serviceConfig = {
+ AmbientCapabilities = [ "CAP_NET_RAW" ]; # for ping probes
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-blackbox-exporter}/bin/blackbox_exporter \
+ --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+ --config.file ${cfg.configFile} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
};
- }
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/collectd.nix b/nixos/modules/services/monitoring/prometheus/exporters/collectd.nix
index 6ed578851c3..0eba3527162 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/collectd.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/collectd.nix
@@ -2,78 +2,77 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.collectd;
- in
- {
- port = 9103;
- extraOpts = {
- collectdBinary = {
- enable = mkEnableOption "collectd binary protocol receiver";
+let
+ cfg = config.services.prometheus.exporters.collectd;
+in
+{
+ port = 9103;
+ extraOpts = {
+ collectdBinary = {
+ enable = mkEnableOption "collectd binary protocol receiver";
- authFile = mkOption {
- default = null;
- type = types.nullOr types.path;
- description = "File mapping user names to pre-shared keys (passwords).";
- };
-
- port = mkOption {
- type = types.int;
- default = 25826;
- description = ''Network address on which to accept collectd binary network packets.'';
- };
-
- listenAddress = mkOption {
- type = types.str;
- default = "0.0.0.0";
- description = ''
- Address to listen on for binary network packets.
- '';
- };
-
- securityLevel = mkOption {
- type = types.enum ["None" "Sign" "Encrypt"];
- default = "None";
- description = ''
- Minimum required security level for accepted packets.
- '';
- };
+ authFile = mkOption {
+ default = null;
+ type = types.nullOr types.path;
+ description = "File mapping user names to pre-shared keys (passwords).";
};
- logFormat = mkOption {
+ port = mkOption {
+ type = types.int;
+ default = 25826;
+ description = ''Network address on which to accept collectd binary network packets.'';
+ };
+
+ listenAddress = mkOption {
type = types.str;
- default = "logger:stderr";
- example = "logger:syslog?appname=bob&local=7 or logger:stdout?json=true";
+ default = "0.0.0.0";
description = ''
- Set the log target and format.
- '';
+ Address to listen on for binary network packets.
+ '';
};
- logLevel = mkOption {
- type = types.enum ["debug" "info" "warn" "error" "fatal"];
- default = "info";
+ securityLevel = mkOption {
+ type = types.enum ["None" "Sign" "Encrypt"];
+ default = "None";
description = ''
- Only log messages with the given severity or above.
+ Minimum required security level for accepted packets.
'';
};
};
- serviceOpts = let
- collectSettingsArgs = if (cfg.collectdBinary.enable) then ''
- -collectd.listen-address ${cfg.collectdBinary.listenAddress}:${toString cfg.collectdBinary.port} \
- -collectd.security-level ${cfg.collectdBinary.securityLevel} \
- '' else "";
- in {
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-collectd-exporter}/bin/collectd_exporter \
- -log.format ${cfg.logFormat} \
- -log.level ${cfg.logLevel} \
- -web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
- ${collectSettingsArgs} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+
+ logFormat = mkOption {
+ type = types.str;
+ default = "logger:stderr";
+ example = "logger:syslog?appname=bob&local=7 or logger:stdout?json=true";
+ description = ''
+ Set the log target and format.
+ '';
};
- }
+
+ logLevel = mkOption {
+ type = types.enum ["debug" "info" "warn" "error" "fatal"];
+ default = "info";
+ description = ''
+ Only log messages with the given severity or above.
+ '';
+ };
+ };
+ serviceOpts = let
+ collectSettingsArgs = if (cfg.collectdBinary.enable) then ''
+ -collectd.listen-address ${cfg.collectdBinary.listenAddress}:${toString cfg.collectdBinary.port} \
+ -collectd.security-level ${cfg.collectdBinary.securityLevel} \
+ '' else "";
+ in {
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-collectd-exporter}/bin/collectd_exporter \
+ -log.format ${cfg.logFormat} \
+ -log.level ${cfg.logLevel} \
+ -web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+ ${collectSettingsArgs} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/dnsmasq.nix b/nixos/modules/services/monitoring/prometheus/exporters/dnsmasq.nix
index 349012bf85e..b1fab85109a 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/dnsmasq.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/dnsmasq.nix
@@ -2,39 +2,38 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.dnsmasq;
- in
- {
- port = 9153;
- extraOpts = {
- dnsmasqListenAddress = mkOption {
- type = types.str;
- default = "localhost:53";
- description = ''
- Address on which dnsmasq listens.
- '';
- };
- leasesPath = mkOption {
- type = types.path;
- default = "/var/lib/misc/dnsmasq.leases";
- example = "/var/lib/dnsmasq/dnsmasq.leases";
- description = ''
- Path to the dnsmasq.leases file.
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.dnsmasq;
+in
+{
+ port = 9153;
+ extraOpts = {
+ dnsmasqListenAddress = mkOption {
+ type = types.str;
+ default = "localhost:53";
+ description = ''
+ Address on which dnsmasq listens.
+ '';
};
- serviceOpts = {
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-dnsmasq-exporter}/bin/dnsmasq_exporter \
- --listen ${cfg.listenAddress}:${toString cfg.port} \
- --dnsmasq ${cfg.dnsmasqListenAddress} \
- --leases_path ${cfg.leasesPath} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+ leasesPath = mkOption {
+ type = types.path;
+ default = "/var/lib/misc/dnsmasq.leases";
+ example = "/var/lib/dnsmasq/dnsmasq.leases";
+ description = ''
+ Path to the dnsmasq.leases file.
+ '';
};
- }
+ };
+ serviceOpts = {
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-dnsmasq-exporter}/bin/dnsmasq_exporter \
+ --listen ${cfg.listenAddress}:${toString cfg.port} \
+ --dnsmasq ${cfg.dnsmasqListenAddress} \
+ --leases_path ${cfg.leasesPath} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/dovecot.nix b/nixos/modules/services/monitoring/prometheus/exporters/dovecot.nix
index 4747b9b8237..c47e87a3dc3 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/dovecot.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/dovecot.nix
@@ -2,72 +2,71 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.dovecot;
- in
- {
- port = 9166;
- extraOpts = {
- telemetryPath = mkOption {
- type = types.str;
- default = "/metrics";
- description = ''
- Path under which to expose metrics.
- '';
- };
- socketPath = mkOption {
- type = types.path;
- default = "/var/run/dovecot/stats";
- example = "/var/run/dovecot2/old-stats";
- description = ''
- Path under which the stats socket is placed.
- The user/group under which the exporter runs,
- should be able to access the socket in order
- to scrape the metrics successfully.
+let
+ cfg = config.services.prometheus.exporters.dovecot;
+in
+{
+ port = 9166;
+ extraOpts = {
+ telemetryPath = mkOption {
+ type = types.str;
+ default = "/metrics";
+ description = ''
+ Path under which to expose metrics.
+ '';
+ };
+ socketPath = mkOption {
+ type = types.path;
+ default = "/var/run/dovecot/stats";
+ example = "/var/run/dovecot2/old-stats";
+ description = ''
+ Path under which the stats socket is placed.
+ The user/group under which the exporter runs,
+ should be able to access the socket in order
+ to scrape the metrics successfully.
- Please keep in mind that the stats module has changed in
- Dovecot 2.3+ which
- is not compatible with this exporter.
+ Please keep in mind that the stats module has changed in
+ Dovecot 2.3+ which
+ is not compatible with this exporter.
- The following extra config has to be passed to Dovecot to ensure that recent versions
- work with this exporter:
-
- {
- = true;
- = "/var/run/dovecot2/old-stats";
- = '''
- mail_plugins = $mail_plugins old_stats
- service old-stats {
- unix_listener old-stats {
- user = nobody
- group = nobody
- }
+ The following extra config has to be passed to Dovecot to ensure that recent versions
+ work with this exporter:
+
+ {
+ = true;
+ = "/var/run/dovecot2/old-stats";
+ = '''
+ mail_plugins = $mail_plugins old_stats
+ service old-stats {
+ unix_listener old-stats {
+ user = nobody
+ group = nobody
}
- ''';
- }
-
- '';
- };
- scopes = mkOption {
- type = types.listOf types.str;
- default = [ "user" ];
- example = [ "user" "global" ];
- description = ''
- Stats scopes to query.
- '';
- };
+ }
+ ''';
+ }
+
+ '';
};
- serviceOpts = {
- serviceConfig = {
- ExecStart = ''
- ${pkgs.prometheus-dovecot-exporter}/bin/dovecot_exporter \
- --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
- --web.telemetry-path ${cfg.telemetryPath} \
- --dovecot.socket-path ${cfg.socketPath} \
- --dovecot.scopes ${concatStringsSep "," cfg.scopes} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+ scopes = mkOption {
+ type = types.listOf types.str;
+ default = [ "user" ];
+ example = [ "user" "global" ];
+ description = ''
+ Stats scopes to query.
+ '';
};
- }
+ };
+ serviceOpts = {
+ serviceConfig = {
+ ExecStart = ''
+ ${pkgs.prometheus-dovecot-exporter}/bin/dovecot_exporter \
+ --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+ --web.telemetry-path ${cfg.telemetryPath} \
+ --dovecot.socket-path ${cfg.socketPath} \
+ --dovecot.scopes ${concatStringsSep "," cfg.scopes} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/fritzbox.nix b/nixos/modules/services/monitoring/prometheus/exporters/fritzbox.nix
index 4d711c71882..a3f1d9d3132 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/fritzbox.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/fritzbox.nix
@@ -2,39 +2,38 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.fritzbox;
- in
- {
- port = 9133;
- extraOpts = {
- gatewayAddress = mkOption {
- type = types.str;
- default = "fritz.box";
- description = ''
- The hostname or IP of the FRITZ!Box.
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.fritzbox;
+in
+{
+ port = 9133;
+ extraOpts = {
+ gatewayAddress = mkOption {
+ type = types.str;
+ default = "fritz.box";
+ description = ''
+ The hostname or IP of the FRITZ!Box.
+ '';
+ };
- gatewayPort = mkOption {
- type = types.int;
- default = 49000;
- description = ''
- The port of the FRITZ!Box UPnP service.
- '';
- };
+ gatewayPort = mkOption {
+ type = types.int;
+ default = 49000;
+ description = ''
+ The port of the FRITZ!Box UPnP service.
+ '';
};
- serviceOpts = {
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-fritzbox-exporter}/bin/fritzbox_exporter \
- -listen-address ${cfg.listenAddress}:${toString cfg.port} \
- -gateway-address ${cfg.gatewayAddress} \
- -gateway-port ${toString cfg.gatewayPort} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+ };
+ serviceOpts = {
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-fritzbox-exporter}/bin/fritzbox_exporter \
+ -listen-address ${cfg.listenAddress}:${toString cfg.port} \
+ -gateway-address ${cfg.gatewayAddress} \
+ -gateway-port ${toString cfg.gatewayPort} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
};
- }
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/json.nix b/nixos/modules/services/monitoring/prometheus/exporters/json.nix
index b454b8db90d..a5494e85e01 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/json.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/json.nix
@@ -2,36 +2,35 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.json;
- in
- {
- port = 7979;
- extraOpts = {
- url = mkOption {
- type = types.str;
- description = ''
- URL to scrape JSON from.
- '';
- };
- configFile = mkOption {
- type = types.path;
- description = ''
- Path to configuration file.
- '';
- };
- listenAddress = {}; # not used
+let
+ cfg = config.services.prometheus.exporters.json;
+in
+{
+ port = 7979;
+ extraOpts = {
+ url = mkOption {
+ type = types.str;
+ description = ''
+ URL to scrape JSON from.
+ '';
};
- serviceOpts = {
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-json-exporter}/bin/prometheus-json-exporter \
- --port ${toString cfg.port} \
- ${cfg.url} ${cfg.configFile} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+ configFile = mkOption {
+ type = types.path;
+ description = ''
+ Path to configuration file.
+ '';
};
- }
+ listenAddress = {}; # not used
+ };
+ serviceOpts = {
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-json-exporter}/bin/prometheus-json-exporter \
+ --port ${toString cfg.port} \
+ ${cfg.url} ${cfg.configFile} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/minio.nix b/nixos/modules/services/monitoring/prometheus/exporters/minio.nix
index e243294c24e..3cc4ffdbc8f 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/minio.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/minio.nix
@@ -2,65 +2,64 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.minio;
- in
- {
- port = 9290;
- extraOpts = {
- minioAddress = mkOption {
- type = types.str;
- example = "https://10.0.0.1:9000";
- description = ''
- The URL of the minio server.
- Use HTTPS if Minio accepts secure connections only.
- By default this connects to the local minio server if enabled.
- '';
- };
-
- minioAccessKey = mkOption {
- type = types.str;
- example = "yourMinioAccessKey";
- description = ''
- The value of the Minio access key.
- It is required in order to connect to the server.
- By default this uses the one from the local minio server if enabled
- and config.services.minio.accessKey.
- '';
- };
-
- minioAccessSecret = mkOption {
- type = types.str;
- description = ''
- The value of the Minio access secret.
- It is required in order to connect to the server.
- By default this uses the one from the local minio server if enabled
- and config.services.minio.secretKey.
- '';
- };
-
- minioBucketStats = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Collect statistics about the buckets and files in buckets.
- It requires more computation, use it carefully in case of large buckets..
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.minio;
+in
+{
+ port = 9290;
+ extraOpts = {
+ minioAddress = mkOption {
+ type = types.str;
+ example = "https://10.0.0.1:9000";
+ description = ''
+ The URL of the minio server.
+ Use HTTPS if Minio accepts secure connections only.
+ By default this connects to the local minio server if enabled.
+ '';
};
- serviceOpts = {
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-minio-exporter}/bin/minio-exporter \
- -web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
- -minio.server ${cfg.minioAddress} \
- -minio.access-key ${cfg.minioAccessKey} \
- -minio.access-secret ${cfg.minioAccessSecret} \
- ${optionalString cfg.minioBucketStats "-minio.bucket-stats"} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+
+ minioAccessKey = mkOption {
+ type = types.str;
+ example = "yourMinioAccessKey";
+ description = ''
+ The value of the Minio access key.
+ It is required in order to connect to the server.
+ By default this uses the one from the local minio server if enabled
+ and config.services.minio.accessKey.
+ '';
};
- }
+
+ minioAccessSecret = mkOption {
+ type = types.str;
+ description = ''
+ The value of the Minio access secret.
+ It is required in order to connect to the server.
+ By default this uses the one from the local minio server if enabled
+ and config.services.minio.secretKey.
+ '';
+ };
+
+ minioBucketStats = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Collect statistics about the buckets and files in buckets.
+ It requires more computation, use it carefully in case of large buckets..
+ '';
+ };
+ };
+ serviceOpts = {
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-minio-exporter}/bin/minio-exporter \
+ -web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+ -minio.server ${cfg.minioAddress} \
+ -minio.access-key ${cfg.minioAccessKey} \
+ -minio.access-secret ${cfg.minioAccessSecret} \
+ ${optionalString cfg.minioBucketStats "-minio.bucket-stats"} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/nginx.nix b/nixos/modules/services/monitoring/prometheus/exporters/nginx.nix
index bec5f5aa7e4..431dd8b4ead 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/nginx.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/nginx.nix
@@ -2,47 +2,46 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.nginx;
- in
- {
- port = 9113;
- extraOpts = {
- scrapeUri = mkOption {
- type = types.str;
- default = "http://localhost/nginx_status";
- description = ''
- Address to access the nginx status page.
- Can be enabled with services.nginx.statusPage = true.
- '';
- };
- telemetryEndpoint = mkOption {
- type = types.str;
- default = "/metrics";
- description = ''
- Path under which to expose metrics.
- '';
- };
- insecure = mkOption {
- type = types.bool;
- default = true;
- description = ''
- Ignore server certificate if using https.
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.nginx;
+in
+{
+ port = 9113;
+ extraOpts = {
+ scrapeUri = mkOption {
+ type = types.str;
+ default = "http://localhost/nginx_status";
+ description = ''
+ Address to access the nginx status page.
+ Can be enabled with services.nginx.statusPage = true.
+ '';
};
- serviceOpts = {
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-nginx-exporter}/bin/nginx_exporter \
- --nginx.scrape_uri '${cfg.scrapeUri}' \
- --telemetry.address ${cfg.listenAddress}:${toString cfg.port} \
- --telemetry.endpoint ${cfg.telemetryEndpoint} \
- --insecure ${toString cfg.insecure} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+ telemetryEndpoint = mkOption {
+ type = types.str;
+ default = "/metrics";
+ description = ''
+ Path under which to expose metrics.
+ '';
};
- }
+ insecure = mkOption {
+ type = types.bool;
+ default = true;
+ description = ''
+ Ignore server certificate if using https.
+ '';
+ };
+ };
+ serviceOpts = {
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-nginx-exporter}/bin/nginx_exporter \
+ --nginx.scrape_uri '${cfg.scrapeUri}' \
+ --telemetry.address ${cfg.listenAddress}:${toString cfg.port} \
+ --telemetry.endpoint ${cfg.telemetryEndpoint} \
+ --insecure ${toString cfg.insecure} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/node.nix b/nixos/modules/services/monitoring/prometheus/exporters/node.nix
index b57396f9f4f..ee7bf39f199 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/node.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/node.nix
@@ -2,40 +2,39 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.node;
- in
- {
- port = 9100;
- extraOpts = {
- enabledCollectors = mkOption {
- type = types.listOf types.string;
- default = [];
- example = ''[ "systemd" ]'';
- description = ''
- Collectors to enable. The collectors listed here are enabled in addition to the default ones.
- '';
- };
- disabledCollectors = mkOption {
- type = types.listOf types.str;
- default = [];
- example = ''[ "timex" ]'';
- description = ''
- Collectors to disable which are enabled by default.
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.node;
+in
+{
+ port = 9100;
+ extraOpts = {
+ enabledCollectors = mkOption {
+ type = types.listOf types.string;
+ default = [];
+ example = ''[ "systemd" ]'';
+ description = ''
+ Collectors to enable. The collectors listed here are enabled in addition to the default ones.
+ '';
};
- serviceOpts = {
- serviceConfig = {
- RuntimeDirectory = "prometheus-node-exporter";
- ExecStart = ''
- ${pkgs.prometheus-node-exporter}/bin/node_exporter \
- ${concatMapStringsSep " " (x: "--collector." + x) cfg.enabledCollectors} \
- ${concatMapStringsSep " " (x: "--no-collector." + x) cfg.disabledCollectors} \
- --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+ disabledCollectors = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = ''[ "timex" ]'';
+ description = ''
+ Collectors to disable which are enabled by default.
+ '';
};
- }
+ };
+ serviceOpts = {
+ serviceConfig = {
+ RuntimeDirectory = "prometheus-node-exporter";
+ ExecStart = ''
+ ${pkgs.prometheus-node-exporter}/bin/node_exporter \
+ ${concatMapStringsSep " " (x: "--collector." + x) cfg.enabledCollectors} \
+ ${concatMapStringsSep " " (x: "--no-collector." + x) cfg.disabledCollectors} \
+ --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/postfix.nix b/nixos/modules/services/monitoring/prometheus/exporters/postfix.nix
index 66e9ff0827c..efe78ebcba8 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/postfix.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/postfix.nix
@@ -2,81 +2,80 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.postfix;
- in
- {
- port = 9154;
- extraOpts = {
- telemetryPath = mkOption {
+let
+ cfg = config.services.prometheus.exporters.postfix;
+in
+{
+ port = 9154;
+ extraOpts = {
+ telemetryPath = mkOption {
+ type = types.str;
+ default = "/metrics";
+ description = ''
+ Path under which to expose metrics.
+ '';
+ };
+ logfilePath = mkOption {
+ type = types.path;
+ default = "/var/log/postfix_exporter_input.log";
+ example = "/var/log/mail.log";
+ description = ''
+ Path where Postfix writes log entries.
+ This file will be truncated by this exporter!
+ '';
+ };
+ showqPath = mkOption {
+ type = types.path;
+ default = "/var/spool/postfix/public/showq";
+ example = "/var/lib/postfix/queue/public/showq";
+ description = ''
+ Path where Postfix places it's showq socket.
+ '';
+ };
+ systemd = {
+ enable = mkEnableOption ''
+ reading metrics from the systemd-journal instead of from a logfile
+ '';
+ unit = mkOption {
type = types.str;
- default = "/metrics";
+ default = "postfix.service";
description = ''
- Path under which to expose metrics.
+ Name of the postfix systemd unit.
'';
};
- logfilePath = mkOption {
- type = types.path;
- default = "/var/log/postfix_exporter_input.log";
- example = "/var/log/mail.log";
+ slice = mkOption {
+ type = types.nullOr types.str;
+ default = null;
description = ''
- Path where Postfix writes log entries.
- This file will be truncated by this exporter!
+ Name of the postfix systemd slice.
+ This overrides the .
'';
};
- showqPath = mkOption {
- type = types.path;
- default = "/var/spool/postfix/public/showq";
- example = "/var/lib/postfix/queue/public/showq";
+ journalPath = mkOption {
+ type = types.nullOr types.path;
+ default = null;
description = ''
- Path where Postfix places it's showq socket.
- '';
- };
- systemd = {
- enable = mkEnableOption ''
- reading metrics from the systemd-journal instead of from a logfile
- '';
- unit = mkOption {
- type = types.str;
- default = "postfix.service";
- description = ''
- Name of the postfix systemd unit.
- '';
- };
- slice = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = ''
- Name of the postfix systemd slice.
- This overrides the .
- '';
- };
- journalPath = mkOption {
- type = types.nullOr types.path;
- default = null;
- description = ''
- Path to the systemd journal.
- '';
- };
- };
- };
- serviceOpts = {
- serviceConfig = {
- ExecStart = ''
- ${pkgs.prometheus-postfix-exporter}/bin/postfix_exporter \
- --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
- --web.telemetry-path ${cfg.telemetryPath} \
- --postfix.showq_path ${cfg.showqPath} \
- ${concatStringsSep " \\\n " (cfg.extraFlags
- ++ optional cfg.systemd.enable "--systemd.enable"
- ++ optional cfg.systemd.enable (if cfg.systemd.slice != null
- then "--systemd.slice ${cfg.systemd.slice}"
- else "--systemd.unit ${cfg.systemd.unit}")
- ++ optional (cfg.systemd.enable && (cfg.systemd.journalPath != null))
- "--systemd.jounal_path ${cfg.systemd.journalPath}"
- ++ optional (!cfg.systemd.enable) "--postfix.logfile_path ${cfg.logfilePath}")}
+ Path to the systemd journal.
'';
};
};
- }
+ };
+ serviceOpts = {
+ serviceConfig = {
+ ExecStart = ''
+ ${pkgs.prometheus-postfix-exporter}/bin/postfix_exporter \
+ --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+ --web.telemetry-path ${cfg.telemetryPath} \
+ --postfix.showq_path ${cfg.showqPath} \
+ ${concatStringsSep " \\\n " (cfg.extraFlags
+ ++ optional cfg.systemd.enable "--systemd.enable"
+ ++ optional cfg.systemd.enable (if cfg.systemd.slice != null
+ then "--systemd.slice ${cfg.systemd.slice}"
+ else "--systemd.unit ${cfg.systemd.unit}")
+ ++ optional (cfg.systemd.enable && (cfg.systemd.journalPath != null))
+ "--systemd.jounal_path ${cfg.systemd.journalPath}"
+ ++ optional (!cfg.systemd.enable) "--postfix.logfile_path ${cfg.logfilePath}")}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/snmp.nix b/nixos/modules/services/monitoring/prometheus/exporters/snmp.nix
index 09209857f19..0d919412432 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/snmp.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/snmp.nix
@@ -2,71 +2,70 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.snmp;
- in
- {
- port = 9116;
- extraOpts = {
- configurationPath = mkOption {
- type = types.nullOr types.path;
- default = null;
- description = ''
- Path to a snmp exporter configuration file. Mutually exclusive with 'configuration' option.
- '';
- example = "./snmp.yml";
- };
+let
+ cfg = config.services.prometheus.exporters.snmp;
+in
+{
+ port = 9116;
+ extraOpts = {
+ configurationPath = mkOption {
+ type = types.nullOr types.path;
+ default = null;
+ description = ''
+ Path to a snmp exporter configuration file. Mutually exclusive with 'configuration' option.
+ '';
+ example = "./snmp.yml";
+ };
- configuration = mkOption {
- type = types.nullOr types.attrs;
- default = {};
- description = ''
- Snmp exporter configuration as nix attribute set. Mutually exclusive with 'configurationPath' option.
- '';
- example = ''
- {
- "default" = {
- "version" = 2;
- "auth" = {
- "community" = "public";
- };
+ configuration = mkOption {
+ type = types.nullOr types.attrs;
+ default = {};
+ description = ''
+ Snmp exporter configuration as nix attribute set. Mutually exclusive with 'configurationPath' option.
+ '';
+ example = ''
+ {
+ "default" = {
+ "version" = 2;
+ "auth" = {
+ "community" = "public";
};
};
- '';
- };
-
- logFormat = mkOption {
- type = types.str;
- default = "logger:stderr";
- description = ''
- Set the log target and format.
- '';
- };
-
- logLevel = mkOption {
- type = types.enum ["debug" "info" "warn" "error" "fatal"];
- default = "info";
- description = ''
- Only log messages with the given severity or above.
- '';
- };
+ };
+ '';
};
- serviceOpts = let
- configFile = if cfg.configurationPath != null
- then cfg.configurationPath
- else "${pkgs.writeText "snmp-eporter-conf.yml" (builtins.toJSON cfg.configuration)}";
- in {
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-snmp-exporter.bin}/bin/snmp_exporter \
- --config.file ${configFile} \
- --log.format ${cfg.logFormat} \
- --log.level ${cfg.logLevel} \
- --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+
+ logFormat = mkOption {
+ type = types.str;
+ default = "logger:stderr";
+ description = ''
+ Set the log target and format.
+ '';
};
- }
+
+ logLevel = mkOption {
+ type = types.enum ["debug" "info" "warn" "error" "fatal"];
+ default = "info";
+ description = ''
+ Only log messages with the given severity or above.
+ '';
+ };
+ };
+ serviceOpts = let
+ configFile = if cfg.configurationPath != null
+ then cfg.configurationPath
+ else "${pkgs.writeText "snmp-eporter-conf.yml" (builtins.toJSON cfg.configuration)}";
+ in {
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-snmp-exporter.bin}/bin/snmp_exporter \
+ --config.file=${configFile} \
+ --log.format=${cfg.logFormat} \
+ --log.level=${cfg.logLevel} \
+ --web.listen-address=${cfg.listenAddress}:${toString cfg.port} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/surfboard.nix b/nixos/modules/services/monitoring/prometheus/exporters/surfboard.nix
index bd7c18fe650..715dba06a3d 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/surfboard.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/surfboard.nix
@@ -2,32 +2,31 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.surfboard;
- in
- {
- port = 9239;
- extraOpts = {
- modemAddress = mkOption {
- type = types.str;
- default = "192.168.100.1";
- description = ''
- The hostname or IP of the cable modem.
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.surfboard;
+in
+{
+ port = 9239;
+ extraOpts = {
+ modemAddress = mkOption {
+ type = types.str;
+ default = "192.168.100.1";
+ description = ''
+ The hostname or IP of the cable modem.
+ '';
};
- serviceOpts = {
- description = "Prometheus exporter for surfboard cable modem";
- unitConfig.Documentation = "https://github.com/ipstatic/surfboard_exporter";
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-surfboard-exporter}/bin/surfboard_exporter \
- --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
- --modem-address ${cfg.modemAddress} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+ };
+ serviceOpts = {
+ description = "Prometheus exporter for surfboard cable modem";
+ unitConfig.Documentation = "https://github.com/ipstatic/surfboard_exporter";
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-surfboard-exporter}/bin/surfboard_exporter \
+ --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+ --modem-address ${cfg.modemAddress} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
};
- }
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/tor.nix b/nixos/modules/services/monitoring/prometheus/exporters/tor.nix
index 3d5e546fc07..e0ae8380242 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/tor.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/tor.nix
@@ -2,45 +2,44 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.tor;
- in
- {
- port = 9130;
- extraOpts = {
- torControlAddress = mkOption {
- type = types.str;
- default = "127.0.0.1";
- description = ''
- Tor control IP address or hostname.
- '';
- };
-
- torControlPort = mkOption {
- type = types.int;
- default = 9051;
- description = ''
- Tor control port.
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.tor;
+in
+{
+ port = 9130;
+ extraOpts = {
+ torControlAddress = mkOption {
+ type = types.str;
+ default = "127.0.0.1";
+ description = ''
+ Tor control IP address or hostname.
+ '';
};
- serviceOpts = {
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-tor-exporter}/bin/prometheus-tor-exporter \
- -b ${cfg.listenAddress} \
- -p ${toString cfg.port} \
- -a ${cfg.torControlAddress} \
- -c ${toString cfg.torControlPort} \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
- # CPython requires a process to either have $HOME defined or run as a UID
- # defined in /etc/passwd. The latter is false with DynamicUser, so define a
- # dummy $HOME. https://bugs.python.org/issue10496
- environment = { HOME = "/var/empty"; };
+ torControlPort = mkOption {
+ type = types.int;
+ default = 9051;
+ description = ''
+ Tor control port.
+ '';
};
- }
+ };
+ serviceOpts = {
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-tor-exporter}/bin/prometheus-tor-exporter \
+ -b ${cfg.listenAddress} \
+ -p ${toString cfg.port} \
+ -a ${cfg.torControlAddress} \
+ -c ${toString cfg.torControlPort} \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+
+ # CPython requires a process to either have $HOME defined or run as a UID
+ # defined in /etc/passwd. The latter is false with DynamicUser, so define a
+ # dummy $HOME. https://bugs.python.org/issue10496
+ environment = { HOME = "/var/empty"; };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/unifi.nix b/nixos/modules/services/monitoring/prometheus/exporters/unifi.nix
index e90f0285102..011dcbe208e 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/unifi.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/unifi.nix
@@ -2,67 +2,66 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.unifi;
- in
- {
- port = 9130;
- extraOpts = {
- unifiAddress = mkOption {
- type = types.str;
- example = "https://10.0.0.1:8443";
- description = ''
- URL of the UniFi Controller API.
- '';
- };
-
- unifiInsecure = mkOption {
- type = types.bool;
- default = false;
- description = ''
- If enabled skip the verification of the TLS certificate of the UniFi Controller API.
- Use with caution.
- '';
- };
-
- unifiUsername = mkOption {
- type = types.str;
- example = "ReadOnlyUser";
- description = ''
- username for authentication against UniFi Controller API.
- '';
- };
-
- unifiPassword = mkOption {
- type = types.str;
- description = ''
- Password for authentication against UniFi Controller API.
- '';
- };
-
- unifiTimeout = mkOption {
- type = types.str;
- default = "5s";
- example = "2m";
- description = ''
- Timeout including unit for UniFi Controller API requests.
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.unifi;
+in
+{
+ port = 9130;
+ extraOpts = {
+ unifiAddress = mkOption {
+ type = types.str;
+ example = "https://10.0.0.1:8443";
+ description = ''
+ URL of the UniFi Controller API.
+ '';
};
- serviceOpts = {
- serviceConfig = {
- DynamicUser = true;
- ExecStart = ''
- ${pkgs.prometheus-unifi-exporter}/bin/unifi_exporter \
- -telemetry.addr ${cfg.listenAddress}:${toString cfg.port} \
- -unifi.addr ${cfg.unifiAddress} \
- -unifi.username ${cfg.unifiUsername} \
- -unifi.password ${cfg.unifiPassword} \
- -unifi.timeout ${cfg.unifiTimeout} \
- ${optionalString cfg.unifiInsecure "-unifi.insecure" } \
- ${concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
+
+ unifiInsecure = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ If enabled skip the verification of the TLS certificate of the UniFi Controller API.
+ Use with caution.
+ '';
};
- }
+
+ unifiUsername = mkOption {
+ type = types.str;
+ example = "ReadOnlyUser";
+ description = ''
+ username for authentication against UniFi Controller API.
+ '';
+ };
+
+ unifiPassword = mkOption {
+ type = types.str;
+ description = ''
+ Password for authentication against UniFi Controller API.
+ '';
+ };
+
+ unifiTimeout = mkOption {
+ type = types.str;
+ default = "5s";
+ example = "2m";
+ description = ''
+ Timeout including unit for UniFi Controller API requests.
+ '';
+ };
+ };
+ serviceOpts = {
+ serviceConfig = {
+ DynamicUser = true;
+ ExecStart = ''
+ ${pkgs.prometheus-unifi-exporter}/bin/unifi_exporter \
+ -telemetry.addr ${cfg.listenAddress}:${toString cfg.port} \
+ -unifi.addr ${cfg.unifiAddress} \
+ -unifi.username ${cfg.unifiUsername} \
+ -unifi.password ${cfg.unifiPassword} \
+ -unifi.timeout ${cfg.unifiTimeout} \
+ ${optionalString cfg.unifiInsecure "-unifi.insecure" } \
+ ${concatStringsSep " \\\n " cfg.extraFlags}
+ '';
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/varnish.nix b/nixos/modules/services/monitoring/prometheus/exporters/varnish.nix
index 793725f99a3..aaed76175b8 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/varnish.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/varnish.nix
@@ -2,88 +2,87 @@
with lib;
-baseCfg:
- let
- cfg = baseCfg.varnish;
- in
- {
- port = 9131;
- extraOpts = {
- noExit = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Do not exit server on Varnish scrape errors.
- '';
- };
- withGoMetrics = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Export go runtime and http handler metrics.
- '';
- };
- verbose = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Enable verbose logging.
- '';
- };
- raw = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Enable raw stdout logging without timestamps.
- '';
- };
- varnishStatPath = mkOption {
- type = types.str;
- default = "varnishstat";
- description = ''
- Path to varnishstat.
- '';
- };
- instance = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = ''
- varnishstat -n value.
- '';
- };
- healthPath = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = ''
- Path under which to expose healthcheck. Disabled unless configured.
- '';
- };
- telemetryPath = mkOption {
- type = types.str;
- default = "/metrics";
- description = ''
- Path under which to expose metrics.
- '';
- };
+let
+ cfg = config.services.prometheus.exporters.varnish;
+in
+{
+ port = 9131;
+ extraOpts = {
+ noExit = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Do not exit server on Varnish scrape errors.
+ '';
};
- serviceOpts = {
- path = [ pkgs.varnish ];
- serviceConfig = {
- DynamicUser = true;
- RestartSec = mkDefault 1;
- ExecStart = ''
- ${pkgs.prometheus-varnish-exporter}/bin/prometheus_varnish_exporter \
- --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
- --web.telemetry-path ${cfg.telemetryPath} \
- --varnishstat-path ${cfg.varnishStatPath} \
- ${concatStringsSep " \\\n " (cfg.extraFlags
- ++ optional (cfg.healthPath != null) "--web.health-path ${cfg.healthPath}"
- ++ optional (cfg.instance != null) "-n ${cfg.instance}"
- ++ optional cfg.noExit "--no-exit"
- ++ optional cfg.withGoMetrics "--with-go-metrics"
- ++ optional cfg.verbose "--verbose"
- ++ optional cfg.raw "--raw")}
- '';
- };
+ withGoMetrics = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Export go runtime and http handler metrics.
+ '';
};
- }
+ verbose = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Enable verbose logging.
+ '';
+ };
+ raw = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Enable raw stdout logging without timestamps.
+ '';
+ };
+ varnishStatPath = mkOption {
+ type = types.str;
+ default = "varnishstat";
+ description = ''
+ Path to varnishstat.
+ '';
+ };
+ instance = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ description = ''
+ varnishstat -n value.
+ '';
+ };
+ healthPath = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ description = ''
+ Path under which to expose healthcheck. Disabled unless configured.
+ '';
+ };
+ telemetryPath = mkOption {
+ type = types.str;
+ default = "/metrics";
+ description = ''
+ Path under which to expose metrics.
+ '';
+ };
+ };
+ serviceOpts = {
+ path = [ pkgs.varnish ];
+ serviceConfig = {
+ DynamicUser = true;
+ RestartSec = mkDefault 1;
+ ExecStart = ''
+ ${pkgs.prometheus-varnish-exporter}/bin/prometheus_varnish_exporter \
+ --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+ --web.telemetry-path ${cfg.telemetryPath} \
+ --varnishstat-path ${cfg.varnishStatPath} \
+ ${concatStringsSep " \\\n " (cfg.extraFlags
+ ++ optional (cfg.healthPath != null) "--web.health-path ${cfg.healthPath}"
+ ++ optional (cfg.instance != null) "-n ${cfg.instance}"
+ ++ optional cfg.noExit "--no-exit"
+ ++ optional cfg.withGoMetrics "--with-go-metrics"
+ ++ optional cfg.verbose "--verbose"
+ ++ optional cfg.raw "--raw")}
+ '';
+ };
+ };
+}