From d65d9dea2c28c1fb57dd2206a85c562d514ad9df Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Fri, 5 Mar 2021 13:06:03 +0100 Subject: nixos/prometheus/exporters: use `types.port` for `port` option --- nixos/modules/services/monitoring/prometheus/exporters.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/modules/services/monitoring/prometheus/exporters.nix b/nixos/modules/services/monitoring/prometheus/exporters.nix index 940f2818937..e48090d92bf 100644 --- a/nixos/modules/services/monitoring/prometheus/exporters.nix +++ b/nixos/modules/services/monitoring/prometheus/exporters.nix @@ -64,7 +64,7 @@ let mkExporterOpts = ({ name, port }: { enable = mkEnableOption "the prometheus ${name} exporter"; port = mkOption { - type = types.int; + type = types.port; default = port; description = '' Port to listen on. -- cgit 1.4.1 From bae2759a377283f44aa95facf4732101819f16c1 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Fri, 5 Mar 2021 13:06:20 +0100 Subject: prometheus-knot-exporter: init at 2020-01-30 --- .../monitoring/prometheus/knot-exporter.nix | 37 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 2 files changed, 38 insertions(+) create mode 100644 pkgs/servers/monitoring/prometheus/knot-exporter.nix diff --git a/pkgs/servers/monitoring/prometheus/knot-exporter.nix b/pkgs/servers/monitoring/prometheus/knot-exporter.nix new file mode 100644 index 00000000000..32722ff5593 --- /dev/null +++ b/pkgs/servers/monitoring/prometheus/knot-exporter.nix @@ -0,0 +1,37 @@ +{ stdenv, fetchFromGitHub, lib, python3 }: + +stdenv.mkDerivation rec { + pname = "knot-exporter-unstable"; + version = "2020-01-30"; + + src = fetchFromGitHub { + owner = "ghedo"; + repo = "knot_exporter"; + rev = "21dd46b401e0c1aea0b173e19462cdf89e1f444e"; + sha256 = "sha256-4au4lpaq3jcqC2JXdCcf8h+YN8Nmm4eE0kZwA+1rWlc="; + }; + + dontBuild = true; + + nativeBuildInputs = [ python3.pkgs.wrapPython ]; + buildInputs = [ python3 ]; + + installPhase = '' + runHook preInstall + + install -Dm0755 knot_exporter $out/bin/knot_exporter + patchShebangs $out/bin + buildPythonPath ${python3.pkgs.prometheus_client} + patchPythonScript $out/bin/knot_exporter + + runHook postInstall + ''; + + meta = with lib; { + homepage = "https://github.com/ghedo/knot_exporter"; + description = " Prometheus exporter for Knot DNS"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ ma27 ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c38af6eced2..c14dd037df0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -18533,6 +18533,7 @@ in prometheus-haproxy-exporter = callPackage ../servers/monitoring/prometheus/haproxy-exporter.nix { }; prometheus-json-exporter = callPackage ../servers/monitoring/prometheus/json-exporter.nix { }; prometheus-keylight-exporter = callPackage ../servers/monitoring/prometheus/keylight-exporter.nix { }; + prometheus-knot-exporter = callPackage ../servers/monitoring/prometheus/knot-exporter.nix { }; prometheus-lnd-exporter = callPackage ../servers/monitoring/prometheus/lnd-exporter.nix { }; prometheus-mail-exporter = callPackage ../servers/monitoring/prometheus/mail-exporter.nix { }; prometheus-mesos-exporter = callPackage ../servers/monitoring/prometheus/mesos-exporter.nix { }; -- cgit 1.4.1 From b4bd584b640d0bee0ab5a2d8dbbaf4f5e4ee53db Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Fri, 5 Mar 2021 13:06:40 +0100 Subject: nixos/prometheus/exporters/knot: init --- .../services/monitoring/prometheus/exporters.nix | 1 + .../monitoring/prometheus/exporters/knot.nix | 50 ++++++++++++++++++++++ nixos/tests/prometheus-exporters.nix | 18 ++++++++ 3 files changed, 69 insertions(+) create mode 100644 nixos/modules/services/monitoring/prometheus/exporters/knot.nix diff --git a/nixos/modules/services/monitoring/prometheus/exporters.nix b/nixos/modules/services/monitoring/prometheus/exporters.nix index e48090d92bf..b453b2418f6 100644 --- a/nixos/modules/services/monitoring/prometheus/exporters.nix +++ b/nixos/modules/services/monitoring/prometheus/exporters.nix @@ -31,6 +31,7 @@ let "fritzbox" "json" "keylight" + "knot" "lnd" "mail" "mikrotik" diff --git a/nixos/modules/services/monitoring/prometheus/exporters/knot.nix b/nixos/modules/services/monitoring/prometheus/exporters/knot.nix new file mode 100644 index 00000000000..46c28fe0a57 --- /dev/null +++ b/nixos/modules/services/monitoring/prometheus/exporters/knot.nix @@ -0,0 +1,50 @@ +{ config, lib, pkgs, options }: + +with lib; + +let + cfg = config.services.prometheus.exporters.knot; +in { + port = 9433; + extraOpts = { + knotLibraryPath = mkOption { + type = types.str; + default = "${pkgs.knot-dns.out}/lib/libknot.so"; + defaultText = "\${pkgs.knot-dns}/lib/libknot.so"; + description = '' + Path to the library of knot-dns. + ''; + }; + + knotSocketPath = mkOption { + type = types.str; + default = "/run/knot/knot.sock"; + description = '' + Socket path of knotd + 8. + ''; + }; + + knotSocketTimeout = mkOption { + type = types.int; + default = 2000; + description = '' + Timeout in seconds. + ''; + }; + }; + serviceOpts = { + serviceConfig = { + ExecStart = '' + ${pkgs.prometheus-knot-exporter}/bin/knot_exporter \ + --web-listen-addr ${cfg.listenAddress} \ + --web-listen-port ${toString cfg.port} \ + --knot-library-path ${cfg.knotLibraryPath} \ + --knot-socket-path ${cfg.knotSocketPath} \ + --knot-socket-timeout ${toString cfg.knotSocketTimeout} \ + ${concatStringsSep " \\\n " cfg.extraFlags} + ''; + SupplementaryGroups = [ "knot" ]; + }; + }; +} diff --git a/nixos/tests/prometheus-exporters.nix b/nixos/tests/prometheus-exporters.nix index 89d17c9de8c..bf0d0fa01ec 100644 --- a/nixos/tests/prometheus-exporters.nix +++ b/nixos/tests/prometheus-exporters.nix @@ -248,6 +248,24 @@ let ''; }; + knot = { + exporterConfig = { + enable = true; + }; + metricProvider = { + services.knot = { + enable = true; + extraArgs = [ "-v" ]; + }; + }; + exporterTest = '' + wait_for_unit("knot.service") + wait_for_unit("prometheus-knot-exporter.service") + wait_for_open_port(9433) + succeed("curl -sSf 'localhost:9433' | grep -q 'knot_server_zone_count 0.0'") + ''; + }; + keylight = { # A hardware device is required to properly test this exporter, so just # perform a couple of basic sanity checks that the exporter is running -- cgit 1.4.1 From 2838365903f0f9d363bad8a1a6da9d1f706c1bd6 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Fri, 5 Mar 2021 13:35:16 +0100 Subject: nixos/prometheus/exporters: assert that `openFirewall` is `true` if `firewallFilter` is declared --- .../services/monitoring/prometheus/exporters.nix | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/nixos/modules/services/monitoring/prometheus/exporters.nix b/nixos/modules/services/monitoring/prometheus/exporters.nix index b453b2418f6..2c765318945 100644 --- a/nixos/modules/services/monitoring/prometheus/exporters.nix +++ b/nixos/modules/services/monitoring/prometheus/exporters.nix @@ -3,7 +3,7 @@ let inherit (lib) concatStrings foldl foldl' genAttrs literalExample maintainers mapAttrsToList mkDefault mkEnableOption mkIf mkMerge mkOption - optional types; + optional types mkOptionDefault flip attrNames; cfg = config.services.prometheus.exporters; @@ -93,9 +93,8 @@ let ''; }; firewallFilter = mkOption { - type = types.str; - default = "-p tcp -m tcp --dport ${toString cfg.${name}.port}"; - defaultText = "-p tcp -m tcp --dport ${toString port}"; + type = types.nullOr types.str; + default = null; example = literalExample '' "-i eth0 -p tcp -m tcp --dport ${toString port}" ''; @@ -123,12 +122,14 @@ let mkSubModule = { name, port, extraOpts, imports }: { ${name} = mkOption { - type = types.submodule { + type = types.submodule [{ inherit imports; options = (mkExporterOpts { inherit name port; } // extraOpts); - }; + } ({ config, ... }: mkIf config.openFirewall { + firewallFilter = mkOptionDefault "-p tcp -m tcp --dport ${toString config.port}"; + })]; internal = true; default = {}; }; @@ -233,7 +234,13 @@ in Please specify either 'services.prometheus.exporters.sql.configuration' or 'services.prometheus.exporters.sql.configFile' ''; - } ]; + } ] ++ (flip map (attrNames cfg) (exporter: { + assertion = cfg.${exporter}.firewallFilter != null -> cfg.${exporter}.openFirewall; + message = '' + The `firewallFilter'-option of exporter ${exporter} doesn't have any effect unless + `openFirewall' is set to `true'! + ''; + })); }] ++ [(mkIf config.services.minio.enable { services.prometheus.exporters.minio.minioAddress = mkDefault "http://localhost:9000"; services.prometheus.exporters.minio.minioAccessKey = mkDefault config.services.minio.accessKey; -- cgit 1.4.1 From 43c560fc4b933b98708de9fec2e050abd8eb98eb Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 7 Mar 2021 22:12:09 +0100 Subject: prometheus-knot-exporter: fix `-unstable-` infix Co-authored-by: Sandro --- pkgs/servers/monitoring/prometheus/knot-exporter.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/servers/monitoring/prometheus/knot-exporter.nix b/pkgs/servers/monitoring/prometheus/knot-exporter.nix index 32722ff5593..f1c4c60531d 100644 --- a/pkgs/servers/monitoring/prometheus/knot-exporter.nix +++ b/pkgs/servers/monitoring/prometheus/knot-exporter.nix @@ -1,8 +1,8 @@ { stdenv, fetchFromGitHub, lib, python3 }: stdenv.mkDerivation rec { - pname = "knot-exporter-unstable"; - version = "2020-01-30"; + pname = "knot-exporter"; + version = "unstable-2020-01-30"; src = fetchFromGitHub { owner = "ghedo"; -- cgit 1.4.1 From c62eef5675e6f8ebeeb04fbb13c529899846cf16 Mon Sep 17 00:00:00 2001 From: WilliButz Date: Thu, 11 Mar 2021 18:39:17 +0100 Subject: prometheus-knot-exporter: reference vm test --- pkgs/servers/monitoring/prometheus/knot-exporter.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/servers/monitoring/prometheus/knot-exporter.nix b/pkgs/servers/monitoring/prometheus/knot-exporter.nix index f1c4c60531d..9d99685b569 100644 --- a/pkgs/servers/monitoring/prometheus/knot-exporter.nix +++ b/pkgs/servers/monitoring/prometheus/knot-exporter.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, lib, python3 }: +{ stdenv, fetchFromGitHub, lib, python3, nixosTests }: stdenv.mkDerivation rec { pname = "knot-exporter"; @@ -27,6 +27,8 @@ stdenv.mkDerivation rec { runHook postInstall ''; + passthru.tests = { inherit (nixosTests.prometheus-exporters) knot; }; + meta = with lib; { homepage = "https://github.com/ghedo/knot_exporter"; description = " Prometheus exporter for Knot DNS"; -- cgit 1.4.1