add module for node exporter
This commit is contained in:
parent
6b24432c10
commit
d3e61d3b89
77
pp-node-exporter.nix
Normal file
77
pp-node-exporter.nix
Normal file
|
@ -0,0 +1,77 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
cfg = config.services.ppNodeExporter;
|
||||
prometheusCaFile = pkgs.writeTextFile {
|
||||
name = "prometheus_ca.pem";
|
||||
text = cfg.prometheusCa;
|
||||
};
|
||||
yaml = pkgs.formats.yaml { };
|
||||
nodeWebConfig = yaml.generate "prometheus-node-exporter-webconfig.yml" {
|
||||
tls_server_config = {
|
||||
client_ca_file = prometheusCaFile;
|
||||
cert_file = cfg.prometheusNodeExporterCertFile;
|
||||
key_file = cfg.prometheusNodeExporterCertKeyFile;
|
||||
client_auth_type = "RequireAndVerifyClientCert";
|
||||
client_allowed_sans = lib.mkIf (cfg.prometheusNodeExporterAllowScrapperSans != null) cfg.prometheusNodeExporterAllowScrapperSans;
|
||||
};
|
||||
};
|
||||
in {
|
||||
options.services.ppNodeExporter = {
|
||||
prometheusCa = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = ''
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIBaTCCAQ6gAwIBAgIUccDw/Xe2RC4p9gwdQMkcbPlS740wCgYIKoZIzj0EAwIw
|
||||
EjEQMA4GA1UEAwwHZXhhbXBsZTAeFw0yNTAyMjMxMTQzMTlaFw0zNTAyMjExMTQz
|
||||
MTlaMBIxEDAOBgNVBAMMB2V4YW1wbGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC
|
||||
AARk2SGMdAzOR+I+xAJDXO2nm8N4oa8V/kqstJrvd3gGTVsk8b0/EA+6ZrFISL0t
|
||||
MroC27QCybMwRol9oalSVnoCo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
|
||||
/wQEAwIBhjAdBgNVHQ4EFgQUy13fD60aREMworuMEulXdkvTKOwwCgYIKoZIzj0E
|
||||
AwIDSQAwRgIhALcoP/hicosVELvPfnomcEsWXTkkIVGbu1NeS5I2L72YAiEAi3AG
|
||||
7/hpeMxkaE0d2D8pr6exVlZR7kDa9FgDpfu/+a0=
|
||||
-----END CERTIFICATE-----
|
||||
'';
|
||||
description = "The CA that issues the prometheus scrapper certificate";
|
||||
};
|
||||
prometheusNodeExporterCertFile = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = "/etc/prometheus-node-exporter/node-exporter.pem";
|
||||
description = "The file of the certificate use by prometheus node exporter.";
|
||||
};
|
||||
prometheusNodeExporterCertKeyFile = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = "/etc/prometheus-node-exporter/node-exporter.key";
|
||||
description = "The file of the key for the certificate used by prometheus node exporter.";
|
||||
};
|
||||
prometheusNodeExporterAllowScrapperSans = lib.mkOption {
|
||||
type = lib.types.nullOr (lib.types.listOf lib.types.str);
|
||||
default = null;
|
||||
example = [ "prometheus.example.com" ];
|
||||
description = "The list of Subject Alternative Names allowed to scrape node exporter. If not set, do not check Subject Names.";
|
||||
};
|
||||
};
|
||||
config = {
|
||||
system.activationScripts = {
|
||||
prometheusNodeExporterFilePermission.text =
|
||||
''
|
||||
chmod 640 ${cfg.prometheusNodeExporterCertFile}
|
||||
chmod 640 ${cfg.prometheusNodeExporterCertKeyFile}
|
||||
chown root:${config.services.prometheus.exporters.node.group} ${cfg.prometheusNodeExporterCertFile}
|
||||
chown root:${config.services.prometheus.exporters.node.group} ${cfg.prometheusNodeExporterCertKeyFile}
|
||||
'';
|
||||
};
|
||||
|
||||
services.prometheus = {
|
||||
exporters = {
|
||||
node = {
|
||||
enable = true;
|
||||
port = 9100; # default
|
||||
enabledCollectors = [ "systemd" ]; # logind ?
|
||||
extraFlags = [
|
||||
"--web.config.file=${nodeWebConfig}"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue