nixos/prometheus: add unbound exporter

Changed files
+60
nixos
modules
services
monitoring
prometheus
+1
nixos/modules/services/monitoring/prometheus/exporters.nix
···
"surfboard"
"systemd"
"tor"
+
"unbound"
"unifi"
"unifi-poller"
"varnish"
+59
nixos/modules/services/monitoring/prometheus/exporters/unbound.nix
···
+
{ config, lib, pkgs, options }:
+
+
with lib;
+
+
let
+
cfg = config.services.prometheus.exporters.unbound;
+
in
+
{
+
port = 9167;
+
extraOpts = {
+
fetchType = mkOption {
+
# TODO: add shm when upstream implemented it
+
type = types.enum [ "tcp" "uds" ];
+
default = "uds";
+
description = ''
+
Which methods the exporter uses to get the information from unbound.
+
'';
+
};
+
+
telemetryPath = mkOption {
+
type = types.str;
+
default = "/metrics";
+
description = ''
+
Path under which to expose metrics.
+
'';
+
};
+
+
controlInterface = mkOption {
+
type = types.nullOr types.str;
+
default = null;
+
example = "/run/unbound/unbound.socket";
+
description = ''
+
Path to the unbound socket for uds mode or the control interface port for tcp mode.
+
+
Example:
+
uds-mode: /run/unbound/unbound.socket
+
tcp-mode: 127.0.0.1:8953
+
'';
+
};
+
};
+
+
serviceOpts = mkMerge ([{
+
serviceConfig = {
+
ExecStart = ''
+
${pkgs.prometheus-unbound-exporter}/bin/unbound-telemetry \
+
${cfg.fetchType} \
+
--bind ${cfg.listenAddress}:${toString cfg.port} \
+
--path ${cfg.telemetryPath} \
+
${optionalString (cfg.controlInterface != null) "--control-interface ${cfg.controlInterface}"} \
+
${toString cfg.extraFlags}
+
'';
+
};
+
}] ++ [
+
(mkIf config.services.unbound.enable {
+
after = [ "unbound.service" ];
+
requires = [ "unbound.service" ];
+
})
+
]);
+
}