vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / mysqld.nix
blob5b2c2274f0539f296283bbb51b36ae54844c63ec
1 { config, lib, pkgs, options, ... }:
2 let
3   cfg = config.services.prometheus.exporters.mysqld;
4   inherit (lib) types mkOption mkIf mkForce cli concatStringsSep optionalString escapeShellArgs;
5 in {
6   port = 9104;
7   extraOpts = {
8     telemetryPath = mkOption {
9       type = types.str;
10       default = "/metrics";
11       description = ''
12         Path under which to expose metrics.
13       '';
14     };
16     runAsLocalSuperUser = mkOption {
17       type = types.bool;
18       default = false;
19       description = ''
20         Whether to run the exporter as {option}`services.mysql.user`.
21       '';
22     };
24     configFile = mkOption {
25       type = types.path;
26       example = "/var/lib/prometheus-mysqld-exporter.cnf";
27       description = ''
28         Path to the services config file.
30         See <https://github.com/prometheus/mysqld_exporter#running> for more information about
31         the available options.
33         ::: {.warn}
34         Please do not store this file in the nix store if you choose to include any credentials here,
35         as it would be world-readable.
36         :::
37       '';
38     };
39   };
41   serviceOpts = {
42     serviceConfig = {
43       DynamicUser = !cfg.runAsLocalSuperUser;
44       User = mkIf cfg.runAsLocalSuperUser (mkForce config.services.mysql.user);
45       LoadCredential = mkIf (cfg.configFile != null) (mkForce ("config:" + cfg.configFile));
46       ExecStart = concatStringsSep " " [
47         "${pkgs.prometheus-mysqld-exporter}/bin/mysqld_exporter"
48         "--web.listen-address=${cfg.listenAddress}:${toString cfg.port}"
49         "--web.telemetry-path=${cfg.telemetryPath}"
50         (optionalString (cfg.configFile != null) ''--config.my-cnf=''${CREDENTIALS_DIRECTORY}/config'')
51         (escapeShellArgs cfg.extraFlags)
52       ];
53       RestrictAddressFamilies = [
54         # The exporter can be configured to talk to a local mysql server via a unix socket.
55         "AF_UNIX"
56       ];
57     };
58   };