Merge pull request #99079 from mayflower/openvpn-exporter-upstream

nixos/prometheus-exporters/openvpn: init

Changed files
+66 -4
nixos
modules
services
monitoring
prometheus
tests
+2 -4
nixos/modules/services/monitoring/prometheus/exporters.nix
···
"nextcloud"
"nginx"
"node"
+
"openvpn"
"postfix"
"postgres"
"redis"
···
default = "${name}-exporter";
description = ''
User name under which the ${name} exporter shall be run.
-
Has no effect when <option>systemd.services.prometheus-${name}-exporter.serviceConfig.DynamicUser</option> is true.
'';
};
group = mkOption {
···
default = "${name}-exporter";
description = ''
Group under which the ${name} exporter shall be run.
-
Has no effect when <option>systemd.services.prometheus-${name}-exporter.serviceConfig.DynamicUser</option> is true.
'';
};
});
···
serviceConfig.PrivateTmp = mkDefault true;
serviceConfig.WorkingDirectory = mkDefault /tmp;
serviceConfig.DynamicUser = mkDefault enableDynamicUser;
-
} serviceOpts ] ++ optional (!enableDynamicUser) {
serviceConfig.User = conf.user;
serviceConfig.Group = conf.group;
-
});
+
} serviceOpts ]);
};
in
{
+39
nixos/modules/services/monitoring/prometheus/exporters/openvpn.nix
···
+
{ config, pkgs, lib, ... }:
+
+
with lib;
+
+
let
+
cfg = config.services.prometheus.exporters.openvpn;
+
in {
+
port = 9176;
+
extraOpts = {
+
statusPaths = mkOption {
+
type = types.listOf types.str;
+
description = ''
+
Paths to OpenVPN status files. Please configure the OpenVPN option
+
<literal>status</literal> accordingly.
+
'';
+
};
+
telemetryPath = mkOption {
+
type = types.str;
+
default = "/metrics";
+
description = ''
+
Path under which to expose metrics.
+
'';
+
};
+
};
+
+
serviceOpts = {
+
serviceConfig = {
+
PrivateDevices = true;
+
ProtectKernelModules = true;
+
NoNewPrivileges = true;
+
ExecStart = ''
+
${pkgs.prometheus-openvpn-exporter}/bin/openvpn_exporter \
+
-openvpn.status_paths "${concatStringsSep "," cfg.statusPaths}" \
+
-web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+
-web.telemetry-path ${cfg.telemetryPath}
+
'';
+
};
+
};
+
}
+25
nixos/tests/prometheus-exporters.nix
···
'';
};
+
openvpn = {
+
exporterConfig = {
+
enable = true;
+
group = "openvpn";
+
statusPaths = ["/run/openvpn-test"];
+
};
+
metricProvider = {
+
users.groups.openvpn = {};
+
services.openvpn.servers.test = {
+
config = ''
+
dev tun
+
status /run/openvpn-test
+
status-version 3
+
'';
+
up = "chmod g+r /run/openvpn-test";
+
};
+
systemd.services."openvpn-test".serviceConfig.Group = "openvpn";
+
};
+
exporterTest = ''
+
wait_for_unit("openvpn-test.service")
+
wait_for_unit("prometheus-openvpn-exporter.service")
+
succeed("curl -sSf http://localhost:9176/metrics | grep -q 'openvpn_up{.*} 1'")
+
'';
+
};
+
postfix = {
exporterConfig = {
enable = true;