vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / dovecot.nix
blobf11e91fd761a90cedc247fc43c3e184f6d359c83
1 { config, lib, pkgs, options, ... }:
3 let
4   cfg = config.services.prometheus.exporters.dovecot;
5   inherit (lib)
6     mkOption
7     types
8     escapeShellArg
9     concatStringsSep
10     ;
13   port = 9166;
14   extraOpts = {
15     telemetryPath = mkOption {
16       type = types.str;
17       default = "/metrics";
18       description = ''
19         Path under which to expose metrics.
20       '';
21     };
22     socketPath = mkOption {
23       type = types.path;
24       default = "/var/run/dovecot/stats";
25       example = "/var/run/dovecot2/old-stats";
26       description = ''
27         Path under which the stats socket is placed.
28         The user/group under which the exporter runs,
29         should be able to access the socket in order
30         to scrape the metrics successfully.
32         Please keep in mind that the stats module has changed in
33         [Dovecot 2.3+](https://wiki2.dovecot.org/Upgrading/2.3) which
34         is not [compatible with this exporter](https://github.com/kumina/dovecot_exporter/issues/8).
36         The following extra config has to be passed to Dovecot to ensure that recent versions
37         work with this exporter:
38         ```
39         {
40           services.prometheus.exporters.dovecot.enable = true;
41           services.prometheus.exporters.dovecot.socketPath = "/var/run/dovecot2/old-stats";
42           services.dovecot2.mailPlugins.globally.enable = [ "old_stats" ];
43           services.dovecot2.extraConfig = '''
44             service old-stats {
45               unix_listener old-stats {
46                 user = dovecot-exporter
47                 group = dovecot-exporter
48                 mode = 0660
49               }
50               fifo_listener old-stats-mail {
51                 mode = 0660
52                 user = dovecot
53                 group = dovecot
54               }
55               fifo_listener old-stats-user {
56                 mode = 0660
57                 user = dovecot
58                 group = dovecot
59               }
60             }
61             plugin {
62               old_stats_refresh = 30 secs
63               old_stats_track_cmds = yes
64             }
65           ''';
66         }
67         ```
68       '';
69     };
70     scopes = mkOption {
71       type = types.listOf types.str;
72       default = [ "user" ];
73       example = [ "user" "global" ];
74       description = ''
75         Stats scopes to query.
76       '';
77     };
78   };
79   serviceOpts = {
80     serviceConfig = {
81       DynamicUser = false;
82       ExecStart = ''
83         ${pkgs.prometheus-dovecot-exporter}/bin/dovecot_exporter \
84           --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
85           --web.telemetry-path ${cfg.telemetryPath} \
86           --dovecot.socket-path ${escapeShellArg cfg.socketPath} \
87           --dovecot.scopes ${concatStringsSep "," cfg.scopes} \
88           ${concatStringsSep " \\\n  " cfg.extraFlags}
89       '';
90       RestrictAddressFamilies = [
91         # Need AF_UNIX to collect data
92         "AF_UNIX"
93       ];
94     };
95   };