nixos/prometheus-exporters: add mail exporter module
This commit is contained in:
parent
b22a75bf00
commit
5818c73d95
@ -28,6 +28,7 @@ let
|
|||||||
"dovecot"
|
"dovecot"
|
||||||
"fritzbox"
|
"fritzbox"
|
||||||
"json"
|
"json"
|
||||||
|
"mail"
|
||||||
"minio"
|
"minio"
|
||||||
"nginx"
|
"nginx"
|
||||||
"node"
|
"node"
|
||||||
@ -168,6 +169,12 @@ in
|
|||||||
Please ensure you have either `services.prometheus.exporters.snmp.configuration'
|
Please ensure you have either `services.prometheus.exporters.snmp.configuration'
|
||||||
or `services.prometheus.exporters.snmp.configurationPath' set!
|
or `services.prometheus.exporters.snmp.configurationPath' set!
|
||||||
'';
|
'';
|
||||||
|
} {
|
||||||
|
assertion = (cfg.mail.configFile == null) != (cfg.mail.configuration == {});
|
||||||
|
message = ''
|
||||||
|
Please specify either 'services.prometheus.exporters.mail.configuration'
|
||||||
|
or 'services.prometheus.exporters.mail.configFile'.
|
||||||
|
'';
|
||||||
} ];
|
} ];
|
||||||
}] ++ [(mkIf config.services.minio.enable {
|
}] ++ [(mkIf config.services.minio.enable {
|
||||||
services.prometheus.exporters.minio.minioAddress = mkDefault "http://localhost:9000";
|
services.prometheus.exporters.minio.minioAddress = mkDefault "http://localhost:9000";
|
||||||
|
156
nixos/modules/services/monitoring/prometheus/exporters/mail.nix
Normal file
156
nixos/modules/services/monitoring/prometheus/exporters/mail.nix
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
{ config, lib, pkgs, options }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.prometheus.exporters.mail;
|
||||||
|
|
||||||
|
configurationFile = pkgs.writeText "prometheus-mail-exporter.conf" (builtins.toJSON (
|
||||||
|
# removes the _module attribute, null values and converts attrNames to lowercase
|
||||||
|
mapAttrs' (name: value:
|
||||||
|
if name == "servers"
|
||||||
|
then nameValuePair (toLower name)
|
||||||
|
((map (srv: (mapAttrs' (n: v: nameValuePair (toLower n) v)
|
||||||
|
(filterAttrs (n: v: !(n == "_module" || v == null)) srv)
|
||||||
|
))) value)
|
||||||
|
else nameValuePair (toLower name) value
|
||||||
|
) (filterAttrs (n: _: !(n == "_module")) cfg.configuration)
|
||||||
|
));
|
||||||
|
|
||||||
|
serverOptions.options = {
|
||||||
|
name = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = ''
|
||||||
|
Value for label 'configname' which will be added to all metrics.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
server = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = ''
|
||||||
|
Hostname of the server that should be probed.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
port = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
example = 587;
|
||||||
|
description = ''
|
||||||
|
Port to use for SMTP.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
from = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
example = "exporteruser@domain.tld";
|
||||||
|
description = ''
|
||||||
|
Content of 'From' Header for probing mails.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
to = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
example = "exporteruser@domain.tld";
|
||||||
|
description = ''
|
||||||
|
Content of 'To' Header for probing mails.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
detectionDir = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
example = "/var/spool/mail/exporteruser/new";
|
||||||
|
description = ''
|
||||||
|
Directory in which new mails for the exporter user are placed.
|
||||||
|
Note that this needs to exist when the exporter starts.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
login = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
example = "exporteruser@domain.tld";
|
||||||
|
description = ''
|
||||||
|
Username to use for SMTP authentication.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
passphrase = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Password to use for SMTP authentication.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
exporterOptions.options = {
|
||||||
|
monitoringInterval = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
example = "10s";
|
||||||
|
description = ''
|
||||||
|
Time interval between two probe attempts.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
mailCheckTimeout = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = ''
|
||||||
|
Timeout until mails are considered "didn't make it".
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
disableFileDelition = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Disables the exporter's function to delete probing mails.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
servers = mkOption {
|
||||||
|
type = types.listOf (types.submodule serverOptions);
|
||||||
|
default = [];
|
||||||
|
example = literalExample ''
|
||||||
|
[ {
|
||||||
|
name = "testserver";
|
||||||
|
server = "smtp.domain.tld";
|
||||||
|
port = 587;
|
||||||
|
from = "exporteruser@domain.tld";
|
||||||
|
to = "exporteruser@domain.tld";
|
||||||
|
detectionDir = "/path/to/Maildir/new";
|
||||||
|
} ]
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
List of servers that should be probed.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
port = 9225;
|
||||||
|
extraOpts = {
|
||||||
|
configFile = mkOption {
|
||||||
|
type = types.nullOr types.path;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Specify the mailexporter configuration file to use.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
configuration = mkOption {
|
||||||
|
type = types.submodule exporterOptions;
|
||||||
|
default = {};
|
||||||
|
description = ''
|
||||||
|
Specify the mailexporter configuration file to use.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
telemetryPath = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "/metrics";
|
||||||
|
description = ''
|
||||||
|
Path under which to expose metrics.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
serviceOpts = {
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = ''
|
||||||
|
${pkgs.prometheus-mail-exporter}/bin/mailexporter \
|
||||||
|
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
|
||||||
|
--config.file ${
|
||||||
|
if cfg.configuration != {} then configurationFile else cfg.configFile
|
||||||
|
} \
|
||||||
|
${concatStringsSep " \\\n " cfg.extraFlags}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user