From 377847e3c8e2ae07ba424dfc4ea37335ca9da38d Mon Sep 17 00:00:00 2001 From: Dionysis Grigoropoulos Date: Fri, 26 Sep 2025 13:27:03 +0300 Subject: [PATCH] nixos/prometheus/storagebox: Init module --- .../manual/release-notes/rl-2511.section.md | 2 + .../monitoring/prometheus/exporters.nix | 1 + .../prometheus/exporters/storagebox.nix | 47 +++++++++++++++++++ nixos/tests/prometheus-exporters.nix | 15 ++++++ 4 files changed, 65 insertions(+) create mode 100644 nixos/modules/services/monitoring/prometheus/exporters/storagebox.nix diff --git a/nixos/doc/manual/release-notes/rl-2511.section.md b/nixos/doc/manual/release-notes/rl-2511.section.md index fe3a5f043828..f6d4cb63bc9c 100644 --- a/nixos/doc/manual/release-notes/rl-2511.section.md +++ b/nixos/doc/manual/release-notes/rl-2511.section.md @@ -116,6 +116,8 @@ - [SuiteNumérique Meet](https://github.com/suitenumerique/meet) is an open source alternative to Google Meet and Zoom powered by LiveKit: HD video calls, screen sharing, and chat features. Built with Django and React. Available as [services.lasuite-meet](#opt-services.lasuite-meet.enable). +- [Prometheus Storagebox Exporter](https://github.com/fleaz/prometheus-storagebox-exporter), a Prometheus exporter for Hetzner storage boxes. + - [lemurs](https://github.com/coastalwhite/lemurs), a customizable TUI display/login manager. Available at [services.displayManager.lemurs](#opt-services.displayManager.lemurs.enable). - [paisa](https://github.com/ananthakumaran/paisa), a personal finance tracker and dashboard. Available as [services.paisa](#opt-services.paisa.enable). diff --git a/nixos/modules/services/monitoring/prometheus/exporters.nix b/nixos/modules/services/monitoring/prometheus/exporters.nix index 35a89ab1bf71..60e4e5ac4d15 100644 --- a/nixos/modules/services/monitoring/prometheus/exporters.nix +++ b/nixos/modules/services/monitoring/prometheus/exporters.nix @@ -124,6 +124,7 @@ let "snmp" "sql" "statsd" + "storagebox" "surfboard" "systemd" "tibber" diff --git a/nixos/modules/services/monitoring/prometheus/exporters/storagebox.nix b/nixos/modules/services/monitoring/prometheus/exporters/storagebox.nix new file mode 100644 index 000000000000..10a102bbf62f --- /dev/null +++ b/nixos/modules/services/monitoring/prometheus/exporters/storagebox.nix @@ -0,0 +1,47 @@ +{ + config, + lib, + pkgs, + options, + ... +}: + +let + cfg = config.services.prometheus.exporters.storagebox; + inherit (lib) mkPackageOption; +in +{ + port = 9509; + extraOpts = { + package = mkPackageOption pkgs "prometheus-storagebox-exporter" { }; + tokenFile = lib.mkOption { + type = lib.types.pathWith { + inStore = false; + absolute = true; + }; + description = "File that contains the Hetzner API token to use."; + }; + + }; + serviceOpts = { + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + script = '' + export HETZNER_TOKEN=$(< "''${CREDENTIALS_DIRECTORY}/token") + exec ${lib.getExe cfg.package} + ''; + + environment = { + LISTEN_ADDR = "${toString cfg.listenAddress}:${toString cfg.port}"; + }; + + serviceConfig = { + DynamicUser = true; + Restart = "always"; + RestartSec = "10s"; + LoadCredential = [ + "token:${cfg.tokenFile}" + ]; + }; + }; +} diff --git a/nixos/tests/prometheus-exporters.nix b/nixos/tests/prometheus-exporters.nix index 3009afa26234..c4e60a72416a 100644 --- a/nixos/tests/prometheus-exporters.nix +++ b/nixos/tests/prometheus-exporters.nix @@ -1615,6 +1615,21 @@ let ''; }; + storagebox = { + exporterConfig = { + enable = true; + tokenFile = "/tmp/faketoken"; + }; + exporterTest = '' + succeed( + 'echo faketoken > /tmp/faketoken' + ) + wait_for_unit("prometheus-storagebox-exporter.service") + wait_for_open_port(9509) + succeed("curl -sSf localhost:9509/metrics | grep 'process_open_fds'") + ''; + }; + snmp = { exporterConfig = { enable = true;