nixos/prometheus-exporters: add php-fpm

Changed files
+108 -1
nixos
modules
services
monitoring
prometheus
tests
+1
nixos/modules/services/monitoring/prometheus/exporters.nix
···
"nut"
"openldap"
"openvpn"
"pihole"
"postfix"
"postgres"
···
"nut"
"openldap"
"openvpn"
+
"php-fpm"
"pihole"
"postfix"
"postgres"
+65
nixos/modules/services/monitoring/prometheus/exporters/php-fpm.nix
···
···
+
{ config
+
, lib
+
, pkgs
+
, options
+
}:
+
+
let
+
logPrefix = "services.prometheus.exporter.php-fpm";
+
cfg = config.services.prometheus.exporters.php-fpm;
+
in {
+
port = 9253;
+
extraOpts = {
+
package = lib.mkPackageOptionMD pkgs "prometheus-php-fpm-exporter" {};
+
+
telemetryPath = lib.mkOption {
+
type = lib.types.str;
+
default = "/metrics";
+
description = lib.mdDoc ''
+
Path under which to expose metrics.
+
'';
+
};
+
+
environmentFile = lib.mkOption {
+
type = lib.types.nullOr lib.types.path;
+
default = null;
+
example = "/root/prometheus-php-fpm-exporter.env";
+
description = lib.mdDoc ''
+
Environment file as defined in {manpage}`systemd.exec(5)`.
+
+
Secrets may be passed to the service without adding them to the
+
world-readable Nix store, by specifying placeholder variables as
+
the option value in Nix and setting these variables accordingly in the
+
environment file.
+
+
Environment variables from this file will be interpolated into the
+
config file using envsubst with this syntax:
+
`$ENVIRONMENT ''${VARIABLE}`
+
+
For variables to use see [options and defaults](https://github.com/hipages/php-fpm_exporter#options-and-defaults).
+
+
The main use is to set the PHP_FPM_SCRAPE_URI that indicate how to connect to PHP-FPM process.
+
+
```
+
# Content of the environment file
+
PHP_FPM_SCRAPE_URI="unix:///tmp/php.sock;/status"
+
```
+
+
Note that this file needs to be available on the host on which
+
this exporter is running.
+
'';
+
};
+
};
+
+
serviceOpts = {
+
serviceConfig = {
+
EnvironmentFile = lib.mkIf (cfg.environmentFile != null) [ cfg.environmentFile ];
+
ExecStart = ''
+
${lib.getExe cfg.package} server \
+
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+
--web.telemetry-path ${cfg.telemetryPath} \
+
${lib.concatStringsSep " \\\n " cfg.extraFlags}
+
'';
+
};
+
};
+
}
+42 -1
nixos/tests/prometheus-exporters.nix
···
let
inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest;
inherit (pkgs.lib) concatStringsSep maintainers mapAttrs mkMerge
-
removeSuffix replaceStrings singleton splitString;
/*
* The attrset `exporterTests` contains one attribute
···
wait_for_unit("openvpn-test.service")
wait_for_unit("prometheus-openvpn-exporter.service")
succeed("curl -sSf http://localhost:9176/metrics | grep 'openvpn_up{.*} 1'")
'';
};
···
let
inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest;
inherit (pkgs.lib) concatStringsSep maintainers mapAttrs mkMerge
+
removeSuffix replaceStrings singleton splitString makeBinPath;
/*
* The attrset `exporterTests` contains one attribute
···
wait_for_unit("openvpn-test.service")
wait_for_unit("prometheus-openvpn-exporter.service")
succeed("curl -sSf http://localhost:9176/metrics | grep 'openvpn_up{.*} 1'")
+
'';
+
};
+
+
php-fpm = {
+
nodeName = "php_fpm";
+
exporterConfig = {
+
enable = true;
+
environmentFile = pkgs.writeTextFile {
+
name = "/tmp/prometheus-php-fpm-exporter.env";
+
text = ''
+
PHP_FPM_SCRAPE_URI="tcp://127.0.0.1:9000/status"
+
'';
+
};
+
};
+
metricProvider = {
+
users.users."php-fpm-exporter" = {
+
isSystemUser = true;
+
group = "php-fpm-exporter";
+
};
+
users.groups."php-fpm-exporter" = {};
+
services.phpfpm.pools."php-fpm-exporter" = {
+
user = "php-fpm-exporter";
+
group = "php-fpm-exporter";
+
settings = {
+
"pm" = "dynamic";
+
"pm.max_children" = 32;
+
"pm.max_requests" = 500;
+
"pm.start_servers" = 2;
+
"pm.min_spare_servers" = 2;
+
"pm.max_spare_servers" = 5;
+
"pm.status_path" = "/status";
+
"listen" = "127.0.0.1:9000";
+
"listen.allowed_clients" = "127.0.0.1";
+
};
+
phpEnv."PATH" = makeBinPath [ pkgs.php ];
+
};
+
};
+
exporterTest = ''
+
wait_for_unit("phpfpm-php-fpm-exporter.service")
+
wait_for_unit("prometheus-php-fpm-exporter.service")
+
succeed("curl -sSf http://localhost:9253/metrics | grep 'phpfpm_up{.*} 1'")
'';
};