From 80b437dfa720056108c07cc14c3a6f9847b9feb6 Mon Sep 17 00:00:00 2001 From: K900 Date: Sat, 1 Mar 2025 14:24:51 +0300 Subject: [PATCH] nixos/pgscv: init --- nixos/modules/module-list.nix | 1 + nixos/modules/services/monitoring/pgscv.nix | 75 +++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 nixos/modules/services/monitoring/pgscv.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 23972da40674..aba65045b64f 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -962,6 +962,7 @@ ./services/monitoring/opentelemetry-collector.nix ./services/monitoring/osquery.nix ./services/monitoring/parsedmarc.nix + ./services/monitoring/pgscv.nix ./services/monitoring/prometheus/alertmanager-gotify-bridge.nix ./services/monitoring/prometheus/alertmanager-irc-relay.nix ./services/monitoring/prometheus/alertmanager-webhook-logger.nix diff --git a/nixos/modules/services/monitoring/pgscv.nix b/nixos/modules/services/monitoring/pgscv.nix new file mode 100644 index 000000000000..e60d0d45ab92 --- /dev/null +++ b/nixos/modules/services/monitoring/pgscv.nix @@ -0,0 +1,75 @@ +{ + config, + lib, + pkgs, + utils, + ... +}: + +let + inherit (lib) + mkEnableOption + mkIf + mkOption + mkPackageOption + types + ; + + cfg = config.services.pgscv; + + settingsFormat = pkgs.formats.yaml { }; + configFile = settingsFormat.generate "config.yaml" cfg.settings; +in +{ + options.services.pgscv = { + enable = mkEnableOption "pgSCV, a PostgreSQL ecosystem metrics collector"; + + package = mkPackageOption pkgs "pgscv" { }; + + logLevel = mkOption { + type = types.enum [ + "debug" + "info" + "warn" + "error" + ]; + default = "info"; + description = "Log level for pgSCV."; + }; + + settings = mkOption { + type = settingsFormat.type; + default = { }; + description = '' + Configuration for pgSCV, in YAML format. + + See [configuration reference](https://github.com/cherts/pgscv/wiki/Configuration-settings-reference). + ''; + }; + }; + + config = mkIf cfg.enable { + systemd.services.pgscv = { + description = "pgSCV - PostgreSQL ecosystem metrics collector"; + wantedBy = [ "multi-user.target" ]; + requires = [ "network-online.target" ]; + after = [ "network-online.target" ]; + path = [ pkgs.glibc ]; # shells out to getconf + + serviceConfig = { + User = "postgres"; + Group = "postgres"; + ExecStart = utils.escapeSystemdExecArgs [ + (lib.getExe cfg.package) + "--log-level=${cfg.logLevel}" + "--config-file=${configFile}" + ]; + KillMode = "control-group"; + TimeoutSec = 5; + Restart = "on-failure"; + RestartSec = 10; + OOMScoreAdjust = 1000; + }; + }; + }; +}